]> git.sesse.net Git - vlc/blobdiff - modules/packetizer/mpegvideo.c
Use var_Inherit* instead of var_CreateGet*.
[vlc] / modules / packetizer / mpegvideo.c
index fa3c0e218ca1ab8f475535a907bfd4efcd55e136..cad9545f6070dbcb1b08e67703468297005d4472 100644 (file)
@@ -73,7 +73,7 @@ vlc_module_begin ()
     set_capability( "packetizer", 50 )
     set_callbacks( Open, Close )
 
-    add_bool( "packetizer-mpegvideo-sync-iframe", 0, NULL, SYNC_INTRAFRAME_TEXT,
+    add_bool( "packetizer-mpegvideo-sync-iframe", false, NULL, SYNC_INTRAFRAME_TEXT,
               SYNC_INTRAFRAME_LONGTEXT, true )
 vlc_module_end ()
 
@@ -170,7 +170,7 @@ static int Open( vlc_object_t *p_this )
     /* Misc init */
     packetizer_Init( &p_sys->packetizer,
                      p_mp2v_startcode, sizeof(p_mp2v_startcode),
-                     NULL, 0,
+                     NULL, 0, 4,
                      PacketizeReset, PacketizeParse, PacketizeValidate, p_dec );
 
     p_sys->p_seq = NULL;
@@ -179,7 +179,7 @@ static int Open( vlc_object_t *p_this )
     p_sys->pp_last = &p_sys->p_frame;
     p_sys->b_frame_slice = false;
 
-    p_sys->i_dts = p_sys->i_pts = 0;
+    p_sys->i_dts = p_sys->i_pts = VLC_TS_INVALID;
 
     p_sys->i_frame_rate = 1;
     p_sys->i_frame_rate_base = 1;
@@ -195,8 +195,8 @@ static int Open( vlc_object_t *p_this )
     p_sys->i_progressive_frame = 0;
     p_sys->b_inited = 0;
 
-    p_sys->i_interpolated_dts = 0;
-    p_sys->i_last_ref_pts = 0;
+    p_sys->i_interpolated_dts = VLC_TS_INVALID;
+    p_sys->i_last_ref_pts = VLC_TS_INVALID;
     p_sys->b_second_field = 0;
 
     p_sys->b_discontinuity = false;
@@ -294,10 +294,10 @@ static void PacketizeReset( void *p_private, bool b_broken )
         p_sys->pp_last = &p_sys->p_frame;
         p_sys->b_frame_slice = false;
     }
-    p_sys->i_dts = 0;
-    p_sys->i_pts = 0;
-    p_sys->i_interpolated_dts = 0;
-    p_sys->i_last_ref_pts = 0;
+    p_sys->i_dts =
+    p_sys->i_pts =
+    p_sys->i_interpolated_dts =
+    p_sys->i_last_ref_pts = VLC_TS_INVALID;
 }
 
 static block_t *PacketizeParse( void *p_private, bool *pb_ts_used, block_t *p_block )
@@ -305,7 +305,7 @@ static block_t *PacketizeParse( void *p_private, bool *pb_ts_used, block_t *p_bl
     decoder_t *p_dec = p_private;
 
     /* Check if we have a picture start code */
-    *pb_ts_used = p_block->i_buffer >= 4 && p_block->p_buffer[3] == 0x00;
+    *pb_ts_used = p_block->p_buffer[3] == 0x00;
 
     return ParseMPEGBlock( p_dec, p_block );
 }
@@ -333,16 +333,16 @@ static int PacketizeValidate( void *p_private, block_t *p_au )
 
     /* We've just started the stream, wait for the first PTS.
      * We discard here so we can still get the sequence header. */
-    if( p_sys->i_dts <= 0 && p_sys->i_pts <= 0 &&
-        p_sys->i_interpolated_dts <= 0 )
+    if( p_sys->i_dts <= VLC_TS_INVALID && p_sys->i_pts <= VLC_TS_INVALID &&
+        p_sys->i_interpolated_dts <= VLC_TS_INVALID )
     {
         msg_Dbg( p_dec, "need a starting pts/dts" );
         return VLC_EGENERIC;
     }
 
     /* When starting the stream we can have the first frame with
-     * a null DTS (i_interpolated_pts is initialized to 0) */
-    if( !p_au->i_dts )
+     * an invalid DTS (i_interpolated_pts is initialized to VLC_TS_INVALID) */
+    if( p_au->i_dts <= VLC_TS_INVALID )
         p_au->i_dts = p_au->i_pts;
 
     return VLC_SUCCESS;
