[dolphin-emu] 23/33: Refresh libav patch
James Cowgill
jcowgill-guest at moszumanska.debian.org
Sun Jan 11 22:39:42 UTC 2015
This is an automated email from the git hooks/post-receive script.
jcowgill-guest pushed a commit to branch master
in repository dolphin-emu.
commit 2f12221725dfc9fafa3fc377a744a7e226e14b91
Author: James Cowgill <james410 at cowgill.org.uk>
Date: Tue Nov 11 15:17:23 2014 +0000
Refresh libav patch
---
debian/patches/02_fixes-for-libav-10.patch | 220 ++++++-----------------------
1 file changed, 46 insertions(+), 174 deletions(-)
diff --git a/debian/patches/02_fixes-for-libav-10.patch b/debian/patches/02_fixes-for-libav-10.patch
index e2c50c2..b9742a8 100644
--- a/debian/patches/02_fixes-for-libav-10.patch
+++ b/debian/patches/02_fixes-for-libav-10.patch
@@ -1,181 +1,53 @@
-From c2c46d75738624b7afa4a522db8d2b029a95acb5 Mon Sep 17 00:00:00 2001
-From: Tillmann Karras <tilkax at gmail.com>
-Date: Sun, 15 Jun 2014 05:16:58 +0200
-Subject: [PATCH] AVIDump: update ffmpeg/libav API usage
+Description: Copy avcodec_encode_video from libav so it compiles
+ with newer versions.
+Author: Brandon Barnes <winterknight at nerdshack.com>
+Forwarded: not-needed
-libav 10 was released on May 10th, 2014 and it drops support for some
-long-deprecated stuff like avcodec_encode_video().
----
- Source/Core/VideoCommon/AVIDump.cpp | 93 +++++++++++++++++++------------------
- 1 file changed, 49 insertions(+), 44 deletions(-)
-
-diff --git a/Source/Core/VideoCommon/AVIDump.cpp b/Source/Core/VideoCommon/AVIDump.cpp
-index b53340f..a287056 100644
---- a/Source/Core/VideoCommon/AVIDump.cpp
-+++ b/Source/Core/VideoCommon/AVIDump.cpp
-@@ -220,7 +220,7 @@ static AVStream* s_stream = nullptr;
- static AVFrame* s_bgr_frame = nullptr;
- static AVFrame* s_yuv_frame = nullptr;
- static uint8_t* s_yuv_buffer = nullptr;
--static uint8_t* s_out_buffer = nullptr;
-+static SwsContext* s_sws_context = nullptr;
- static int s_width;
- static int s_height;
- static int s_size;
-@@ -262,14 +262,15 @@ bool AVIDump::CreateFile()
- return false;
- }
-
-- s_stream->codec->codec_id = g_Config.bUseFFV1 ? CODEC_ID_FFV1 : s_format_context->oformat->video_codec;
-+ s_stream->codec->codec_id = g_Config.bUseFFV1 ? AV_CODEC_ID_FFV1
-+ : s_format_context->oformat->video_codec;
- s_stream->codec->codec_type = AVMEDIA_TYPE_VIDEO;
- s_stream->codec->bit_rate = 400000;
- s_stream->codec->width = s_width;
- s_stream->codec->height = s_height;
- s_stream->codec->time_base = (AVRational){1, static_cast<int>(VideoInterface::TargetRefreshRate)};
- s_stream->codec->gop_size = 12;
-- s_stream->codec->pix_fmt = g_Config.bUseFFV1 ? PIX_FMT_BGRA : PIX_FMT_YUV420P;
-+ s_stream->codec->pix_fmt = g_Config.bUseFFV1 ? AV_PIX_FMT_BGRA : AV_PIX_FMT_YUV420P;
-
- if (!(codec = avcodec_find_encoder(s_stream->codec->codec_id)) ||
- (avcodec_open2(s_stream->codec, codec, nullptr) < 0))
-@@ -277,16 +278,14 @@ bool AVIDump::CreateFile()
- return false;
- }
-
-- s_bgr_frame = avcodec_alloc_frame();
-- s_yuv_frame = avcodec_alloc_frame();
-+ s_bgr_frame = av_frame_alloc();
-+ s_yuv_frame = av_frame_alloc();
-
- s_size = avpicture_get_size(s_stream->codec->pix_fmt, s_width, s_height);
-
- s_yuv_buffer = new uint8_t[s_size];
- avpicture_fill((AVPicture*)s_yuv_frame, s_yuv_buffer, s_stream->codec->pix_fmt, s_width, s_height);
-
-- s_out_buffer = new uint8_t[s_size];
--
- NOTICE_LOG(VIDEO, "Opening file %s for dumping", s_format_context->filename);
- if (avio_open(&s_format_context->pb, s_format_context->filename, AVIO_FLAG_WRITE) < 0)
- {
-@@ -299,45 +298,52 @@ bool AVIDump::CreateFile()
- return true;
+--- a/Source/Core/VideoCommon/Src/AVIDump.cpp
++++ b/Source/Core/VideoCommon/Src/AVIDump.cpp
+@@ -243,6 +243,45 @@ bool AVIDump::Start(int w, int h)
+ return CreateFile();
}
-+static void PreparePacket(AVPacket* pkt)
++#if (LIBAVCODEC_VERSION_MAJOR >= 55)
++
++#define CODEC_ID_FFV1 AV_CODEC_ID_FFV1
++
++// Shamelessly copied from libav-9.13 utils.c
++int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
++ const AVFrame *pict)
+{
-+ av_init_packet(pkt);
-+ pkt->data = nullptr;
-+ pkt->size = 0;
-+ if (s_stream->codec->coded_frame->pts != AV_NOPTS_VALUE)
-+ {
-+ pkt->pts = av_rescale_q(s_stream->codec->coded_frame->pts,
-+ s_stream->codec->time_base, s_stream->time_base);
-+ }
-+ if (s_stream->codec->coded_frame->key_frame)
-+ pkt->flags |= AV_PKT_FLAG_KEY;
-+ pkt->stream_index = s_stream->index;
++ AVPacket pkt;
++ int ret, got_packet = 0;
++
++ if (buf_size < FF_MIN_BUFFER_SIZE) {
++ av_log(avctx, AV_LOG_ERROR, "buffer smaller than minimum size\n");
++ return -1;
++ }
++
++ av_init_packet(&pkt);
++ pkt.data = buf;
++ pkt.size = buf_size;
++
++ ret = avcodec_encode_video2(avctx, &pkt, pict, &got_packet);
++ if (!ret && got_packet && avctx->coded_frame) {
++ avctx->coded_frame->pts = pkt.pts;
++ avctx->coded_frame->key_frame = !!(pkt.flags & AV_PKT_FLAG_KEY);
++ }
++
++ /* free any side data since we cannot return it */
++ if (pkt.side_data_elems > 0) {
++ int i;
++ for (i = 0; i < pkt.side_data_elems; i++)
++ av_free(pkt.side_data[i].data);
++ av_freep(&pkt.side_data);
++ pkt.side_data_elems = 0;
++ }
++
++ return ret ? ret : pkt.size;
+}
++#endif
+
- void AVIDump::AddFrame(const u8* data, int width, int height)
+ bool AVIDump::CreateFile()
{
-- avpicture_fill((AVPicture*)s_bgr_frame, const_cast<u8*>(data), PIX_FMT_BGR24, width, height);
-+ avpicture_fill((AVPicture*)s_bgr_frame, const_cast<u8*>(data), AV_PIX_FMT_BGR24, width, height);
-
- // Convert image from BGR24 to desired pixel format, and scale to initial
- // width and height
-- struct SwsContext* s_sws_context;
-- if ((s_sws_context = sws_getContext(width, height, PIX_FMT_BGR24, s_width, s_height,
-- s_stream->codec->pix_fmt, SWS_BICUBIC, nullptr, nullptr, nullptr)))
-+ if ((s_sws_context = sws_getCachedContext(s_sws_context,
-+ width, height, AV_PIX_FMT_BGR24,
-+ s_width, s_height, s_stream->codec->pix_fmt,
-+ SWS_BICUBIC, nullptr, nullptr, nullptr)))
- {
- sws_scale(s_sws_context, s_bgr_frame->data, s_bgr_frame->linesize, 0,
- height, s_yuv_frame->data, s_yuv_frame->linesize);
-- sws_freeContext(s_sws_context);
- }
-
-- // Encode and write the image
-- int outsize = avcodec_encode_video(s_stream->codec, s_out_buffer, s_size, s_yuv_frame);
-- while (outsize > 0)
-+ // Encode and write the image.
-+ AVPacket pkt;
-+ PreparePacket(&pkt);
-+ int got_packet;
-+ int error = avcodec_encode_video2(s_stream->codec, &pkt, s_yuv_frame, &got_packet);
-+ while (!error && got_packet)
- {
-- AVPacket pkt;
-- av_init_packet(&pkt);
--
-- if (s_stream->codec->coded_frame->pts != (unsigned int)AV_NOPTS_VALUE)
-- {
-- pkt.pts = av_rescale_q(s_stream->codec->coded_frame->pts,
-- s_stream->codec->time_base, s_stream->time_base);
-- }
-- if (s_stream->codec->coded_frame->key_frame)
-- pkt.flags |= AV_PKT_FLAG_KEY;
-- pkt.stream_index = s_stream->index;
-- pkt.data = s_out_buffer;
-- pkt.size = outsize;
--
-- // Write the compressed frame in the media file
-+ // Write the compressed frame in the media file.
- av_interleaved_write_frame(s_format_context, &pkt);
-
-- // Encode delayed frames
-- outsize = avcodec_encode_video(s_stream->codec, s_out_buffer, s_size, nullptr);
-+ // Handle delayed frames.
-+ PreparePacket(&pkt);
-+ error = avcodec_encode_video2(s_stream->codec, &pkt, nullptr, &got_packet);
- }
-+ if (error)
-+ ERROR_LOG(VIDEO, "Error while encoding video: %d", error);
- }
-
- void AVIDump::Stop()
-@@ -358,20 +364,13 @@ void AVIDump::CloseFile()
- }
-
- if (s_yuv_buffer)
-+ {
- delete[] s_yuv_buffer;
-- s_yuv_buffer = nullptr;
--
-- if (s_out_buffer)
-- delete[] s_out_buffer;
-- s_out_buffer = nullptr;
--
-- if (s_bgr_frame)
-- av_free(s_bgr_frame);
-- s_bgr_frame = nullptr;
-+ s_yuv_buffer = nullptr;
-+ }
-
-- if (s_yuv_frame)
-- av_free(s_yuv_frame);
-- s_yuv_frame = nullptr;
-+ av_frame_free(&s_bgr_frame);
-+ av_frame_free(&s_yuv_frame);
-
- if (s_format_context)
- {
-@@ -380,6 +379,12 @@ void AVIDump::CloseFile()
- av_free(s_format_context);
- s_format_context = nullptr;
- }
-+
-+ if (s_sws_context)
-+ {
-+ sws_freeContext(s_sws_context);
-+ s_sws_context = nullptr;
-+ }
- }
-
- #endif
---
-2.1.3
-
+ AVCodec *codec = NULL;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/dolphin-emu.git
More information about the Pkg-games-commits
mailing list