Compile the transrate module (untested ... but now it compiles).
authorAntoine Cellerier <dionoea@videolan.org>
Mon, 25 Aug 2008 20:18:20 +0000 (22:18 +0200)
committerAntoine Cellerier <dionoea@videolan.org>
Mon, 25 Aug 2008 20:18:58 +0000 (22:18 +0200)
modules/stream_out/transrate/Modules.am
modules/stream_out/transrate/block.c
modules/stream_out/transrate/putvlc.h
modules/stream_out/transrate/transrate.c
modules/video_filter/canvas.c

index 722edf5..a248795 100644 (file)
@@ -1 +1,3 @@
 SOURCES_stream_out_transrate = transrate.c transrate.h frame.c block.c getvlc.h putvlc.h
+
+libvlc_LTLIBRARIES += libstream_out_transrate_plugin.la
index 67e6332..e22eb1b 100644 (file)
@@ -149,7 +149,7 @@ static const uint8_t map_non_linear_mquant[113] =
 
 int scale_quant( transrate_t *tr, double qrate )
 {
-    int i_quant = (int)floor( tr->quantizer_scale * qrate + 0.5 );
+    int i_quant = floor( tr->quantizer_scale * qrate + 0.5 );
 
     if ( tr->q_scale_type )
     {
@@ -171,7 +171,7 @@ int scale_quant( transrate_t *tr, double qrate )
     return i_quant;
 }
 
-int increment_quant( transrate_t *tr, int i_quant )
+static int increment_quant( transrate_t *tr, int i_quant )
 {
     if ( tr->q_scale_type )
     {
index 2dfca76..1864833 100644 (file)
@@ -51,7 +51,7 @@ typedef struct
  * 'macroblock_escape' is treated elsewhere
  */
 
-const static VLCtable addrinctab[33]=
+static const VLCtable addrinctab[33]=
 {
   {0x01,1},  {0x03,3},  {0x02,3},  {0x03,4},
   {0x02,4},  {0x03,5},  {0x02,5},  {0x07,7},
@@ -70,7 +70,7 @@ const static VLCtable addrinctab[33]=
  * indexed by [macroblock_type]
  */
 
-const static VLCtable mbtypetab[3][32]=
+static const VLCtable mbtypetab[3][32]=
 {
  /* I */
  {
@@ -107,7 +107,7 @@ const static VLCtable mbtypetab[3][32]=
  * indexed by [coded_block_pattern]
  */
 
-const static VLCtable cbptable[64]=
+static const VLCtable cbptable[64]=
 {
   {0x01,9}, {0x0b,5}, {0x09,5}, {0x0d,6},
   {0x0d,4}, {0x17,7}, {0x13,7}, {0x1f,8},
@@ -136,7 +136,7 @@ const static VLCtable cbptable[64]=
  * codes do not include s (sign bit)
  */
 
-const static VLCtable dct_code_tab1[2][40]=
+static const VLCtable dct_code_tab1[2][40]=
 {
  /* run = 0, level = 1...40 */
  {
@@ -166,7 +166,7 @@ const static VLCtable dct_code_tab1[2][40]=
  }
 };
 
-const static VLCtable dct_code_tab2[30][5]=
+static const VLCtable dct_code_tab2[30][5]=
 {
   /* run = 2...31, level = 1...5 */
   {{0x05, 4}, {0x04, 7}, {0x0b,10}, {0x14,12}, {0x14,13}},
@@ -210,7 +210,7 @@ const static VLCtable dct_code_tab2[30][5]=
  * codes do not include s (sign bit)
  */
 
-const static VLCtable dct_code_tab1a[2][40]=
+static const VLCtable dct_code_tab1a[2][40]=
 {
  /* run = 0, level = 1...40 */
  {
@@ -240,7 +240,7 @@ const static VLCtable dct_code_tab1a[2][40]=
  }
 };
 
-const static VLCtable dct_code_tab2a[30][5]=
+static const VLCtable dct_code_tab2a[30][5]=
 {
   /* run = 2...31, level = 1...5 */
   {{0x05, 5}, {0x07, 7}, {0xfc, 8}, {0x0c,10}, {0x14,13}},
index 98ce083..3483a3f 100644 (file)
@@ -37,6 +37,7 @@
 #include <vlc_plugin.h>
 #include <vlc_sout.h>
 #include <vlc_input.h>
+#include <vlc_block.h>
 
 #include "transrate.h"
 
@@ -55,6 +56,21 @@ static int  transrate_video_process( sout_stream_t *, sout_stream_id_t *, block_
 /*****************************************************************************
  * Module descriptor
  *****************************************************************************/
+
+#define VB_TEXT N_("Video bitrate")
+#define VB_LONGTEXT N_( \
+    "... FIXME ..." )
+
+#define SHAPING_TEXT N_("Shaping delay")
+#define SHAPING_LONGTEXT N_( \
+    "... FIXME ..." )
+
+#define MPEG4_MATRIX_TEXT N_("Use MPEG4 matrix")
+#define MPEG4_MATRIX_LONGTEXT N_( \
+    "... FIXME ..." )
+
+#define SOUT_CFG_PREFIX "sout-transrate-"
+
 vlc_module_begin();
     set_category( CAT_SOUT );
     set_subcategory( SUBCAT_SOUT_STREAM );
@@ -62,8 +78,19 @@ vlc_module_begin();
     set_capability( "sout stream", 50 );
     add_shortcut( "transrate" );
     set_callbacks( Open, Close );
+
+    add_integer( SOUT_CFG_PREFIX "vb", 3 * 100 * 1000, NULL,
+                 VB_TEXT, VB_LONGTEXT, false );
+    add_integer( SOUT_CFG_PREFIX "shaping", 500, NULL,
+                 SHAPING_TEXT, SHAPING_LONGTEXT, false );
+    add_bool( SOUT_CFG_PREFIX "mpeg4-matrix", false, NULL,
+              MPEG4_MATRIX_TEXT, MPEG4_MATRIX_LONGTEXT, false );
 vlc_module_end();
 
+static const char *const ppsz_sout_options[] = {
+    "vb", "shaping", "mpeg4-matrix", NULL
+};
+
 struct sout_stream_sys_t
 {
     sout_stream_t   *p_out;
@@ -82,44 +109,28 @@ static int Open( vlc_object_t *p_this )
 {
     sout_stream_t     *p_stream = (sout_stream_t*)p_this;
     sout_stream_sys_t *p_sys;
-    char *val;
 
     p_sys = malloc( sizeof( sout_stream_sys_t ) );
     p_sys->p_out = sout_StreamNew( p_stream->p_sout, p_stream->psz_next );
 
-    p_sys->i_vbitrate   = 0;
-
-    if( ( val = sout_cfg_find_value( p_stream->p_cfg, "vb" ) ) )
-    {
-        p_sys->i_vbitrate = atoi( val );
-        if( p_sys->i_vbitrate < 16000 )
-        {
-            p_sys->i_vbitrate *= 1000;
-        }
-    }
-    else
-    {
-        p_sys->i_vbitrate = 3000000;
-    }
+    config_ChainParse( p_stream, SOUT_CFG_PREFIX, ppsz_sout_options,
+                       p_stream->p_cfg );
+    p_sys->i_vbitrate = var_CreateGetInteger( p_stream, SOUT_CFG_PREFIX "vb" );
+    if( p_sys->i_vbitrate < 16000 )
+        p_sys->i_vbitrate *= 1000;
 
-    p_sys->i_shaping_delay = 500000;
-    if( ( val = sout_cfg_find_value( p_stream->p_cfg, "shaping" ) ) )
+    p_sys->i_shaping_delay = var_CreateGetInteger( p_stream,
+                                SOUT_CFG_PREFIX "shaping" ) * 1000;
+    if( p_sys->i_shaping_delay <= 0 )
     {
-        p_sys->i_shaping_delay = (int64_t)atoi( val ) * 1000;
-        if( p_sys->i_shaping_delay <= 0 )
-        {
-            msg_Err( p_stream,
-                     "invalid shaping (%"PRId64"ms) reseting to 500ms",
-                     p_sys->i_shaping_delay / 1000 );
-            p_sys->i_shaping_delay = 500000;
-        }
+        msg_Err( p_stream,
+                 "invalid shaping (%"PRId64"ms) reseting to 500ms",
+                 p_sys->i_shaping_delay / 1000 );
+        p_sys->i_shaping_delay = 500000;
     }
 
-    p_sys->b_mpeg4_matrix = 0;
-    if( sout_cfg_find( p_stream->p_cfg, "mpeg4-matrix" ) )
-    {
-        p_sys->b_mpeg4_matrix = 1;
-    }
+    p_sys->b_mpeg4_matrix = var_CreateGetBool( p_stream,
+                                               SOUT_CFG_PREFIX "mpeg4-matrix" );
 
     msg_Dbg( p_stream, "codec video %dkb/s max gop=%"PRId64"us",
              p_sys->i_vbitrate / 1024, p_sys->i_shaping_delay );
@@ -308,11 +319,11 @@ static int transrate_video_process( sout_stream_t *p_stream,
                 i_new_bitrate = (mtime_t)tr->i_current_output * 8000
                                     / (id->i_next_gop_duration / 1000);
                 if (i_new_bitrate > p_stream->p_sys->i_vbitrate + 300000)
-                    msg_Err(p_stream, "%lld -> %lld d=%lld",
+                    msg_Err(p_stream, "%"PRId64" -> %"PRId64" d=%"PRId64,
                             i_bitrate, i_new_bitrate,
                             id->i_next_gop_duration);
                 else
-                    msg_Dbg(p_stream, "%lld -> %lld d=%lld",
+                    msg_Dbg(p_stream, "%"PRId64" -> %"PRId64" d=%"PRId64,
                             i_bitrate, i_new_bitrate,
                             id->i_next_gop_duration);
             }
index 93110d6..642f26b 100644 (file)
@@ -162,13 +162,17 @@ static int Activate( vlc_object_t *p_this )
     es_format_Copy( &fmt, &p_filter->fmt_in );
 
     fmt.video.i_width = i_width;
-    fmt.video.i_height = ( p_filter->fmt_in.video.i_height * i_width )
-                         / p_filter->fmt_in.video.i_width;
+    fmt.video.i_height = ( p_filter->fmt_in.video.i_height * i_width *
+                         VOUT_ASPECT_FACTOR )
+                         / ( p_filter->fmt_in.video.i_width
+                           * p_filter->fmt_in.video.i_aspect );
     if( fmt.video.i_height > i_height )
     {
         fmt.video.i_height = i_height;
-        fmt.video.i_width = ( p_filter->fmt_in.video.i_width * i_height )
-                            / p_filter->fmt_in.video.i_height;
+        fmt.video.i_width = ( p_filter->fmt_in.video.i_width * i_height *
+                            p_filter->fmt_in.video.i_aspect )
+                            / ( p_filter->fmt_in.video.i_height *
+                              VOUT_ASPECT_FACTOR );
         if( fmt.video.i_width & 1 ) fmt.video.i_width -= 1;
         i_padd = i_width - fmt.video.i_width;
         /* Gruik */