]> git.sesse.net Git - vlc/blobdiff - modules/codec/dirac.c
Spell "separate"
[vlc] / modules / codec / dirac.c
index b7a300e4a985d0292f8e1b962b270f95312491f3..ef0ad318aa2215d13f9fe21f2c7ac28e1a2eb00d 100644 (file)
 #endif
 
 #include <limits.h>
+#include <assert.h>
 
 #include <vlc_common.h>
 #include <vlc_plugin.h>
 #include <vlc_codec.h>
 #include <vlc_sout.h>
-#include <vlc_vout.h>
 
 #include <libdirac_encoder/dirac_encoder.h>
 
@@ -103,13 +103,13 @@ static const char *const enc_chromafmt_list_text[] =
 #define ENC_CODINGMODE "coding-mode"
 #define ENC_CODINGMODE_TEXT N_("Picture coding mode")
 #define ENC_CODINGMODE_LONGTEXT N_("Field coding is where interlaced fields are coded" \
-                                   " seperately as opposed to a pseudo-progressive frame")
+                                   " separately as opposed to a pseudo-progressive frame")
 static const char *const enc_codingmode_list[] =
   { "auto", "progressive", "field" };
 static const char *const enc_codingmode_list_text[] =
   { N_("auto - let encoder decide based upon input (Best)"),
     N_("force coding frame as single picture"),
-    N_("force coding frame as seperate interlaced fields"),
+    N_("force coding frame as separate interlaced fields"),
   };
 
 #define ENC_MCBLK_WIDTH "mc-blk-width"
@@ -204,109 +204,108 @@ vlc_module_begin()
     set_category( CAT_INPUT )
     set_subcategory( SUBCAT_INPUT_VCODEC )
     set_description( N_("Dirac video encoder using dirac-research library") )
