https://github.com/HandBrake/HandBrake/commit/3b9c9a263f7ffa959d56d914c62df18c9567c0db.patch From 3b9c9a263f7ffa959d56d914c62df18c9567c0db Mon Sep 17 00:00:00 2001 From: John Stebbins Date: Tue, 27 Dec 2016 08:56:25 -0800 Subject: [PATCH] encavcodec: fix crash during 2 pass encode This affect mpeg4, mpeg2, vp8 and vp9 encoding --- libhb/encavcodec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libhb/encavcodec.c b/libhb/encavcodec.c index d7a751e..0543fe4 100644 --- a/libhb/encavcodec.c +++ b/libhb/encavcodec.c @@ -352,10 +352,10 @@ int encavcodecInit( hb_work_object_t * w, hb_job_t * job ) } if (job->pass_id == HB_PASS_ENCODE_1ST && - pv->context->stats_out != NULL) + context->stats_out != NULL) { // Some encoders may write stats during init in avcodec_open - fprintf(pv->file, "%s", pv->context->stats_out); + fprintf(pv->file, "%s", context->stats_out); } // avcodec_open populates the opts dictionary with the https://github.com/HandBrake/HandBrake/commit/d64dba737d0136b58545be33c50db093df1880c1.patch From d64dba737d0136b58545be33c50db093df1880c1 Mon Sep 17 00:00:00 2001 From: John Stebbins Date: Tue, 27 Dec 2016 08:57:06 -0800 Subject: [PATCH] encavcodec: fix 2 pass vp8 and vp9 encoding libvpx only supplies the stats upon the final flush of the encoder. So we must also write stats after final flush. --- libhb/encavcodec.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libhb/encavcodec.c b/libhb/encavcodec.c index 0543fe4..591aa4f 100644 --- a/libhb/encavcodec.c +++ b/libhb/encavcodec.c @@ -610,6 +610,15 @@ static void Flush( hb_work_object_t * w, hb_buffer_list_t * list ) hb_work_private_t * pv = w->private_data; avcodec_send_frame(pv->context, NULL); + + // Write stats + // vpx only writes stats at final flush + if (pv->job->pass_id == HB_PASS_ENCODE_1ST && + pv->context->stats_out != NULL) + { + fprintf( pv->file, "%s", pv->context->stats_out ); + } + get_packets(w, list); }