diff options
author | wg <wg@FreeBSD.org> | 2013-10-29 00:01:32 +0800 |
---|---|---|
committer | wg <wg@FreeBSD.org> | 2013-10-29 00:01:32 +0800 |
commit | 00a3726a41c12e05f19c0af4df8f1d7863ec81d6 (patch) | |
tree | 6cecadac40b24211f8748d25728dea0836408fdc | |
parent | 1a3a5cab44e96cabcc16531aeb49c3095a5f36fb (diff) | |
download | freebsd-ports-gnome-00a3726a41c12e05f19c0af4df8f1d7863ec81d6.tar.gz freebsd-ports-gnome-00a3726a41c12e05f19c0af4df8f1d7863ec81d6.tar.zst freebsd-ports-gnome-00a3726a41c12e05f19c0af4df8f1d7863ec81d6.zip |
math/octave-forge-video: fix buid with newer ffmpeg
- Chase API changes with ffmpeg 2.0
Reported by: marino
Approved by: portmgr (bapt, implicit)
-rw-r--r-- | math/octave-forge-video/files/patch-ffmpeg_0 | 132 | ||||
-rw-r--r-- | math/octave-forge-video/files/patch-ffmpeg_1 | 257 | ||||
-rw-r--r-- | math/octave-forge-video/files/patch-ffmpeg_2 | 34 |
3 files changed, 423 insertions, 0 deletions
diff --git a/math/octave-forge-video/files/patch-ffmpeg_0 b/math/octave-forge-video/files/patch-ffmpeg_0 new file mode 100644 index 000000000000..46a2a6aac661 --- /dev/null +++ b/math/octave-forge-video/files/patch-ffmpeg_0 @@ -0,0 +1,132 @@ +changeset: 11:a17550ef53d5 +user: carandraug +date: Tue Jan 10 14:06:05 2012 +0000 +files: src/AVHandler.cc +description: +AVHandler.cc: up[dating code to be compatible with latest version, 0.9, of ffmpeg. Patch submitted by Cihan Baran <cihanb@gmail.com> + + +diff -r db975a9b9954 -r a17550ef53d5 src/AVHandler.cc +--- src/AVHandler.cc Tue Sep 27 12:34:58 2011 +0000 ++++ src/AVHandler.cc Tue Jan 10 14:06:05 2012 +0000 +@@ -42,6 +42,8 @@ + #endif + + std::ostream *AVHandler::out = &std::cout; ++/** head of registered output format linked list */ ++static AVOutputFormat *first_oformat = NULL; + + AVHandler::~AVHandler(void) { + if (frame) { +@@ -106,7 +108,7 @@ + return -1; + } + +- av_output = av_alloc_format_context(); ++ av_output = avformat_alloc_context(); + if (!av_output) { + (*out) << "AVHandler: Memory error allocating format context" << std::endl; + return -1; +@@ -127,9 +129,9 @@ + } + + snprintf(av_output->filename, sizeof(av_output->filename), "%s", filename.c_str()); +- snprintf(av_output->title, sizeof(av_output->title), "%s", title.c_str()); +- snprintf(av_output->author, sizeof(av_output->author), "%s", author.c_str()); +- snprintf(av_output->comment, sizeof(av_output->comment), "%s", comment.c_str()); ++// snprintf(av_output->title, sizeof(av_output->title), "%s", title.c_str()); ++// snprintf(av_output->author, sizeof(av_output->author), "%s", author.c_str()); ++// snprintf(av_output->comment, sizeof(av_output->comment), "%s", comment.c_str()); + + if (url_fopen(&av_output->pb, filename.c_str(), URL_WRONLY) < 0) { + (*out) << "AVHandler: Could not open \"" << filename << "\" for output" << std::endl; +@@ -162,7 +164,7 @@ + } + + for (int i=0; i < av_input->nb_streams; i++) { +- if (av_input->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO) { ++ if (av_input->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) { + vstream = av_input->streams[i]; + break; + } +@@ -173,7 +175,7 @@ + } + + for (int i=0; i < av_input->nb_streams; i++) { +- if (av_input->streams[i]->codec->codec_type == CODEC_TYPE_AUDIO) { ++ if (av_input->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO) { + astream = av_input->streams[i]; + break; + } +@@ -204,9 +206,9 @@ + width = vstream->codec->width; + height = vstream->codec->height; + +- title = av_input->title; +- author = av_input->author; +- comment = av_input->comment; ++// title = av_input->title; ++// author = av_input->author; ++// comment = av_input->comment; + + rgbframe = create_frame(PIX_FMT_RGB24); + if (!rgbframe) return -1; +@@ -258,7 +260,7 @@ + if (c->coded_frame) + pkt.pts = c->coded_frame->pts; + if (c->coded_frame && c->coded_frame->key_frame) +- pkt.flags |= PKT_FLAG_KEY; ++ pkt.flags |= AV_PKT_FLAG_KEY; + /// XXX FIXME XXX does this ensure that the first frame is always a key frame? + + if (av_write_frame(av_output, &pkt) != 0) { +@@ -296,7 +298,7 @@ + (*out) << "AVHandler: Error seeking to " << target_timestamp << std::endl; + return -1; + } +- cc->hurry_up = 1; ++ cc->skip_frame; + + // Flush stream buffers after seek + avcodec_flush_buffers(cc); +@@ -331,7 +333,11 @@ + + // Decode the packet into a frame + int frameFinished; +- if (avcodec_decode_video(cc, frame, &frameFinished, packet.data, packet.size) < 0) { ++ ++ // HACK for CorePNG to decode as normal PNG by default ++ packet.flags = AV_PKT_FLAG_KEY; ++ ++ if (avcodec_decode_video2(cc, frame, &frameFinished, &packet) < 0) { + (*out) << "AVHandler: Error decoding video stream" << std::endl; + av_free_packet(&packet); + av_free(frame); frame = NULL; +@@ -342,7 +348,7 @@ + current_timestamp = (uint64_t)(vstream->cur_dts * AV_TIME_BASE * (long double)stream_time_base); + } + } +- cc->hurry_up = 0; ++// cc->hurry_up = 0; + + SwsContext *sc = sws_getContext(cc->width, cc->height, cc->pix_fmt, + cc->width, cc->height, PIX_FMT_BGR24, +@@ -375,7 +381,7 @@ + + AVCodec *codec; + for (codec = av_codec_next(0); codec != NULL; codec = av_codec_next(codec)) { +- if ((codec->type == CODEC_TYPE_VIDEO) && ++ if ((codec->type == AVMEDIA_TYPE_VIDEO) && + (codec->encode)) { + (*out) << codec->name << " "; + } +@@ -395,7 +401,7 @@ + + cc = vstream->codec; + +- cc->codec_type = CODEC_TYPE_VIDEO; ++ cc->codec_type = AVMEDIA_TYPE_VIDEO; + + cc->bit_rate = bitrate; + cc->width = width; + diff --git a/math/octave-forge-video/files/patch-ffmpeg_1 b/math/octave-forge-video/files/patch-ffmpeg_1 new file mode 100644 index 000000000000..9b2372b68667 --- /dev/null +++ b/math/octave-forge-video/files/patch-ffmpeg_1 @@ -0,0 +1,257 @@ +changeset: 12:7caa40bb8a47 +user: carandraug +date: Tue Oct 09 21:26:03 2012 +0000 +files: DESCRIPTION src/AVHandler.cc src/AVHandler.h src/aviinfo.cc src/oct-avifile.cc +description: +video: fixes for new versions of ffmpeg and do not reject videos with odd dimension sizes (patch by Donjan Rodic <drodic@student.ethz.ch> + + +diff -r a17550ef53d5 -r 7caa40bb8a47 DESCRIPTION +--- DESCRIPTION Tue Jan 10 14:06:05 2012 +0000 ++++ DESCRIPTION Tue Oct 09 21:26:03 2012 +0000 +@@ -7,6 +7,6 @@ + Description: Implements addframe, avifile, aviinfo, and aviread, using ffmpeg. (and approximately conforms to Matlab interface) + Depends: octave (>= 2.9.12) + Autoload: yes +-SystemRequirements: ffmpeg ++SystemRequirements: >=ffmpeg-0.7 + License: BSD + Url: http://octave.sf.net +diff -r a17550ef53d5 -r 7caa40bb8a47 src/AVHandler.cc +--- src/AVHandler.cc Tue Jan 10 14:06:05 2012 +0000 ++++ src/AVHandler.cc Tue Oct 09 21:26:03 2012 +0000 +@@ -42,8 +42,6 @@ + #endif + + std::ostream *AVHandler::out = &std::cout; +-/** head of registered output format linked list */ +-static AVOutputFormat *first_oformat = NULL; + + AVHandler::~AVHandler(void) { + if (frame) { +@@ -66,7 +64,7 @@ + if (av_output->pb->buf_ptr) { + while (write_frame() > 0) {} + av_write_trailer(av_output); +- if (url_fclose( av_output->pb ) < 0) ++ if (avio_close( av_output->pb ) < 0) + (*out) << "AVHandler: cannot close output file" << std::endl; + } + av_free(av_output); +@@ -80,7 +78,7 @@ + } + + if (av_input) { +- av_close_input_file(av_input); ++ avformat_close_input(&av_input); + } else { + // close output stream + if (vstream) av_freep(&vstream); +@@ -96,8 +94,8 @@ + AVHandler::setup_write() { + av_register_all(); + +- AVOutputFormat *avifmt; +- for (avifmt = first_oformat; avifmt != NULL; avifmt = avifmt->next) { ++ AVOutputFormat *avifmt = NULL; ++ while (NULL != (avifmt = av_oformat_next(avifmt))) { + if (std::string(avifmt->name) == "avi") { + break; + } +@@ -123,17 +121,18 @@ + } + + /* av_set_parameters is mandatory */ ++ // FIXME: deprecated, but there's no replacement yet + if (av_set_parameters(av_output, NULL) < 0) { + (*out) << "AVHandler: Error setting output format parameters" << std::endl; + return -1; + } + + snprintf(av_output->filename, sizeof(av_output->filename), "%s", filename.c_str()); +-// snprintf(av_output->title, sizeof(av_output->title), "%s", title.c_str()); +-// snprintf(av_output->author, sizeof(av_output->author), "%s", author.c_str()); +-// snprintf(av_output->comment, sizeof(av_output->comment), "%s", comment.c_str()); ++// FIXME: snprintf(av_output->title, sizeof(av_output->title), "%s", title.c_str()); ++// FIXME: snprintf(av_output->author, sizeof(av_output->author), "%s", author.c_str()); ++// FIXME: snprintf(av_output->comment, sizeof(av_output->comment), "%s", comment.c_str()); + +- if (url_fopen(&av_output->pb, filename.c_str(), URL_WRONLY) < 0) { ++ if (avio_open(&av_output->pb, filename.c_str(), URL_WRONLY) < 0) { + (*out) << "AVHandler: Could not open \"" << filename << "\" for output" << std::endl; + return -1; + } +@@ -143,8 +142,8 @@ + frame = create_frame(vstream->codec->pix_fmt); + rgbframe = create_frame(PIX_FMT_RGB24); + if (!frame || !rgbframe) return -1; +- +- av_write_header(av_output); ++ ++ avformat_write_header(av_output, NULL); + + return 0; + } +@@ -153,12 +152,12 @@ + AVHandler::setup_read() { + av_register_all(); + +- if (av_open_input_file(&av_input, filename.c_str(), NULL, 0, NULL) != 0) { ++ if (avformat_open_input(&av_input, filename.c_str(), NULL, NULL) != 0) { + (*out) << "AVHandler: Could not open \"" << filename << "\" for reading" << std::endl; + return -1; + } + +- if (av_find_stream_info(av_input) < 0) { ++ if (avformat_find_stream_info(av_input, NULL) < 0) { + (*out) << "AVHandler: No stream information available" << std::endl; + return -1; + } +@@ -194,7 +193,7 @@ + if (codec->capabilities & CODEC_CAP_TRUNCATED) + vstream->codec->flags |= CODEC_FLAG_TRUNCATED; + +- if (avcodec_open(vstream->codec, codec) < 0) { ++ if (avcodec_open2(vstream->codec, codec, NULL) < 0) { + (*out) << "AVHandler: Cannot open codec " << codec_name << std::endl; + vstream->codec->codec = NULL; + return -1; +@@ -206,9 +205,9 @@ + width = vstream->codec->width; + height = vstream->codec->height; + +-// title = av_input->title; +-// author = av_input->author; +-// comment = av_input->comment; ++// FIXME: title = av_input->title; ++// FIXME: author = av_input->author; ++// FIXME: comment = av_input->comment; + + rgbframe = create_frame(PIX_FMT_RGB24); + if (!rgbframe) return -1; +@@ -326,7 +325,7 @@ + return -1; + } + +- if (url_feof(av_input->pb)) { ++ if (av_input->pb->eof_reached) { + (*out) << "AVHandler: EOF reached" << std::endl; + } + } +@@ -348,6 +347,8 @@ + current_timestamp = (uint64_t)(vstream->cur_dts * AV_TIME_BASE * (long double)stream_time_base); + } + } ++// http://ffmpeg.org/pipermail/ffmpeg-cvslog/2011-April/035933.html ++// FIXME maybe use: cc->skip_frame; + // cc->hurry_up = 0; + + SwsContext *sc = sws_getContext(cc->width, cc->height, cc->pix_fmt, +@@ -367,9 +368,9 @@ + (*out) << "Supported file formats:" << std::endl; + av_register_all(); + +- AVOutputFormat *ofmt; +- for (ofmt = first_oformat; ofmt != NULL; ofmt = ofmt->next) { +- (*out) << ofmt->name << " "; ++ AVOutputFormat *ofmt = NULL; ++ while (NULL != (ofmt = av_oformat_next(ofmt))) { ++ (*out) << ofmt->name << " "; + } + (*out) << std::endl << std::endl; + } +@@ -392,8 +393,9 @@ + int + AVHandler::add_video_stream() { + AVCodecContext *cc; +- +- vstream = av_new_stream(av_output, 0); ++ ++ // FIXME: vstream = avformat_new_stream(av_output, av_find_default_stream_index(av_output)); ++ vstream = avformat_new_stream(av_output, NULL); + if (!vstream) { + (*out) << "AVHandler: error opening video output stream" << std::endl; + return -1; +@@ -402,7 +404,7 @@ + cc = vstream->codec; + + cc->codec_type = AVMEDIA_TYPE_VIDEO; +- ++ + cc->bit_rate = bitrate; + cc->width = width; + cc->height = height; +@@ -432,7 +434,7 @@ + return -1; + } + +- if (avcodec_open(cc, codec) < 0) { ++ if (avcodec_open2(cc, codec, NULL) < 0) { + (*out) << "AVHandler: cannot open codec" << std::endl; + cc->codec = NULL; + return -1; +diff -r a17550ef53d5 -r 7caa40bb8a47 src/AVHandler.h +--- src/AVHandler.h Tue Jan 10 14:06:05 2012 +0000 ++++ src/AVHandler.h Tue Oct 09 21:26:03 2012 +0000 +@@ -27,8 +27,11 @@ + + #define VIDEO_OUTBUF_SIZE 200000 + ++// FIXME: should define -D__STDC_CONSTANT_MACROS instead of the following + #define INT64_C ++#define UINT64_C + #define __STDC_CONSTANT_MACROS ++ + #include <errno.h> + extern "C" { + #if defined (HAVE_FFMPEG_AVFORMAT_H) +@@ -165,7 +168,7 @@ + + unsigned int get_total_frames() const { + if (vstream) { +- return (unsigned int)((double)framerate * vstream->duration / AV_TIME_BASE); ++ return (unsigned int) vstream->nb_frames; + } else { + return 0; + } +@@ -173,7 +176,7 @@ + + unsigned int get_filesize() const { + if (av_input) { +- return av_input->file_size; ++ return avio_size(av_input->pb); + } else { + return 0; + } +diff -r a17550ef53d5 -r 7caa40bb8a47 src/aviinfo.cc +--- src/aviinfo.cc Tue Jan 10 14:06:05 2012 +0000 ++++ src/aviinfo.cc Tue Oct 09 21:26:03 2012 +0000 +@@ -66,6 +66,7 @@ + av.set_log(&octave_stdout); + + if (av.setup_read() != 0) { ++ error("aviread: AVHandler setup failed"); + return retval; + } + +diff -r a17550ef53d5 -r 7caa40bb8a47 src/oct-avifile.cc +--- src/oct-avifile.cc Tue Jan 10 14:06:05 2012 +0000 ++++ src/oct-avifile.cc Tue Oct 09 21:26:03 2012 +0000 +@@ -56,10 +56,12 @@ + void + Avifile::addframe(const NDArray &f) { + if (frames == 0) { +- if ( (f.columns() % 2 != 0) || (f.rows() % 2 != 0) ) { +- error("avifile: matrix dimensions must be multiple of two"); +- return; +- } ++// FIXME: this suppresses warnings from ffmpeg, but completely prevents ++// working with many videos. ++// if ( (f.columns() % 2 != 0) || (f.rows() % 2 != 0) ) { ++// error("avifile: matrix dimensions must be multiple of two"); ++// return; ++// } + + if ( (f.columns() == 0) || (f.rows() == 0) ) { + error("avifile: matrix must have non-zero dimensions"); + diff --git a/math/octave-forge-video/files/patch-ffmpeg_2 b/math/octave-forge-video/files/patch-ffmpeg_2 new file mode 100644 index 000000000000..a7749a2df1a3 --- /dev/null +++ b/math/octave-forge-video/files/patch-ffmpeg_2 @@ -0,0 +1,34 @@ +--- src/AVHandler.cc.orig 2013-10-28 13:54:16.834945990 -0200 ++++ src/AVHandler.cc 2013-10-28 13:59:18.276945264 -0200 +@@ -123,17 +123,17 @@ + + /* av_set_parameters is mandatory */ + // FIXME: deprecated, but there's no replacement yet +- if (av_set_parameters(av_output, NULL) < 0) { +- (*out) << "AVHandler: Error setting output format parameters" << std::endl; +- return -1; +- } ++ //if (av_set_parameters(av_output, NULL) < 0) { ++ // (*out) << "AVHandler: Error setting output format parameters" << std::endl; ++ // return -1; ++ //} + + snprintf(av_output->filename, sizeof(av_output->filename), "%s", filename.c_str()); + // FIXME: snprintf(av_output->title, sizeof(av_output->title), "%s", title.c_str()); + // FIXME: snprintf(av_output->author, sizeof(av_output->author), "%s", author.c_str()); + // FIXME: snprintf(av_output->comment, sizeof(av_output->comment), "%s", comment.c_str()); + +- if (avio_open(&av_output->pb, filename.c_str(), URL_WRONLY) < 0) { ++ if (avio_open(&av_output->pb, filename.c_str(), AVIO_FLAG_WRITE) < 0) { + (*out) << "AVHandler: Could not open \"" << filename << "\" for output" << std::endl; + return -1; + } +@@ -384,7 +384,7 @@ + AVCodec *codec; + for (codec = av_codec_next(0); codec != NULL; codec = av_codec_next(codec)) { + if ((codec->type == AVMEDIA_TYPE_VIDEO) && +- (codec->encode)) { ++ av_codec_is_encoder(codec)) { + (*out) << codec->name << " "; + } + } |