summaryrefslogtreecommitdiffstats
path: root/libhb/decdca.c
diff options
context:
space:
mode:
authorjstebbins <[email protected]>2012-05-01 10:05:53 +0000
committerjstebbins <[email protected]>2012-05-01 10:05:53 +0000
commit2e8be70b9910c62d8d8cb693f8c58485efbf4e97 (patch)
treeb1bccf23e518790e29948fcf11503b6cf79fc0ae /libhb/decdca.c
parent4dcf3fcfd9aaeca7fe7ec06ff8c0c6b2d5d3c198 (diff)
libhb: fix problem with incorrect addition of audio silence
sync needs the precise duration of a frame of audio and has no way to compute it for passthru audio. So add a duration member to hb_buffer_t and set it in the audio decoders. This should eventually supersede hb_buffer_t member "stop" since it provides redundant information. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@4618 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'libhb/decdca.c')
-rw-r--r--libhb/decdca.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/libhb/decdca.c b/libhb/decdca.c
index 5bc118007..49fb3ecae 100644
--- a/libhb/decdca.c
+++ b/libhb/decdca.c
@@ -235,6 +235,7 @@ static hb_buffer_t * Decode( hb_work_object_t * w )
buf = hb_buffer_init( pv->size );
memcpy( buf->data, pv->frame, pv->size );
buf->s.start = pts;
+ buf->s.duration = frame_dur;
pv->next_pts = pts + frame_dur;
buf->s.stop = pv->next_pts;
pv->sync = 0;
@@ -249,10 +250,12 @@ static hb_buffer_t * Decode( hb_work_object_t * w )
/* num_blocks blocks per frame, 256 samples per block, channelsused channels */
int nsamp = num_blocks * 256;
+ frame_dur = (double)nsamp / (double)pv->rate * 90000.;
buf = hb_buffer_init( nsamp * pv->out_discrete_channels * sizeof( float ) );
buf->s.start = pts;
- pv->next_pts = pts + (double)nsamp / (double)pv->rate * 90000.;
+ buf->s.duration = frame_dur;
+ pv->next_pts = pts + frame_dur;
buf->s.stop = pv->next_pts;
for( i = 0; i < num_blocks; i++ )