summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'contrib')
-rw-r--r--contrib/ffmpeg/A06-frame-threading-state.patch167
1 files changed, 110 insertions, 57 deletions
diff --git a/contrib/ffmpeg/A06-frame-threading-state.patch b/contrib/ffmpeg/A06-frame-threading-state.patch
index e44819a49..9efe1f68f 100644
--- a/contrib/ffmpeg/A06-frame-threading-state.patch
+++ b/contrib/ffmpeg/A06-frame-threading-state.patch
@@ -1,57 +1,110 @@
-diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c
-index a658f3e..c3846bb 100644
---- a/libavcodec/pthread_frame.c
-+++ b/libavcodec/pthread_frame.c
-@@ -298,6 +298,7 @@ static int submit_packet(PerThreadContext *p, AVPacket *avpkt)
- FrameThreadContext *fctx = p->parent;
- PerThreadContext *prev_thread = fctx->prev_thread;
- const AVCodec *codec = p->avctx->codec;
-+ int err = 0;
-
- if (!avpkt->size && !(codec->capabilities & CODEC_CAP_DELAY)) return 0;
-
-@@ -306,7 +307,6 @@ static int submit_packet(PerThreadContext *p, AVPacket *avpkt)
- release_delayed_buffers(p);
-
- if (prev_thread) {
-- int err;
- if (prev_thread->state == STATE_SETTING_UP) {
- pthread_mutex_lock(&prev_thread->progress_mutex);
- while (prev_thread->state == STATE_SETTING_UP)
-@@ -315,10 +315,6 @@ static int submit_packet(PerThreadContext *p, AVPacket *avpkt)
- }
-
- err = update_context_from_thread(p->avctx, prev_thread->avctx, 0);
-- if (err) {
-- pthread_mutex_unlock(&p->mutex);
-- return err;
-- }
- }
-
- av_packet_unref(&p->avpkt);
-@@ -358,7 +354,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
- fctx->prev_thread = p;
- fctx->next_decoding++;
-
-- return 0;
-+ return err;
- }
-
- int ff_thread_decode_frame(AVCodecContext *avctx,
-@@ -374,6 +370,7 @@ int ff_thread_decode_frame(AVCodecContext *avctx,
- * Submit a packet to the next decoding thread.
- */
-
-+ if (fctx->next_decoding >= avctx->thread_count) fctx->next_decoding = 0;
- p = &fctx->threads[fctx->next_decoding];
- err = update_context_from_user(p->avctx, avctx);
- if (err) return err;
-@@ -426,8 +423,6 @@ int ff_thread_decode_frame(AVCodecContext *avctx,
-
- update_context_from_thread(avctx, p->avctx, 1);
-
-- if (fctx->next_decoding >= avctx->thread_count) fctx->next_decoding = 0;
--
- fctx->next_finished = finished;
-
- /* return the size of the consumed packet if no error occurred */
+Received: from oboro.libav.org (77.109.144.72) by cas.jetheaddev.com
+ (192.168.13.27) with Microsoft SMTP Server id 14.3.195.1; Fri, 22 Aug 2014
+ 04:13:09 -0700
+Received: from oboro.libav.org (localhost [127.0.0.1]) by oboro.libav.org
+ (Postfix) with ESMTP id 54F155DBA3; Fri, 22 Aug 2014 13:13:06 +0200 (CEST)
+X-Original-To: [email protected]
+Delivered-To: [email protected]
+Received: from localhost (localhost [127.0.0.1]) by oboro.libav.org (Postfix)
+ with ESMTP id A5E705DBA3 for <[email protected]>; Fri, 22 Aug 2014
+ 13:13:04 +0200 (CEST)
+Received: from oboro.libav.org ([127.0.0.1]) by localhost (oboro.libav.org
+ [127.0.0.1]) (amavisd-new, port 10024) with LMTP id q_DABqtOoALY for
+ <[email protected]>; Fri, 22 Aug 2014 13:13:04 +0200 (CEST)
+Received: from aruru.libav.org (aruru.libav.org [77.109.144.70]) by
+ oboro.libav.org (Postfix) with ESMTP id 8C8AA5DB88 for
+ <[email protected]>; Fri, 22 Aug 2014 13:13:04 +0200 (CEST)
+Received: by aruru.libav.org (Postfix, from userid 106) id 8436F5DD71; Fri, 22
+ Aug 2014 13:13:04 +0200 (CEST)
+From: "Janne Grunau " <[email protected]>
+Message-ID: <[email protected]>
+Date: Fri, 22 Aug 2014 13:13:04 +0200
+Subject: [libav-commits] rv34: use ff_mpeg_update_thread_context only when
+ decoder is fully initialized
+X-BeenThere: [email protected]
+X-Mailman-Version: 2.1.15
+Precedence: list
+Reply-To: <[email protected]>
+List-Id: libav commit notifications <libav-commits.libav.org>
+List-Unsubscribe: <https://lists.libav.org/mailman/options/libav-commits>,
+ <mailto:[email protected]?subject=unsubscribe>
+List-Archive: <http://lists.libav.org/pipermail/libav-commits/>
+List-Post: <mailto:[email protected]>
+List-Help: <mailto:[email protected]?subject=help>
+List-Subscribe: <https://lists.libav.org/mailman/listinfo/libav-commits>,
+ <mailto:[email protected]?subject=subscribe>
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+Errors-To: [email protected]
+Sender: libav-commits <[email protected]>
+Return-Path: [email protected]
+X-MS-Exchange-Organization-AuthSource: cas.jetheaddev.com
+X-MS-Exchange-Organization-AuthAs: Anonymous
+X-MS-Exchange-Organization-PRD: libav.org
+X-MS-Exchange-Organization-SenderIdResult: None
+Received-SPF: None (cas.jetheaddev.com: [email protected] does
+ not designate permitted sender hosts)
+X-MS-Exchange-Organization-SCL: 0
+X-MS-Exchange-Organization-PCL: 2
+X-MS-Exchange-Organization-Antispam-Report: DV:3.3.14004.476;SID:SenderIDStatus None;OrigIP:77.109.144.72
+MIME-Version: 1.0
+
+Module: libav
+Branch: master
+Commit: dc4b2e7d33903a6b9380e8a84b22b3a20facbb08
+
+Author: Janne Grunau <[email protected]>
+Committer: Janne Grunau <[email protected]>
+Date: Thu Aug 21 13:26:33 2014 +0200
+
+rv34: use ff_mpeg_update_thread_context only when decoder is fully initialized
+
+MpegEncContext based decoders are only fully initialized after the first
+ff_thread_get_buffer() call. The RV30/40 decoders may fail before a frame
+buffer was requested. ff_mpeg_update_thread_context() fails on half
+initialized MpegEncContexts. Since this can only happen before a the
+first frame was decoded there is no need to call
+ff_mpeg_update_thread_context().
+
+Based on patches by John Stebbins and tested by John Stebbins.
+
+
+---
+
+ libavcodec/rv34.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/libavcodec/rv34.c b/libavcodec/rv34.c
+index 4ed2a33..26ab7e4 100644
+--- a/libavcodec/rv34.c
++++ b/libavcodec/rv34.c
+@@ -1555,16 +1555,18 @@ int ff_rv34_decode_update_thread_context(AVCodecContext *dst, const AVCodecConte
+ return err;
+ }
+
+- if ((err = ff_mpeg_update_thread_context(dst, src)))
+- return err;
+-
+ r->cur_pts = r1->cur_pts;
+ r->last_pts = r1->last_pts;
+ r->next_pts = r1->next_pts;
+
+ memset(&r->si, 0, sizeof(r->si));
+
+- return 0;
++ // Do no call ff_mpeg_update_thread_context on a partially initialized
++ // decoder context.
++ if (!s1->linesize)
++ return 0;
++
++ return ff_mpeg_update_thread_context(dst, src);
+ }
+
+ static int get_slice_offset(AVCodecContext *avctx, const uint8_t *buf, int n)
+
+_______________________________________________
+libav-commits mailing list
+https://lists.libav.org/mailman/listinfo/libav-commits