From 5f0bf68a1fff294f7cbff02750d13e007efc47be Mon Sep 17 00:00:00 2001 From: jstebbins Date: Fri, 22 Aug 2014 15:53:14 +0000 Subject: 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 --- contrib/ffmpeg/A06-frame-threading-state.patch | 167 ++++++++++++++++--------- 1 file changed, 110 insertions(+), 57 deletions(-) (limited to 'contrib/ffmpeg') 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: libav-commits@libav.org +Delivered-To: libav-commits@libav.org +Received: from localhost (localhost [127.0.0.1]) by oboro.libav.org (Postfix) + with ESMTP id A5E705DBA3 for ; 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 + ; 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 + ; 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: +From: "Janne Grunau " +Message-ID: <20140822111304.8436F5DD71@aruru.libav.org> +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: libav-commits@libav.org +X-Mailman-Version: 2.1.15 +Precedence: list +Reply-To: +List-Id: libav commit notifications +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +Errors-To: libav-commits-bounces@libav.org +Sender: libav-commits +Return-Path: libav-commits-bounces@libav.org +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: libav-commits-bounces@libav.org 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 +Committer: Janne Grunau +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: libav-stable@libav.org + +--- + + 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 +libav-commits@libav.org +https://lists.libav.org/mailman/listinfo/libav-commits -- cgit v1.2.3