[FFmpeg-devel] [PATCH] pthread_frame: minor simplification to error handling
wm4
nfxjfg at googlemail.com
Wed Mar 29 13:19:41 EEST 2017
On Mon, 27 Mar 2017 14:28:17 +0200
wm4 <nfxjfg at googlemail.com> wrote:
> Get rid of the "ret" variable, and always use err. Report the packet as
> consumed if err is unset. This should be equivalent to the old code,
> which obviously required err=0 for p->result>=0 (and otherwise,
> p->result must have had the value err was last set to). The code block
> added by commit 32a5b631267 is also not needed anymore, because the new
> code strictly returns err if it's >=0.
> ---
> Not totally sure about this, but it seems to work out? I probably missed
> something obvious.
> ---
> libavcodec/pthread_frame.c | 19 +++++--------------
> 1 file changed, 5 insertions(+), 14 deletions(-)
>
> diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c
> index b618be0bf5..36e4a8affa 100644
> --- a/libavcodec/pthread_frame.c
> +++ b/libavcodec/pthread_frame.c
> @@ -468,7 +468,7 @@ int ff_thread_decode_frame(AVCodecContext *avctx,
> FrameThreadContext *fctx = avctx->internal->thread_ctx;
> int finished = fctx->next_finished;
> PerThreadContext *p;
> - int err, ret = 0;
> + int err;
>
> /* release the async lock, permitting blocked hwaccel threads to
> * go forward while we are in this function */
> @@ -496,7 +496,7 @@ int ff_thread_decode_frame(AVCodecContext *avctx,
> if (fctx->delaying) {
> *got_picture_ptr=0;
> if (avpkt->size) {
> - ret = avpkt->size;
> + err = avpkt->size;
> goto finish;
> }
> }
> @@ -542,21 +542,12 @@ int ff_thread_decode_frame(AVCodecContext *avctx,
>
> fctx->next_finished = finished;
>
> - /*
> - * When no frame was found while flushing, but an error occurred in
> - * any thread, return it instead of 0.
> - * Otherwise the error can get lost.
> - */
> - if (!avpkt->size && !*got_picture_ptr)
> - goto finish;
> -
> /* return the size of the consumed packet if no error occurred */
> - ret = (p->result >= 0) ? avpkt->size : p->result;
> + if (err >= 0)
> + err = avpkt->size;
> finish:
> async_lock(fctx);
> - if (err < 0)
> - return err;
> - return ret;
> + return err;
> }
>
> void ff_thread_report_progress(ThreadFrame *f, int n, int field)
Received a review by BBB on IRC yesterday. Pushed.
More information about the ffmpeg-devel
mailing list