diff options
Diffstat (limited to 'fix_ffmpeg30.patch')
-rw-r--r-- | fix_ffmpeg30.patch | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/fix_ffmpeg30.patch b/fix_ffmpeg30.patch new file mode 100644 index 000000000000..0d8367df57cc --- /dev/null +++ b/fix_ffmpeg30.patch @@ -0,0 +1,68 @@ +diff -ruN bombono-dvd-1.2.2.orig/src/mgui/ffviewer.cpp bombono-dvd-1.2.2/src/mgui/ffviewer.cpp +--- bombono-dvd-1.2.2.orig/src/mgui/ffviewer.cpp 2016-03-12 08:58:15.027051299 +0330 ++++ bombono-dvd-1.2.2/src/mgui/ffviewer.cpp 2016-03-12 10:47:50.869987067 +0330 +@@ -36,6 +36,10 @@ + #define AVFORMAT_54 + #endif + ++C_LINKAGE_BEGIN ++#include <libavutil/imgutils.h> ++C_LINKAGE_END ++ + // разрабы libav считают себя самыми умными и потому решили + // закрыть простым смертным доступ к ffurl_register_protocol() + // (бывшая av_register_protocol2()),- https://bugzilla.libav.org/show_bug.cgi?id=224 +@@ -639,7 +643,9 @@ + // лучшая оптимизация выбирается на этапе выполнения, а не сборке; однако для 0.6 времени + // maverick оно еще не доделано, см. http://ffmpeg.arrozcru.org/forum/viewtopic.php?f=1&t=1185 + // :KLUDGE: потому добавляем явно +- sws_flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2; ++ ++ // CPU_CAPS are now auto-detected ++ //sws_flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2; + + // :TRICKY: почему-то ffmpeg'у "нравится" BGR24 и не нравиться RGB24 в плане использования + // MMX (ускорения); цена по времени неизвестна,- используем только ради того, чтобы не было +@@ -647,15 +653,16 @@ + // Другой вариант - PIX_FMT_RGB32, но там зависимый порядок байтов (в GdkPixbuf - нет) и + // мы нацелены на RGB24 + // :TODO: с версии LIBSWSCALE_VERSION_INT >= 0.8.11 появился прямой yuv -> rgb24, поправить +- PixelFormat dst_pf = PIX_FMT_BGR24; // PIX_FMT_RGB24; ++ AVPixelFormat dst_pf = AV_PIX_FMT_BGR24; // PIX_FMT_RGB24; + rgbCnvCtx = sws_getContext(sz.x, sz.y, GetVideoCtx(*this)->pix_fmt, sz.x, sz.y, + dst_pf, sws_flags, 0, 0, 0); + ASSERT( rgbCnvCtx ); + + Point dst_sz(sz); +- rgbBuf = (uint8_t*)av_malloc(avpicture_get_size(dst_pf, dst_sz.x, dst_sz.y) * sizeof(uint8_t)); +- avcodec_get_frame_defaults(&rgbFrame); // не помешает +- avpicture_fill((AVPicture*)&rgbFrame, rgbBuf, dst_pf, dst_sz.x, dst_sz.y); ++ rgbBuf = (uint8_t*)av_malloc (av_image_get_buffer_size (dst_pf, dst_sz.x, dst_sz.y, 1)); ++ av_frame_unref (&rgbFrame); ++ av_image_fill_arrays (rgbFrame.data, rgbFrame.linesize, ++ rgbBuf, dst_pf, dst_sz.x, dst_sz.y, 1); + } + else + // защита от неполных открытий +@@ -765,7 +772,7 @@ + #ifdef AVFRAME_INIT_CHANGE + // avcodec_get_frame_defaults() перенесли в avcodec_decode_video2() + #else +- avcodec_get_frame_defaults(&picture); // ffmpeg.c очищает каждый раз ++ av_frame_unref (&picture); + #endif + + #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52,25,00) +@@ -841,7 +848,11 @@ + + DoVideoDecode(ffv, got_picture, &pkt); + } +- av_free_packet(&pkt); ++ if (pkt.buf) ++ av_buffer_unref (&pkt.buf); ++ pkt.data = nullptr; ++ pkt.size = 0; ++ av_packet_free_side_data (&pkt); + } + else if( av_res == (int)AVERROR_EOF ) // для mpegts также -EIO приходит + { |