]> git.sesse.net Git - x264/blobdiff - x264.c
Disable progress for FFMS input with --no-progress
[x264] / x264.c
diff --git a/x264.c b/x264.c
index 6f5cb6427118970fce711d89febe9869a64f236f..35695c2920fb0a8b867c718b43cf6e0c9be46668 100644 (file)
--- a/x264.c
+++ b/x264.c
  * For more information, contact us at licensing@x264.com.
  *****************************************************************************/
 
-#include <stdlib.h>
-#include <math.h>
-
 #include <signal.h>
 #define _GNU_SOURCE
 #include <getopt.h>
-
 #include "common/common.h"
 #include "x264cli.h"
 #include "input/input.h"
@@ -45,6 +41,7 @@
 #ifdef _WIN32
 #include <windows.h>
 #else
+#define GetConsoleTitle(t,n)
 #define SetConsoleTitle(t)
 #endif
 
@@ -73,6 +70,8 @@ static void sigint_handler( int a )
     b_ctrl_c = 1;
 }
 
+static char UNUSED originalCTitle[200] = "";
+
 typedef struct {
     int b_progress;
     int i_seek;
@@ -123,7 +122,8 @@ static const char * const muxer_names[] =
 static const char * const pulldown_names[] = { "none", "22", "32", "64", "double", "triple", "euro", 0 };
 static const char * const log_level_names[] = { "none", "error", "warning", "info", "debug", 0 };
 
-typedef struct{
+typedef struct
+{
     int mod;
     uint8_t pattern[24];
     float fps_factor;
@@ -226,10 +226,12 @@ static void print_version_info()
     printf( "(ffmpegsource %d.%d.%d.%d)\n", FFMS_VERSION >> 24, (FFMS_VERSION & 0xff0000) >> 16, (FFMS_VERSION & 0xff00) >> 8, FFMS_VERSION & 0xff );
 #endif
     printf( "built on " __DATE__ ", " );
-#ifdef __GNUC__
+#ifdef __INTEL_COMPILER
+    printf( "intel: %.2f (%d)\n", __INTEL_COMPILER / 100.f, __INTEL_COMPILER_BUILD_DATE );
+#elif defined(__GNUC__)
     printf( "gcc: " __VERSION__ "\n" );
 #else
-    printf( "using a non-gcc compiler\n" );
+    printf( "using an unknown compiler\n" );
 #endif
     printf( "configuration: --bit-depth=%d\n", x264_bit_depth );
     printf( "x264 license: " );
@@ -261,10 +263,15 @@ int main( int argc, char **argv )
     _setmode(_fileno(stdout), _O_BINARY);
 #endif
 
+    GetConsoleTitle( originalCTitle, sizeof(originalCTitle) );
+
     /* Parse command line */
     if( parse( argc, argv, &param, &opt ) < 0 )
         ret = -1;
 
+    /* Restore title; it can be changed by input modules */
+    SetConsoleTitle( originalCTitle );
+
     /* Control-C handler */
     signal( SIGINT, sigint_handler );
 
@@ -283,6 +290,8 @@ int main( int argc, char **argv )
     if( opt.qpfile )
         fclose( opt.qpfile );
 
+    SetConsoleTitle( originalCTitle );
+
     return ret;
 }
 
@@ -322,11 +331,11 @@ static void print_csp_names( int longhelp )
     printf( "\n" );
     printf( "                              - valid csps for `lavf' demuxer:\n" );
     printf( INDENT );
-    int line_len = strlen( INDENT );
+    size_t line_len = strlen( INDENT );
     for( enum PixelFormat i = PIX_FMT_NONE+1; i < PIX_FMT_NB; i++ )
     {
         const char *pfname = av_pix_fmt_descriptors[i].name;
-        int name_len = strlen( pfname );
+        size_t name_len = strlen( pfname );
         if( line_len + name_len > (80 - strlen( ", " )) )
         {
             printf( "\n" INDENT );
@@ -413,7 +422,7 @@ static void help( x264_param_t *defaults, int longhelp )
     H0( "\n" );
     H0( "Presets:\n" );
     H0( "\n" );
-    H0( "      --profile               Force the limits of an H.264 profile\n"
+    H0( "      --profile <string>      Force the limits of an H.264 profile\n"
         "                                  Overrides all settings.\n" );
     H2( "                                  - baseline:\n"
         "                                    --no-8x8dct --bframes 0 --no-cabac\n"
@@ -429,7 +438,7 @@ static void help( x264_param_t *defaults, int longhelp )
         "                                    No lossless.\n"
         "                                    Support for bit depth 8-10.\n" );
         else H0( "                                  - baseline,main,high,high10\n" );
-    H0( "      --preset                Use a preset to select encoding settings [medium]\n"
+    H0( "      --preset <string>       Use a preset to select encoding settings [medium]\n"
         "                                  Overridden by user settings.\n" );
     H2( "                                  - ultrafast:\n"
         "                                    --no-8x8dct --aq-mode 0 --b-adapt 0\n"
@@ -473,7 +482,7 @@ static void help( x264_param_t *defaults, int longhelp )
         "                                    --trellis 2\n" );
     else H0( "                                  - ultrafast,superfast,veryfast,faster,fast\n"
              "                                  - medium,slow,slower,veryslow,placebo\n" );
-    H0( "      --tune                  Tune the settings for a particular type of source\n"
+    H0( "      --tune <string>         Tune the settings for a particular type of source\n"
         "                              or situation\n"
         "                                  Overridden by user settings.\n"
         "                                  Multiple tunings are separated by commas.\n"
@@ -646,7 +655,7 @@ static void help( x264_param_t *defaults, int longhelp )
         "                                  - 9: RD refinement for all frames\n"
         "                                  - 10: QP-RD - requires trellis=2, aq-mode>0\n" );
     else H1( "                                  decision quality: 1=fast, 10=best.\n"  );
-    H1( "      --psy-rd                Strength of psychovisual optimization [\"%.1f:%.1f\"]\n"
+    H1( "      --psy-rd <float:float>  Strength of psychovisual optimization [\"%.1f:%.1f\"]\n"
         "                                  #1: RD (requires subme>=6)\n"
         "                                  #2: Trellis (requires trellis, experimental)\n",
                                        defaults->analyse.f_psy_rd, defaults->analyse.f_psy_trellis );
@@ -674,9 +683,9 @@ static void help( x264_param_t *defaults, int longhelp )
         "                                  Takes a comma-separated list of 16 integers.\n" );
     H2( "      --cqm8 <list>           Set all 8x8 quant matrices\n"
         "                                  Takes a comma-separated list of 64 integers.\n" );
-    H2( "      --cqm4i, --cqm4p, --cqm8i, --cqm8p\n"
+    H2( "      --cqm4i, --cqm4p, --cqm8i, --cqm8p <list>\n"
         "                              Set both luma and chroma quant matrices\n" );
-    H2( "      --cqm4iy, --cqm4ic, --cqm4py, --cqm4pc\n"
+    H2( "      --cqm4iy, --cqm4ic, --cqm4py, --cqm4pc <list>\n"
         "                              Set individual quant matrices\n" );
     H2( "\n" );
     H2( "Video Usability Info (Annex E):\n" );
@@ -716,7 +725,7 @@ static void help( x264_param_t *defaults, int longhelp )
     H0( "\n" );
     H0( "Input/Output:\n" );
     H0( "\n" );
-    H0( "  -o, --output                Specify output file\n" );
+    H0( "  -o, --output <string>       Specify output file\n" );
     H1( "      --muxer <string>        Specify output container format [\"%s\"]\n"
         "                                  - %s\n", muxer_names[0], stringify_names( buf, muxer_names ) );
     H1( "      --demuxer <string>      Specify input container format [\"%s\"]\n"
@@ -1392,6 +1401,8 @@ generic_option:
     info.tff        = param->b_tff;
     info.vfr        = param->b_vfr_input;
 
+    input_opt.progress = opt->b_progress;
+
     if( select_input( demuxer, demuxername, input_filename, &opt->hin, &info, &input_opt ) )
         return -1;
 
@@ -1573,10 +1584,13 @@ static int encode_frame( x264_t *h, hnd_t hout, x264_picture_t *pic, int64_t *la
     return i_frame_size;
 }
 
-static void print_status( int64_t i_start, int i_frame, int i_frame_total, int64_t i_file, x264_param_t *param, int64_t last_ts )
+static int64_t print_status( int64_t i_start, int64_t i_previous, int i_frame, int i_frame_total, int64_t i_file, x264_param_t *param, int64_t last_ts )
 {
     char buf[200];
-    int64_t i_elapsed = x264_mdate() - i_start;
+    int64_t i_time = x264_mdate();
+    if( i_previous && i_time - i_previous < UPDATE_INTERVAL )
+        return i_previous;
+    int64_t i_elapsed = i_time - i_start;
     double fps = i_elapsed > 0 ? i_frame * 1000000. / i_elapsed : 0;
     double bitrate;
     if( last_ts )
@@ -1597,6 +1611,7 @@ static void print_status( int64_t i_start, int i_frame, int i_frame_total, int64
     fprintf( stderr, "%s  \r", buf+5 );
     SetConsoleTitle( buf );
     fflush( stderr ); // needed in windows
+    return i_time;
 }
 
 static void convert_cli_to_lib_pic( x264_picture_t *lib, cli_pic_t *cli )
@@ -1625,10 +1640,9 @@ static int encode( x264_param_t *param, cli_opt_t *opt )
 
     int     i_frame = 0;
     int     i_frame_output = 0;
-    int64_t i_end, i_start = 0;
+    int64_t i_end, i_previous = 0, i_start = 0;
     int64_t i_file = 0;
     int     i_frame_size;
-    int     i_update_interval;
     int64_t last_dts = 0;
     int64_t prev_dts = 0;
     int64_t first_dts = 0;
@@ -1642,7 +1656,6 @@ static int encode( x264_param_t *param, cli_opt_t *opt )
     int     retval = 0;
 
     opt->b_progress &= param->i_log_level < X264_LOG_DEBUG;
-    i_update_interval = param->i_frame_total ? x264_clip3( param->i_frame_total / 1000, 1, 10 ) : 10;
 
     /* set up pulldown */
     if( opt->i_pulldown && !param->b_vfr_input )
@@ -1664,6 +1677,7 @@ static int encode( x264_param_t *param, cli_opt_t *opt )
     FAIL_IF_ERROR2( output.set_param( opt->hout, param ), "can't set outfile param\n" );
 
     i_start = x264_mdate();
+
     /* ticks/frame = ticks/second / frames/second */
     ticks_per_frame = (int64_t)param->i_timebase_den * param->i_fps_den / param->i_timebase_num / param->i_fps_num;
     FAIL_IF_ERROR2( ticks_per_frame < 1 && !param->b_vfr_input, "ticks_per_frame invalid: %"PRId64"\n", ticks_per_frame )
@@ -1740,8 +1754,8 @@ static int encode( x264_param_t *param, cli_opt_t *opt )
             break;
 
         /* update status line (up to 1000 times per input file) */
-        if( opt->b_progress && i_frame_output % i_update_interval == 0 && i_frame_output )
-            print_status( i_start, i_frame_output, param->i_frame_total, i_file, param, 2 * last_dts - prev_dts - first_dts );
+        if( opt->b_progress && i_frame_output )
+            i_previous = print_status( i_start, i_previous, i_frame_output, param->i_frame_total, i_file, param, 2 * last_dts - prev_dts - first_dts );
     }
     /* Flush delayed frames */
     while( !b_ctrl_c && x264_encoder_delayed_frames( h ) )
@@ -1760,8 +1774,8 @@ static int encode( x264_param_t *param, cli_opt_t *opt )
             if( i_frame_output == 1 )
                 first_dts = prev_dts = last_dts;
         }
-        if( opt->b_progress && i_frame_output % i_update_interval == 0 && i_frame_output )
-            print_status( i_start, i_frame_output, param->i_frame_total, i_file, param, 2 * last_dts - prev_dts - first_dts );
+        if( opt->b_progress && i_frame_output )
+            i_previous = print_status( i_start, i_previous, i_frame_output, param->i_frame_total, i_file, param, 2 * last_dts - prev_dts - first_dts );
     }
 fail:
     if( pts_warning_cnt >= MAX_PTS_WARNING && cli_log_level < X264_LOG_DEBUG )