]> git.sesse.net Git - vlc/blobdiff - modules/codec/dts.c
Win32: add support for media keys and remotes in Qt.
[vlc] / modules / codec / dts.c
index b7520d3b440bcc788c39cfb3e101fec59df3bb89..729049138f76c5db2f6a4b50420b285032c2d24c 100644 (file)
@@ -29,6 +29,7 @@
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
+#include <assert.h>
 
 #include <vlc_common.h>
 #include <vlc_plugin.h>
@@ -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;