+    set_shortname( "Dirac" )
     set_capability( "encoder", 100 )
     set_callbacks( OpenEncoder, CloseEncoder )
 
     add_float( ENC_CFG_PREFIX ENC_QUALITY_FACTOR, 5.5, NULL,
-               ENC_QUALITY_FACTOR_TEXT, ENC_QUALITY_FACTOR_LONGTEXT, false );
+               ENC_QUALITY_FACTOR_TEXT, ENC_QUALITY_FACTOR_LONGTEXT, false )
     change_float_range(0., 10.);
 
     add_integer( ENC_CFG_PREFIX ENC_TARGETRATE, -1, NULL,
-                 ENC_TARGETRATE_TEXT, ENC_TARGETRATE_LONGTEXT, false );
+                 ENC_TARGETRATE_TEXT, ENC_TARGETRATE_LONGTEXT, false )
     change_integer_range(-1, INT_MAX);
 
     add_bool( ENC_CFG_PREFIX ENC_LOSSLESS, false, NULL,
-              ENC_LOSSLESS_TEXT, ENC_LOSSLESS_LONGTEXT, false );
+              ENC_LOSSLESS_TEXT, ENC_LOSSLESS_LONGTEXT, false )
 
     add_string( ENC_CFG_PREFIX ENC_PREFILTER, "diaglp", NULL,
-                ENC_PREFILTER_TEXT, ENC_PREFILTER_LONGTEXT, false );
+                ENC_PREFILTER_TEXT, ENC_PREFILTER_LONGTEXT, false )
     change_string_list( enc_prefilter_list, enc_prefilter_list_text, 0 );
 
     add_integer( ENC_CFG_PREFIX ENC_PREFILTER_STRENGTH, 1, NULL,
-                 ENC_PREFILTER_STRENGTH_TEXT, ENC_PREFILTER_STRENGTH_LONGTEXT, false );
+                 ENC_PREFILTER_STRENGTH_TEXT, ENC_PREFILTER_STRENGTH_LONGTEXT, false )
     change_integer_range(0, 10);
 
     add_string( ENC_CFG_PREFIX ENC_CHROMAFMT, "420", NULL,
-                ENC_CHROMAFMT_TEXT, ENC_CHROMAFMT_LONGTEXT, false );
+                ENC_CHROMAFMT_TEXT, ENC_CHROMAFMT_LONGTEXT, false )
     change_string_list( enc_chromafmt_list, enc_chromafmt_list_text, 0 );
 
     add_integer( ENC_CFG_PREFIX ENC_L1SEP, -1, NULL,
-                 ENC_L1SEP_TEXT, ENC_L1SEP_LONGTEXT, false );
+                 ENC_L1SEP_TEXT, ENC_L1SEP_LONGTEXT, false )
     change_integer_range(-1, INT_MAX);
 
     add_integer( ENC_CFG_PREFIX ENC_L1NUM, -1, NULL,
-                 ENC_L1NUM_TEXT, ENC_L1NUM_LONGTEXT, false );
+                 ENC_L1NUM_TEXT, ENC_L1NUM_LONGTEXT, false )
     change_integer_range(-1, INT_MAX);
 
     add_string( ENC_CFG_PREFIX ENC_CODINGMODE, "auto", NULL,
-                ENC_CODINGMODE_TEXT, ENC_CODINGMODE_LONGTEXT, false );
+                ENC_CODINGMODE_TEXT, ENC_CODINGMODE_LONGTEXT, false )
     change_string_list( enc_codingmode_list, enc_codingmode_list_text, 0 );
 
     add_string( ENC_CFG_PREFIX ENC_MVPREC, "1/2", NULL,
-                ENC_MVPREC_TEXT, ENC_MVPREC_LONGTEXT, false );
+                ENC_MVPREC_TEXT, ENC_MVPREC_LONGTEXT, false )
     change_string_list( enc_mvprec_list, enc_mvprec_list, 0 );
 
     add_integer( ENC_CFG_PREFIX ENC_MCBLK_WIDTH, -1, NULL,
-                 ENC_MCBLK_WIDTH_TEXT, ENC_MCBLK_WIDTH_LONGTEXT, false );
-    add_deprecated_alias( ENC_CFG_PREFIX ENC_MCBLK_XBLEN );
+                 ENC_MCBLK_WIDTH_TEXT, ENC_MCBLK_WIDTH_LONGTEXT, false )
     change_integer_range(-1, INT_MAX);
 
     add_integer( ENC_CFG_PREFIX ENC_MCBLK_HEIGHT, -1, NULL,
-                 ENC_MCBLK_HEIGHT, ENC_MCBLK_HEIGHT_LONGTEXT, false );
-    add_deprecated_alias( ENC_CFG_PREFIX ENC_MCBLK_YBLEN );
+                 ENC_MCBLK_HEIGHT, ENC_MCBLK_HEIGHT_LONGTEXT, false )
     change_integer_range(-1, INT_MAX);
 
     add_integer( ENC_CFG_PREFIX ENC_MCBLK_OVERLAP, -1, NULL,
-                 ENC_MCBLK_OVERLAP_TEXT, ENC_MCBLK_OVERLAP_LONGTEXT, false );
+                 ENC_MCBLK_OVERLAP_TEXT, ENC_MCBLK_OVERLAP_LONGTEXT, false )
     change_integer_range(-1, 100);
 
     /* advanced option only */
     add_integer( ENC_CFG_PREFIX ENC_MCBLK_XBLEN, -1, NULL,
-                 ENC_MCBLK_XBLEN_TEXT, ENC_MCBLK_XBLEN_LONGTEXT, true );
+                 ENC_MCBLK_XBLEN_TEXT, ENC_MCBLK_XBLEN_LONGTEXT, true )
     change_integer_range(-1, INT_MAX);
     /* advanced option only */
     add_integer( ENC_CFG_PREFIX ENC_MCBLK_YBLEN, -1, NULL,
-                 ENC_MCBLK_YBLEN_TEXT, ENC_MCBLK_YBLEN_LONGTEXT, true );
+                 ENC_MCBLK_YBLEN_TEXT, ENC_MCBLK_YBLEN_LONGTEXT, true )
     change_integer_range(-1, INT_MAX);
 
     add_string( ENC_CFG_PREFIX ENC_ME_SIMPLESEARCH, "", NULL,
-              ENC_ME_SIMPLESEARCH_TEXT, ENC_ME_SIMPLESEARCH_LONGTEXT, false );
+              ENC_ME_SIMPLESEARCH_TEXT, ENC_ME_SIMPLESEARCH_LONGTEXT, false )
 
 #if DIRAC_RESEARCH_VERSION_ATLEAST(1,0,1)
     add_bool( ENC_CFG_PREFIX ENC_ME_COMBINED, true, NULL,
-              ENC_ME_COMBINED_TEXT, ENC_ME_COMBINED_LONGTEXT, false );
+              ENC_ME_COMBINED_TEXT, ENC_ME_COMBINED_LONGTEXT, false )
 #endif
 
     add_integer( ENC_CFG_PREFIX ENC_DWTINTRA, -1, NULL,
-                 ENC_DWTINTRA_TEXT, ENC_DWTINTRA_LONGTEXT, false );
+                 ENC_DWTINTRA_TEXT, ENC_DWTINTRA_LONGTEXT, false )
     change_integer_range(-1, 6);
 
     add_integer( ENC_CFG_PREFIX ENC_DWTINTER, -1, NULL,
-                 ENC_DWTINTER_TEXT, ENC_DWTINTER_LONGTEXT, false );
+                 ENC_DWTINTER_TEXT, ENC_DWTINTER_LONGTEXT, false )
     change_integer_range(-1, 6);
 
     add_integer( ENC_CFG_PREFIX ENC_DWTDEPTH, -1, NULL,
-                 ENC_DWTDEPTH_TEXT, ENC_DWTDEPTH_LONGTEXT, false );
+                 ENC_DWTDEPTH_TEXT, ENC_DWTDEPTH_LONGTEXT, false )
     change_integer_range(-1, 4);
 
     /* advanced option only */
     /* NB, unforunately vlc doesn't have a concept of 'dont care' */
     add_integer( ENC_CFG_PREFIX ENC_MULTIQUANT, -1, NULL,
-                 ENC_MULTIQUANT_TEXT, ENC_MULTIQUANT_LONGTEXT, true );
+                 ENC_MULTIQUANT_TEXT, ENC_MULTIQUANT_LONGTEXT, true )
     change_integer_range(-1, 1);
 
     /* advanced option only */
     /* NB, unforunately vlc doesn't have a concept of 'dont care' */
     add_integer( ENC_CFG_PREFIX ENC_SPARTITION, -1, NULL,
-                 ENC_SPARTITION_TEXT, ENC_SPARTITION_LONGTEXT, true );
+                 ENC_SPARTITION_TEXT, ENC_SPARTITION_LONGTEXT, true )
     change_integer_range(-1, 1);
 
     add_bool( ENC_CFG_PREFIX ENC_NOAC, false, NULL,
-              ENC_NOAC_TEXT, ENC_NOAC_LONGTEXT, false );
+              ENC_NOAC_TEXT, ENC_NOAC_LONGTEXT, false )
 
     /* advanced option only */
     add_float( ENC_CFG_PREFIX ENC_CPD, -1, NULL,
-               ENC_CPD_TEXT, ENC_CPD_LONGTEXT, true );
+               ENC_CPD_TEXT, ENC_CPD_LONGTEXT, true )
     change_integer_range(-1, INT_MAX);
 vlc_module_end()
 
