summaryrefslogtreecommitdiffstats
path: root/libhb
diff options
context:
space:
mode:
authorJohn Stebbins <[email protected]>2017-01-24 11:01:48 -0700
committerJohn Stebbins <[email protected]>2017-01-24 11:04:17 -0700
commitca1dcccd09b5dfac93829d46fd6c7c9711898b77 (patch)
tree4bfb5241c903228e55daf0e3ba33de2a83e56a67 /libhb
parent4425691a0fd57b30360d39df3bdeebb9cc9b577f (diff)
decavcodec: fix avcodec_open failure upon bad extradata
If extradata is improperly parsed, avcodec_open may fail. Keep trying avcodec_open as long as there is more data to parse. Fixes https://github.com/HandBrake/HandBrake/issues/542
Diffstat (limited to 'libhb')
-rw-r--r--libhb/decavcodec.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/libhb/decavcodec.c b/libhb/decavcodec.c
index c8b12d770..953fa2582 100644
--- a/libhb/decavcodec.c
+++ b/libhb/decavcodec.c
@@ -1665,8 +1665,12 @@ static int decavcodecvWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
{
av_dict_free( &av_opts );
hb_log( "decavcodecvWork: avcodec_open failed" );
- *buf_out = hb_buffer_eof_init();
- return HB_WORK_DONE;
+ // avcodec_open can fail due to incorrectly parsed extradata
+ // so try again when this fails
+ av_freep( &pv->context->extradata );
+ pv->context->extradata_size = 0;
+ hb_buffer_close( &in );
+ return HB_WORK_OK;
}
av_dict_free( &av_opts );
pv->video_codec_opened = 1;