diff options
author | jstebbins <[email protected]> | 2014-08-22 15:53:14 +0000 |
---|---|---|
committer | jstebbins <[email protected]> | 2014-08-22 15:53:14 +0000 |
commit | 5f0bf68a1fff294f7cbff02750d13e007efc47be (patch) | |
tree | 6a4dafdca764ca1c4407fa109850e258310f4687 | |
parent | 8d24981ac8652d4ffe1a66df61b1016b89a462dd (diff) |
libav: update fraem threading state patch
Use version written by Janne and committed to libav
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@6344 b64f7644-9d1e-0410-96f1-a4d463321fa5
-rw-r--r-- | contrib/ffmpeg/A06-frame-threading-state.patch | 167 |
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)
+To: <[email protected]>
+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.
+
+CC: [email protected]
+
+---
+
+ 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
|