@@ -442,7 +441,7 @@ static int OpenEncoder( vlc_object_t *p_this )
     float f_tmp;
     char *psz_tmp;
 
-    if( p_enc->fmt_out.i_codec != VLC_FOURCC('d','r','a','c') &&
+    if( p_enc->fmt_out.i_codec != VLC_CODEC_DIRAC &&
         !p_enc->b_force )
     {
         return VLC_EGENERIC;
@@ -461,7 +460,7 @@ static int OpenEncoder( vlc_object_t *p_this )
 
     p_enc->p_sys = p_sys;
     p_enc->pf_encode_video = Encode;
-    p_enc->fmt_out.i_codec = VLC_FOURCC('d','r','a','c');
+    p_enc->fmt_out.i_codec = VLC_CODEC_DIRAC;
     p_enc->fmt_out.i_cat = VIDEO_ES;
 
     if( ( p_sys->p_dts_fifo = block_FifoNew() ) == NULL )
@@ -506,9 +505,8 @@ static int OpenEncoder( vlc_object_t *p_this )
     p_sys->ctx.src_params.frame_rate.denominator = p_enc->fmt_in.video.i_frame_rate_base;
     unsigned u_asr_num, u_asr_den;
     vlc_ureduce( &u_asr_num, &u_asr_den,
-                 p_enc->fmt_in.video.i_height * p_enc->fmt_in.video.i_aspect,
-                 p_enc->fmt_in.video.i_width * VOUT_ASPECT_FACTOR,
-                 0 );
+                 p_enc->fmt_in.video.i_sar_num,
+                 p_enc->fmt_in.video.i_sar_den, 0 );
     p_sys->ctx.src_params.pix_asr.numerator = u_asr_num;
     p_sys->ctx.src_params.pix_asr.denominator = u_asr_den;
 
@@ -518,19 +516,19 @@ static int OpenEncoder( vlc_object_t *p_this )
     if( !psz_tmp )
         goto error;
     else if( !strcmp( psz_tmp, "420" ) ) {
-        p_enc->fmt_in.i_codec = VLC_FOURCC('I','4','2','0');
+        p_enc->fmt_in.i_codec = VLC_CODEC_I420;
         p_enc->fmt_in.video.i_bits_per_pixel = 12;
         p_sys->ctx.src_params.chroma = format420;
         p_sys->i_buffer_in = p_enc->fmt_in.video.i_width * p_enc->fmt_in.video.i_height * 3 / 2;
     }
     else if( !strcmp( psz_tmp, "422" ) ) {
-        p_enc->fmt_in.i_codec = VLC_FOURCC('I','4','2','2');
+        p_enc->fmt_in.i_codec = VLC_CODEC_I422;
         p_enc->fmt_in.video.i_bits_per_pixel = 16;
         p_sys->ctx.src_params.chroma = format422;
         p_sys->i_buffer_in = p_enc->fmt_in.video.i_width * p_enc->fmt_in.video.i_height * 2;
     }
     else if( !strcmp( psz_tmp, "444" ) ) {
-        p_enc->fmt_in.i_codec = VLC_FOURCC('I','4','4','4');
+        p_enc->fmt_in.i_codec = VLC_CODEC_I444;
         p_enc->fmt_in.video.i_bits_per_pixel = 24;
         p_sys->ctx.src_params.chroma = format444;
         p_sys->i_buffer_in = p_enc->fmt_in.video.i_width * p_enc->fmt_in.video.i_height * 3;
@@ -783,6 +781,7 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pic )
     int i_plane, i_line, i_width, i_src_stride;
     uint8_t *p_dst;
 
+    if( !p_pic ) return NULL;
     /* we only know if the sequence is interlaced when the first
      * picture arrives, so final setup is done here */
     /* XXX todo, detect change of interlace */
@@ -799,13 +798,12 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pic )
         p_sys->p_dirac = dirac_encoder_init( &p_sys->ctx, 0 );
         if( !p_sys->p_dirac )
         {
-            msg_Err( p_enc, "Failed to initialize dirac encoder\n" );
-            p_enc->b_error = 1;
+            msg_Err( p_enc, "Failed to initialize dirac encoder" );
             return NULL;
         }
         date_Init( &date, p_enc->fmt_in.video.i_frame_rate, p_enc->fmt_in.video.i_frame_rate_base );
 #if DIRAC_RESEARCH_VERSION_ATLEAST(1,0,2)
