openbsd-ports/www/gnash/patches/patch-libmedia_ffmpeg_MediaParserFfmpeg_cpp
brad 27e72840b6 Switch back to the FFmpeg media backend and add some patches from
upstream to allow building with newer FFmpeg API.

ok sthen@
2013-03-08 00:58:26 +00:00

123 lines
3.7 KiB
Plaintext

$OpenBSD: patch-libmedia_ffmpeg_MediaParserFfmpeg_cpp,v 1.1 2013/03/08 00:58:26 brad Exp $
Update for newer FFmpeg API.
--- libmedia/ffmpeg/MediaParserFfmpeg.cpp.orig Thu Jan 19 14:17:48 2012
+++ libmedia/ffmpeg/MediaParserFfmpeg.cpp Mon Feb 18 12:06:22 2013
@@ -344,8 +344,10 @@ MediaParserFfmpeg::initializeParser()
{
av_register_all(); // TODO: needs to be invoked only once ?
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52,107,0)
_byteIOCxt.buffer = NULL;
-
+#endif
+
_inputFmt = probeStream();
#ifdef GNASH_ALLOW_VCODEC_ENV
@@ -366,7 +368,11 @@ MediaParserFfmpeg::initializeParser()
// which isn't needed.
_byteIOBuffer.reset(new unsigned char[byteIOBufferSize]);
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52,107,0)
init_put_byte(&_byteIOCxt,
+#else
+ _avIOCxt = avio_alloc_context(
+#endif
_byteIOBuffer.get(), // buffer
byteIOBufferSize, // buffer size
0, // write flags
@@ -376,7 +382,11 @@ MediaParserFfmpeg::initializeParser()
MediaParserFfmpeg::seekMediaWrapper // seeker callback
);
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52,107,0)
_byteIOCxt.is_streamed = 1;
+#else
+ _avIOCxt->seekable = 0;
+#endif
#if !defined(LIBAVCODEC_VERSION_MAJOR) || LIBAVCODEC_VERSION_MAJOR < 52
// Needed for Lenny.
@@ -387,12 +397,19 @@ MediaParserFfmpeg::initializeParser()
assert(_formatCtx);
+#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52,107,0)
// Otherwise av_open_input_stream will reallocate the context.
AVFormatParameters ap;
std::memset(&ap, 0, sizeof ap);
ap.prealloced_context = 1;
if (av_open_input_stream(&_formatCtx, &_byteIOCxt, "", _inputFmt, &ap) < 0)
+#else
+
+ _formatCtx->pb = _avIOCxt;
+
+ if (avformat_open_input(&_formatCtx, "", _inputFmt, NULL) < 0)
+#endif
{
throw IOException("MediaParserFfmpeg couldn't open input stream");
}
@@ -400,10 +417,17 @@ MediaParserFfmpeg::initializeParser()
#if defined(LIBAVCODEC_VERSION_MAJOR) && LIBAVCODEC_VERSION_MAJOR >= 52
// Note: in at least some versions of ffmpeg, av_open_input_stream does
// not parse metadata; not sure why.
+#if LIBAVUTIL_VERSION_INT < AV_VERSION_INT(51,5,0)
AVMetadata* md = _formatCtx->metadata;
if (md) {
AVMetadataTag* tag = av_metadata_get(md, "album", 0,
AV_METADATA_MATCH_CASE);
+#else
+ AVDictionary* md = _formatCtx->metadata;
+ if (md) {
+ AVDictionaryEntry* tag = av_dict_get(md, "album", 0,
+ AV_DICT_MATCH_CASE);
+#endif
if (tag && tag->value) {
setId3Info(&Id3Info::album, std::string(tag->value),
_id3Object);
@@ -620,30 +644,34 @@ MediaParserFfmpeg::seekMedia(boost::int64_t offset, in
}
boost::uint16_t
-MediaParserFfmpeg::SampleFormatToSampleSize(SampleFormat fmt)
+MediaParserFfmpeg::SampleFormatToSampleSize(AVSampleFormat fmt)
{
+#if LIBAVUTIL_VERSION_INT > AV_VERSION_INT(51,4,0)
+ return av_get_bytes_per_sample(fmt);
+#else
switch (fmt)
{
- case SAMPLE_FMT_U8: // unsigned 8 bits
+ case AV_SAMPLE_FMT_U8: // unsigned 8 bits
return 1;
- case SAMPLE_FMT_S16: // signed 16 bits
- case SAMPLE_FMT_FLT: // float
+ case AV_SAMPLE_FMT_S16: // signed 16 bits
+ case AV_SAMPLE_FMT_FLT: // float
return 2;
#if !defined (LIBAVCODEC_VERSION_MAJOR) || LIBAVCODEC_VERSION_MAJOR < 52
// Was dropped for version 52.0.0
- case SAMPLE_FMT_S24: // signed 24 bits
+ case AV_SAMPLE_FMT_S24: // signed 24 bits
return 3;
#endif
- case SAMPLE_FMT_S32: // signed 32 bits
+ case AV_SAMPLE_FMT_S32: // signed 32 bits
return 4;
- case SAMPLE_FMT_NONE:
+ case AV_SAMPLE_FMT_NONE:
default:
return 8; // arbitrary value
}
+#endif
}