@@ -425,15 +425,18 @@ static block_t *ParseMPEGBlock( decoder_t *p_dec, block_t *p_frag )
         {
             /* Trivial case (DTS == PTS) */
             /* Correct interpolated dts when we receive a new pts/dts */
-            if( p_sys->i_pts > 0 ) p_sys->i_interpolated_dts = p_sys->i_pts;
-            if( p_sys->i_dts > 0 ) p_sys->i_interpolated_dts = p_sys->i_dts;
+            if( p_sys->i_pts > VLC_TS_INVALID )
+                p_sys->i_interpolated_dts = p_sys->i_pts;
+            if( p_sys->i_dts > VLC_TS_INVALID )
+                p_sys->i_interpolated_dts = p_sys->i_dts;
         }
         else
         {
             /* Correct interpolated dts when we receive a new pts/dts */
-            if( p_sys->i_last_ref_pts > 0 && !p_sys->b_second_field )
+            if(p_sys->i_last_ref_pts > VLC_TS_INVALID && !p_sys->b_second_field)
                 p_sys->i_interpolated_dts = p_sys->i_last_ref_pts;
-            if( p_sys->i_dts > 0 ) p_sys->i_interpolated_dts = p_sys->i_dts;
+            if( p_sys->i_dts > VLC_TS_INVALID )
+                p_sys->i_interpolated_dts = p_sys->i_dts;
 
             if( !p_sys->b_second_field )
                 p_sys->i_last_ref_pts = p_sys->i_pts;
@@ -443,7 +446,7 @@ static block_t *ParseMPEGBlock( decoder_t *p_dec, block_t *p_frag )
         p_sys->i_interpolated_dts += i_duration;
 
         /* Set PTS only if we have a B frame or if it comes from the stream */
-        if( p_sys->i_pts > 0 )
+        if( p_sys->i_pts > VLC_TS_INVALID )
         {
             p_pic->i_pts = p_sys->i_pts;
         }
@@ -453,7 +456,7 @@ static block_t *ParseMPEGBlock( decoder_t *p_dec, block_t *p_frag )
         }
         else
         {
-            p_pic->i_pts = 0;
+            p_pic->i_pts = VLC_TS_INVALID;
         }
 
         switch ( p_sys->i_picture_type )
@@ -514,7 +517,7 @@ static block_t *ParseMPEGBlock( decoder_t *p_dec, block_t *p_frag )
         if( p_sys->p_seq &&
             p_sys->i_seq_old > p_sys->i_frame_rate/p_sys->i_frame_rate_base )
         {
-            /* Usefull for mpeg1: repeat sequence header every second */
+            /* Useful for mpeg1: repeat sequence header every second */
             block_ChainLastAppend( &p_sys->pp_last, block_Duplicate( p_sys->p_seq ) );
             if( p_sys->p_ext )
             {
@@ -607,10 +610,12 @@ static block_t *ParseMPEGBlock( decoder_t *p_dec, block_t *p_frag )
              * of aspect ratio change, we're screwed. --Meuuh
              */
 #if 0
-            p_dec->fmt_out.video.i_aspect =
+            p_dec->fmt_out.video.i_sar_num =
                 mpeg2_aspect[p_sys->i_aspect_ratio_info][0] *
-                VOUT_ASPECT_FACTOR /
-                mpeg2_aspect[p_sys->i_aspect_ratio_info][1];
+                p_dec->fmt_out.video.i_height;
+            p_dec->fmt_out.video.i_sar_den =
+                mpeg2_aspect[p_sys->i_aspect_ratio_info][1] *
+                p_dec->fmt_out.video.i_width;
 #endif
 
         }
@@ -625,7 +630,8 @@ static block_t *ParseMPEGBlock( decoder_t *p_dec, block_t *p_frag )
     }
     else if( p_frag->p_buffer[3] == 0xb2 && p_frag->i_buffer > 4 )
     {
-        cc_Extract( &p_sys->cc, &p_frag->p_buffer[4], p_frag->i_buffer - 4 );
+        cc_Extract( &p_sys->cc, p_sys->i_top_field_first,
+                    &p_frag->p_buffer[4], p_frag->i_buffer - 4 );
     }
     else if( p_frag->p_buffer[3] == 0x00 )
     {