-        int i_delayinpics = dirac_encoder_ptsoffset( p_sys->p_dirac );
+        int i_delayinpics = dirac_encoder_pts_offset( p_sys->p_dirac );
         i_delayinpics /= p_sys->ctx.enc_params.picture_coding_mode + 1;
         date_Increment( &date, i_delayinpics );
 #else
@@ -859,10 +857,7 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pic )
      * coded order */
     p_block = block_New( p_enc, 1 );
     if( !p_block )
-    {
-        p_enc->b_error = 1;
         return NULL;
-    }
     p_block->i_dts = p_pic->date - p_sys->i_pts_offset;
     block_FifoPut( p_sys->p_dts_fifo, p_block );
     p_block = NULL;
@@ -877,10 +872,7 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pic )
 
         p_block = block_New( p_enc, 1 );
         if( !p_block )
-        {
-            p_enc->b_error = 1;
             return NULL;
-        }
         p_block->i_dts = p_pic->date - p_sys->i_pts_offset + p_sys->i_field_time;
         block_FifoPut( p_sys->p_dts_fifo, p_block );
         p_block = NULL;
@@ -901,10 +893,7 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pic )
             /* extract data from encoder temporary buffer. */
             p_block = block_New( p_enc, p_sys->p_dirac->enc_buf.size );
             if( !p_block )
-            {
-                p_enc->b_error = 1;
                 return NULL;
-            }
             memcpy( p_block->p_buffer, p_sys->p_dirac->enc_buf.buffer,
                     p_sys->p_dirac->enc_buf.size );
 
@@ -933,10 +922,7 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pic )
                     /* XXX, should this be done using the packetizer ? */
                     p_enc->fmt_out.p_extra = malloc( len + sizeof(eos) );
                     if( !p_enc->fmt_out.p_extra )
-                    {
-                        p_enc->b_error = 1;
                         return NULL;
-                    }
                     memcpy( p_enc->fmt_out.p_extra, p_block->p_buffer, len);
                     memcpy( (uint8_t*)p_enc->fmt_out.p_extra + len, eos, sizeof(eos) );
                     SetDWBE( (uint8_t*)p_enc->fmt_out.p_extra + len + 10, len );