diff options
author | jstebbins <[email protected]> | 2010-10-29 16:17:48 +0000 |
---|---|---|
committer | jstebbins <[email protected]> | 2010-10-29 16:17:48 +0000 |
commit | 1c0951a0d7d23dd2f85efa83f87ed3a59ec78737 (patch) | |
tree | 4879723563ecf4c0caa4c3fdd426d57ad2b3cf64 | |
parent | b6fa57df362e427de28ae05d043fe6795260aca0 (diff) |
fix a segfault and a deadlock if reader exits befor first buffer sent
This can happen if enough of the source is good that it scans but the
beginning has an error that causes reader to exit.
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3628 b64f7644-9d1e-0410-96f1-a4d463321fa5
-rw-r--r-- | libhb/decavcodec.c | 5 | ||||
-rw-r--r-- | libhb/sync.c | 2 |
2 files changed, 5 insertions, 2 deletions
diff --git a/libhb/decavcodec.c b/libhb/decavcodec.c index cff6e43b2..e461f634b 100644 --- a/libhb/decavcodec.c +++ b/libhb/decavcodec.c @@ -1014,7 +1014,10 @@ static int decavcodecvWork( hb_work_object_t * w, hb_buffer_t ** buf_in, /* if we got an empty buffer signaling end-of-stream send it downstream */ if ( in->size == 0 ) { - decodeVideo( pv, in->data, in->size, in->sequence, pts, dts ); + if ( pv->context->codec != NULL ) + { + decodeVideo( pv, in->data, in->size, in->sequence, pts, dts ); + } hb_list_add( pv->list, in ); *buf_out = link_buf_list( pv ); return HB_WORK_DONE; diff --git a/libhb/sync.c b/libhb/sync.c index acc782e4a..57809d7e2 100644 --- a/libhb/sync.c +++ b/libhb/sync.c @@ -327,7 +327,7 @@ int syncVideoWork( hb_work_object_t * w, hb_buffer_t ** buf_in, } /* Wait till we can determine the initial pts of all streams */ - if( pv->common->pts_offset == INT64_MIN ) + if( next->size != 0 && pv->common->pts_offset == INT64_MIN ) { pv->common->first_pts[0] = next->start; hb_lock( pv->common->mutex ); |