Date: Mon, 28 Oct 2013 15:26:53 +0000 (UTC) From: William Grzybowski <wg@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r331864 - head/graphics/osg/files Message-ID: <201310281526.r9SFQrd7009612@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: wg Date: Mon Oct 28 15:26:53 2013 New Revision: 331864 URL: http://svnweb.freebsd.org/changeset/ports/331864 Log: graphics/osg: fix build with newer ffmpeg - Add patches to chase the API change of ffmpeg 2.0 Reported by: marino Approved by: portmgr (bapt, implicit) Added: head/graphics/osg/files/patch-libav07 (contents, props changed) head/graphics/osg/files/patch-libav9 (contents, props changed) head/graphics/osg/files/patch-src-osgPlugins-ffmpeg-FFmpegDecoderAudio.cpp (contents, props changed) Added: head/graphics/osg/files/patch-libav07 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/graphics/osg/files/patch-libav07 Mon Oct 28 15:26:53 2013 (r331864) @@ -0,0 +1,22 @@ +diff -ruN src/osgPlugins/ffmpeg/FFmpegHeaders.hpp src/osgPlugins/ffmpeg/FFmpegHeaders.hpp +--- src/osgPlugins/ffmpeg/FFmpegHeaders.hpp 2011-06-17 10:41:56.000000000 +0200 ++++ src/osgPlugins/ffmpeg/FFmpegHeaders.hpp 2011-11-17 19:44:33.194607494 +0100 +@@ -9,12 +9,13 @@ + #define FF_API_OLD_SAMPLE_FMT 0 + #include <errno.h> // for error codes defined in avformat.h + #include <stdint.h> +-#include <avcodec.h> +-#include <avformat.h> +-#include <avdevice.h> ++#include <libavcodec/avcodec.h> ++#include <libavformat/avformat.h> ++#include <libavdevice/avdevice.h> ++#include <libavutil/mathematics.h> + +-#ifdef USE_SWSCALE +- #include <swscale.h> ++#ifdef USE_SWSCALE ++ #include <libswscale/swscale.h> + #endif + + } Added: head/graphics/osg/files/patch-libav9 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/graphics/osg/files/patch-libav9 Mon Oct 28 15:26:53 2013 (r331864) @@ -0,0 +1,284 @@ +Patch by lu_zero +https://bugs.gentoo.org/show_bug.cgi?id=439606 +upstream svn rev. 13335 contains similar changes. +no need to upstream this patch. + +diff -burN CMakeModules/FindFFmpeg.cmake CMakeModules/FindFFmpeg.cmake +--- CMakeModules/FindFFmpeg.cmake 2011-04-19 13:40:22.000000000 +0200 ++++ CMakeModules/FindFFmpeg.cmake 2012-11-22 13:59:28.303401170 +0100 +@@ -131,20 +131,16 @@ + SET(FFMPEG_FOUND "YES") + + SET(FFMPEG_INCLUDE_DIRS +- ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS} ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS}/libavformat +- ${FFMPEG_LIBAVDEVICE_INCLUDE_DIRS} ${FFMPEG_LIBAVDEVICE_INCLUDE_DIRS}/libavdevice +- ${FFMPEG_LIBAVCODEC_INCLUDE_DIRS} ${FFMPEG_LIBAVCODEC_INCLUDE_DIRS}/libavcodec +- ${FFMPEG_LIBAVUTIL_INCLUDE_DIRS} ${FFMPEG_LIBAVUTIL_INCLUDE_DIRS}/libavutil ++ ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS} ++ ${FFMPEG_LIBAVDEVICE_INCLUDE_DIRS} ++ ${FFMPEG_LIBAVCODEC_INCLUDE_DIRS} ++ ${FFMPEG_LIBAVUTIL_INCLUDE_DIRS} + ) + + IF (FFMPEG_STDINT_INCLUDE_DIR) + SET(FFMPEG_INCLUDE_DIRS + ${FFMPEG_INCLUDE_DIRS} + ${FFMPEG_STDINT_INCLUDE_DIR} +- ${FFMPEG_STDINT_INCLUDE_DIR}/libavformat +- ${FFMPEG_STDINT_INCLUDE_DIR}/libavdevice +- ${FFMPEG_STDINT_INCLUDE_DIR}/libavcodec +- ${FFMPEG_STDINT_INCLUDE_DIR}/libavutil + ) + ENDIF() + +diff -burN src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp +--- src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp 2011-04-19 13:40:22.000000000 +0200 ++++ src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp 2012-11-22 15:03:53.668601596 +0100 +@@ -89,7 +89,7 @@ + // m_context->flags |= CODEC_FLAG_TRUNCATED; + + // Open codec +- if (avcodec_open(m_context, p_codec) < 0) ++ if (avcodec_open2(m_context, p_codec, NULL) < 0) + throw std::runtime_error("avcodec_open() failed"); + } + +Binary files src/osgPlugins/ffmpeg/.FFmpegDecoderAudio.cpp.swp and src/osgPlugins/ffmpeg/.FFmpegDecoderAudio.cpp.swp differ +diff -burN src/osgPlugins/ffmpeg/FFmpegDecoder.cpp src/osgPlugins/ffmpeg/FFmpegDecoder.cpp +--- src/osgPlugins/ffmpeg/FFmpegDecoder.cpp 2011-07-15 12:25:12.000000000 +0200 ++++ src/osgPlugins/ffmpeg/FFmpegDecoder.cpp 2012-11-22 15:59:39.569775078 +0100 +@@ -64,21 +64,12 @@ + + OSG_NOTICE<<"Attempting to stream "<<filename<<std::endl; + +- AVFormatParameters formatParams; +- memset(&formatParams, 0, sizeof(AVFormatParameters)); + AVInputFormat *iformat; ++ AVDictionary *options = NULL; + +- formatParams.channel = 0; +- formatParams.standard = 0; +-#if 1 +- formatParams.width = 320; +- formatParams.height = 240; +-#else +- formatParams.width = 640; +- formatParams.height = 480; +-#endif +- formatParams.time_base.num = 1; +- formatParams.time_base.den = 30; ++ av_dict_set(&options, "video_size", "320x240", 0); ++ ++ av_dict_set(&options, "framerate", "1/30", 0); + + std::string format = "video4linux2"; + iformat = av_find_input_format(format.c_str()); +@@ -92,7 +83,7 @@ + OSG_NOTICE<<"Failed to find input format: "<<format<<std::endl; + } + +- int error = av_open_input_file(&p_format_context, filename.c_str(), iformat, 0, &formatParams); ++ int error = avformat_open_input(&p_format_context, filename.c_str(), iformat, &options); + if (error != 0) + { + std::string error_str; +@@ -110,21 +101,21 @@ + default: error_str = "Unknown error"; break; + } + +- throw std::runtime_error("av_open_input_file() failed : " + error_str); ++ throw std::runtime_error("avformat_open_input() failed : " + error_str); + } + } + else + { + AVInputFormat* av_format = (parameters ? parameters->getFormat() : 0); +- AVFormatParameters* av_params = (parameters ? parameters->getFormatParameter() : 0); +- if (av_open_input_file(&p_format_context, filename.c_str(), av_format, 0, av_params) !=0 ) ++ AVDictionary* av_options = (parameters ? parameters->getOptions() : NULL); ++ if (avformat_open_input(&p_format_context, filename.c_str(), av_format, &av_options) !=0 ) + throw std::runtime_error("av_open_input_file() failed"); + } + + m_format_context.reset(p_format_context); + + // Retrieve stream info +- if (av_find_stream_info(p_format_context) < 0) ++ if (avformat_find_stream_info(p_format_context, NULL) < 0) + throw std::runtime_error("av_find_stream_info() failed"); + + m_duration = double(m_format_context->duration) / AV_TIME_BASE; +@@ -134,7 +125,7 @@ + m_clocks.reset(m_start); + + // Dump info to stderr +- dump_format(p_format_context, 0, filename.c_str(), false); ++ av_dump_format(p_format_context, 0, filename.c_str(), false); + + // Find and open the first video and audio streams (note that audio stream is optional and only opened if possible) + +@@ -292,7 +283,7 @@ + // Read the next frame packet + if (av_read_frame(m_format_context.get(), &packet) < 0) + { +- if (url_ferror(m_format_context->pb) == 0) ++ if (m_format_context->pb->eof_reached == 0) + end_of_stream = true; + else + throw std::runtime_error("av_read_frame() failed"); +Binary files src/osgPlugins/ffmpeg/.FFmpegDecoder.cpp.swp and src/osgPlugins/ffmpeg/.FFmpegDecoder.cpp.swp differ +diff -burN src/osgPlugins/ffmpeg/FFmpegDecoder.hpp src/osgPlugins/ffmpeg/FFmpegDecoder.hpp +--- src/osgPlugins/ffmpeg/FFmpegDecoder.hpp 2011-04-19 13:40:22.000000000 +0200 ++++ src/osgPlugins/ffmpeg/FFmpegDecoder.hpp 2012-11-22 15:59:18.895774005 +0100 +@@ -46,8 +46,8 @@ + { + if (_ptr) + { +- OSG_NOTICE<<"Calling av_close_input_file("<<_ptr<<")"<<std::endl; +- av_close_input_file(_ptr); ++ OSG_NOTICE<<"Calling avformat_close_input("<<_ptr<<")"<<std::endl; ++ avformat_close_input(&_ptr); + } + _ptr = 0; + } +@@ -151,8 +151,7 @@ + + inline double FFmpegDecoder::creation_time() const + { +- if(m_format_context) return m_format_context->timestamp; +- else return HUGE_VAL; ++ return HUGE_VAL; + } + + inline double FFmpegDecoder::duration() const +diff -burN src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp +--- src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp 2011-04-19 13:40:22.000000000 +0200 ++++ src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp 2012-11-22 16:01:30.906780849 +0100 +@@ -83,7 +83,7 @@ + m_context = stream->codec; + + // Trust the video size given at this point +- // (avcodec_open seems to sometimes return a 0x0 size) ++ // (avcodec_open2 seems to sometimes return a 0x0 size) + m_width = m_context->width; + m_height = m_context->height; + findAspectRatio(); +@@ -105,8 +105,8 @@ + // m_context->flags |= CODEC_FLAG_TRUNCATED; + + // Open codec +- if (avcodec_open(m_context, m_codec) < 0) +- throw std::runtime_error("avcodec_open() failed"); ++ if (avcodec_open2(m_context, m_codec, NULL) < 0) ++ throw std::runtime_error("avcodec_open2() failed"); + + // Allocate video frame + m_frame.reset(avcodec_alloc_frame()); +Binary files src/osgPlugins/ffmpeg/.FFmpegDecoderVideo.cpp.swp and src/osgPlugins/ffmpeg/.FFmpegDecoderVideo.cpp.swp differ +diff -burN src/osgPlugins/ffmpeg/FFmpegParameters.cpp src/osgPlugins/ffmpeg/FFmpegParameters.cpp +--- src/osgPlugins/ffmpeg/FFmpegParameters.cpp 2011-07-15 12:25:12.000000000 +0200 ++++ src/osgPlugins/ffmpeg/FFmpegParameters.cpp 2012-11-22 17:20:09.019025477 +0100 +@@ -8,7 +8,7 @@ + #if LIBAVCODEC_VERSION_MAJOR >= 53 + extern "C" + { +- #include <parseutils.h> ++ #include <libavutil/parseutils.h> + } + #define av_parse_video_frame_size av_parse_video_size + #define av_parse_video_frame_rate av_parse_video_rate +@@ -19,7 +19,7 @@ + + extern "C" + { +- #include <pixdesc.h> ++ #include <libavutil/pixdesc.h> + } + + inline PixelFormat osg_av_get_pix_fmt(const char *name) { return av_get_pix_fmt(name); } +@@ -34,14 +34,15 @@ + + + FFmpegParameters::FFmpegParameters() : +- m_format(0) +-{ +- memset(&m_parameters, 0, sizeof(m_parameters)); +-} ++ m_format(0), ++ m_options(NULL) ++{} + + + FFmpegParameters::~FFmpegParameters() +-{} ++{ ++ av_dict_free(&m_options); ++} + + + void FFmpegParameters::parse(const std::string& name, const std::string& value) +@@ -59,40 +60,19 @@ + } + else if (name == "pixel_format") + { +- m_parameters.pix_fmt = osg_av_get_pix_fmt(value.c_str()); ++ av_dict_set(&m_options, "pixel_format", value.c_str(), 0); + } + else if (name == "frame_size") + { +- int frame_width = 0, frame_height = 0; +- if (av_parse_video_frame_size(&frame_width, &frame_height, value.c_str()) < 0) +- { +- OSG_NOTICE<<"Failed to apply frame size: "<<value.c_str()<<std::endl; +- return; +- } +- if ((frame_width % 2) != 0 || (frame_height % 2) != 0) +- { +- OSG_NOTICE<<"Frame size must be a multiple of 2: "<<frame_width<<"x"<<frame_height<<std::endl; +- return; +- } +- m_parameters.width = frame_width; +- m_parameters.height = frame_height; ++ av_dict_set(&m_options, "video_size", value.c_str(), 0); + } + else if (name == "frame_rate") + { +- AVRational frame_rate; +- if (av_parse_video_frame_rate(&frame_rate, value.c_str()) < 0) +- { +- OSG_NOTICE<<"Failed to apply frame rate: "<<value.c_str()<<std::endl; +- return; +- } +- m_parameters.time_base.den = frame_rate.num; +- m_parameters.time_base.num = frame_rate.den; ++ av_dict_set(&m_options, "framerate", value.c_str(), 0); + } + else if (name == "audio_sample_rate") + { +- int audio_sample_rate = 44100; +- std::stringstream ss(value); ss >> audio_sample_rate; +- m_parameters.sample_rate = audio_sample_rate; ++ av_dict_set(&m_options, "sample_rate", value.c_str(), 0); + } + } + +diff -burN src/osgPlugins/ffmpeg/FFmpegParameters.hpp src/osgPlugins/ffmpeg/FFmpegParameters.hpp +--- src/osgPlugins/ffmpeg/FFmpegParameters.hpp 2011-04-19 13:40:22.000000000 +0200 ++++ src/osgPlugins/ffmpeg/FFmpegParameters.hpp 2012-11-22 15:23:27.490662455 +0100 +@@ -21,14 +21,14 @@ + bool isFormatAvailable() const { return m_format!=NULL; } + + AVInputFormat* getFormat() { return m_format; } +- AVFormatParameters* getFormatParameter() { return &m_parameters; } ++ AVDictionary* getOptions() { return m_options; } + + void parse(const std::string& name, const std::string& value); + + protected: + + AVInputFormat* m_format; +- AVFormatParameters m_parameters; ++ AVDictionary* m_options; + }; + + Added: head/graphics/osg/files/patch-src-osgPlugins-ffmpeg-FFmpegDecoderAudio.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/graphics/osg/files/patch-src-osgPlugins-ffmpeg-FFmpegDecoderAudio.cpp Mon Oct 28 15:26:53 2013 (r331864) @@ -0,0 +1,11 @@ +--- src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp.orig 2013-10-28 13:22:11.997950234 -0200 ++++ src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp 2013-10-28 13:22:39.838945189 -0200 +@@ -9,6 +9,8 @@ + //#include <iostream> + + ++#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio ++ + + namespace osgFFmpeg { +
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310281526.r9SFQrd7009612>