X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fcodec%2Fdts.c;h=729049138f76c5db2f6a4b50420b285032c2d24c;hb=82a0f2998f14dd58f5cdf122c04dcda37830b540;hp=b7520d3b440bcc788c39cfb3e101fec59df3bb89;hpb=1853bff167e3797e8f5fd801d18c52adedd3188e;p=vlc diff --git a/modules/codec/dts.c b/modules/codec/dts.c index b7520d3b44..729049138f 100644 --- a/modules/codec/dts.c +++ b/modules/codec/dts.c @@ -29,6 +29,7 @@ #ifdef HAVE_CONFIG_H # include "config.h" #endif +#include #include #include @@ -152,6 +153,7 @@ static int OpenCommon( vlc_object_t *p_this, bool b_packetizer ) p_sys->i_state = STATE_NOSYNC; date_Set( &p_sys->end_date, 0 ); p_sys->b_dts_hd = false; + p_sys->i_pts = VLC_TS_INVALID; p_sys->bytestream = block_BytestreamInit(); @@ -194,7 +196,7 @@ static void *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) return NULL; } - if( !date_Get( &p_sys->end_date ) && !(*pp_block)->i_pts ) + if( !date_Get( &p_sys->end_date ) && (*pp_block)->i_pts <= VLC_TS_INVALID ) { /* We've just started the stream, wait for the first PTS. */ block_Release( *pp_block ); @@ -230,7 +232,7 @@ static void *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) case STATE_SYNC: /* New frame, set the Presentation Time Stamp */ p_sys->i_pts = p_sys->bytestream.p_block->i_pts; - if( p_sys->i_pts != 0 && + if( p_sys->i_pts > VLC_TS_INVALID && p_sys->i_pts != date_Get( &p_sys->end_date ) ) { date_Set( &p_sys->end_date, p_sys->i_pts ); @@ -321,7 +323,7 @@ static void *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) /* Make sure we don't reuse the same pts twice */ if( p_sys->i_pts == p_sys->bytestream.p_block->i_pts ) - p_sys->i_pts = p_sys->bytestream.p_block->i_pts = 0; + p_sys->i_pts = p_sys->bytestream.p_block->i_pts = VLC_TS_INVALID; p_sys->i_state = STATE_NOSYNC; @@ -407,11 +409,11 @@ static aout_buffer_t *GetAoutBuffer( decoder_t *p_dec ) p_buf = decoder_NewAudioBuffer( p_dec, p_sys->i_frame_length * 4 ); if( p_buf == NULL ) return NULL; p_buf->i_nb_samples = p_sys->i_frame_length; - p_buf->i_nb_bytes = p_sys->i_frame_size; + p_buf->i_buffer = p_sys->i_frame_size; - p_buf->start_date = date_Get( &p_sys->end_date ); - p_buf->end_date = - date_Increment( &p_sys->end_date, p_sys->i_frame_length ); + p_buf->i_pts = date_Get( &p_sys->end_date ); + p_buf->i_length = date_Increment( &p_sys->end_date, p_sys->i_frame_length ) + - p_buf->i_pts; return p_buf; } @@ -622,9 +624,11 @@ static int SyncInfo( const uint8_t *p_buf, pi_bit_rate, pi_frame_length ); } /* DTS-HD */ - else if( p_buf[0] == 0x64 && p_buf[1] == 0x58 && - p_buf[2] == 0x20 && p_buf[3] == 0x25 ) + else { + assert( p_buf[0] == 0x64 && p_buf[1] == 0x58 && + p_buf[2] == 0x20 && p_buf[3] == 0x25 ); + int i_dts_hd_size; bs_t s; bs_init( &s, &p_buf[4], DTS_HEADER_SIZE - 4 ); @@ -662,10 +666,12 @@ static int SyncInfo( const uint8_t *p_buf, { case 0x0: /* Mono */ + *pi_channels = 1; *pi_channels_conf = AOUT_CHAN_CENTER; break; case 0x1: /* Dual-mono = stereo + dual-mono */ + *pi_channels = 2; *pi_channels_conf = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_DUALMONO; break;