]> git.sesse.net Git - vlc/blobdiff - modules/codec/libmpeg2.c
zvbi: fix RGYB key values.
[vlc] / modules / codec / libmpeg2.c
index ac78b84c6095dbfe9fbf6abd010a32fea1eecd56..149ae58f8c56061d4fa10e53e2fbd0702e519735 100644 (file)
 # include "config.h"
 #endif
 
-#include <vlc/vlc.h>
+#include <vlc_common.h>
+#include <vlc_plugin.h>
 #include <vlc_vout.h>
 #include <vlc_codec.h>
 
-#include <mpeg2dec/mpeg2.h>
+#include <mpeg2.h>
 
 #include <vlc_codec_synchro.h>
 
-/* Aspect ratio (ISO/IEC 13818-2 section 6.3.3, table 6-3) */
-#define AR_SQUARE_PICTURE       1                           /* square pixels */
-#define AR_4_3_PICTURE          2                        /* 4:3 picture (TV) */
-#define AR_16_9_PICTURE         3              /* 16:9 picture (wide screen) */
-#define AR_221_1_PICTURE        4                  /* 2.21:1 picture (movie) */
-
 /*****************************************************************************
  * decoder_sys_t : libmpeg2 decoder descriptor
  *****************************************************************************/
@@ -53,7 +48,7 @@ struct decoder_sys_t
      */
     mpeg2dec_t          *p_mpeg2dec;
     const mpeg2_info_t  *p_info;
-    bool          b_skip;
+    bool                b_skip;
 
     /*
      * Input properties
@@ -64,13 +59,13 @@ struct decoder_sys_t
     mtime_t          i_current_dts;
     int              i_current_rate;
     picture_t *      p_picture_to_destroy;
-    bool       b_garbage_pic;
-    bool       b_after_sequence_header; /* is it the next frame after
+    bool             b_garbage_pic;
+    bool             b_after_sequence_header; /* is it the next frame after
                                                * the sequence header ?    */
-    bool       b_slice_i;             /* intra-slice refresh stream */
-    bool       b_second_field;
+    bool             b_slice_i;             /* intra-slice refresh stream */
+    bool             b_second_field;
 
-    bool       b_preroll;
+    bool             b_preroll;
 
     /*
      * Output properties
@@ -98,7 +93,7 @@ static void GetAR( decoder_t *p_dec );
  * Module descriptor
  *****************************************************************************/
 vlc_module_begin();
-    set_description( _("MPEG I/II video decoder (using libmpeg2)") );
+    set_description( N_("MPEG I/II video decoder (using libmpeg2)") );
     set_capability( "decoder", 150 );
     set_category( CAT_INPUT );
     set_subcategory( SUBCAT_INPUT_VCODEC );
@@ -129,10 +124,7 @@ static int OpenDecoder( vlc_object_t *p_this )
     /* Allocate the memory needed to store the decoder's structure */
     if( ( p_dec->p_sys = p_sys =
           (decoder_sys_t *)malloc(sizeof(decoder_sys_t)) ) == NULL )
-    {
-        msg_Err( p_dec, "out of memory" );
-        return VLC_EGENERIC;
-    }
+        return VLC_ENOMEM;
 
     /* Initialize the thread properties */
     memset( p_sys, 0, sizeof(decoder_sys_t) );
@@ -243,7 +235,10 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
                     uint8_t *buf[3];
                     buf[0] = buf[1] = buf[2] = NULL;
                     if( (p_pic = GetNewPicture( p_dec, buf )) == NULL )
+                    {
+                        p_block->i_buffer = 0;
                         break;
+                    }
                     mpeg2_set_buf( p_sys->p_mpeg2dec, buf, p_pic );
                     mpeg2_stride( p_sys->p_mpeg2dec, p_pic->p[Y_PLANE].i_pitch );
                 }
@@ -296,9 +291,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
             p_block->i_buffer = 0;
             break;
 
-#ifdef STATE_SEQUENCE_MODIFIED
-/* FIXME - the above ifdef is always FALSE, even with libmpeg2-0.5.0
- * Need to improve the implementation to avoid invalid/unref pictures */
+#if MPEG2_RELEASE >= MPEG2_VERSION (0, 5, 0)
 
         case STATE_SEQUENCE_MODIFIED:
             GetAR( p_dec );
@@ -325,7 +318,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
             }
 
             mpeg2_set_buf( p_sys->p_mpeg2dec, buf, p_pic );
-        mpeg2_stride( p_sys->p_mpeg2dec, p_pic->p[Y_PLANE].i_pitch );
+            mpeg2_stride( p_sys->p_mpeg2dec, p_pic->p[Y_PLANE].i_pitch );
 
             /* This picture will never go through display_picture. */
             p_pic->date = 0;
@@ -525,7 +518,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
                 if( (p_pic = GetNewPicture( p_dec, buf )) == NULL )
                     break;
                 mpeg2_set_buf( p_sys->p_mpeg2dec, buf, p_pic );
-        mpeg2_stride( p_sys->p_mpeg2dec, p_pic->p[Y_PLANE].i_pitch );
+                mpeg2_stride( p_sys->p_mpeg2dec, p_pic->p[Y_PLANE].i_pitch );
             }
             p_sys->p_picture_to_destroy = p_pic;
 
@@ -637,31 +630,6 @@ static void GetAR( decoder_t *p_dec )
     if( p_dec->fmt_in.video.i_aspect )
     {
         p_sys->i_aspect = p_dec->fmt_in.video.i_aspect;
-        if( p_sys->i_aspect <= AR_221_1_PICTURE )
-        switch( p_sys->i_aspect )
-        {
-        case AR_4_3_PICTURE:
-            p_sys->i_aspect = VOUT_ASPECT_FACTOR * 4 / 3;
-            p_sys->i_sar_num = p_sys->p_info->sequence->picture_height * 4;
-            p_sys->i_sar_den = p_sys->p_info->sequence->picture_width * 3;
-            break;
-        case AR_16_9_PICTURE:
-            p_sys->i_aspect = VOUT_ASPECT_FACTOR * 16 / 9;
-            p_sys->i_sar_num = p_sys->p_info->sequence->picture_height * 16;
-            p_sys->i_sar_den = p_sys->p_info->sequence->picture_width * 9;
-            break;
-        case AR_221_1_PICTURE:
-            p_sys->i_aspect = VOUT_ASPECT_FACTOR * 221 / 100;
-            p_sys->i_sar_num = p_sys->p_info->sequence->picture_height * 221;
-            p_sys->i_sar_den = p_sys->p_info->sequence->picture_width * 100;
-            break;
-        case AR_SQUARE_PICTURE:
-            p_sys->i_aspect = VOUT_ASPECT_FACTOR *
-                           p_sys->p_info->sequence->picture_width /
-                           p_sys->p_info->sequence->picture_height;
-            p_sys->i_sar_num = p_sys->i_sar_den = 1;
-            break;
-        }
     }
     else
     {