⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x264.c

📁 linux下编译已经通过
💻 C
📖 第 1 页 / 共 3 页
字号:
/***************************************************************************** * x264: h264 encoder testing program. ***************************************************************************** * Copyright (C) 2003 Laurent Aimar * $Id: x264.c,v 1.1 2004/06/03 19:24:12 fenrir Exp $ * * Authors: Laurent Aimar <fenrir@via.ecp.fr> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA. *****************************************************************************/#include <stdlib.h>#include <math.h>#include <signal.h>#define _GNU_SOURCE#include <getopt.h>#include "common/common.h"#include "x264.h"#include "muxers.h"#ifndef _MSC_VER#include "config.h"#endifuint8_t *mux_buffer = NULL;int mux_buffer_size = 0;/* Ctrl-C handler */static int     b_ctrl_c = 0;static int     b_exit_on_ctrl_c = 0;static void    SigIntHandler( int a ){    if( b_exit_on_ctrl_c )        exit(0);    b_ctrl_c = 1;}typedef struct {    int b_progress;    int i_seek;    hnd_t hin;    hnd_t hout;    FILE *qpfile;} cli_opt_t;/* input file operation function pointers */int (*p_open_infile)( char *psz_filename, hnd_t *p_handle, x264_param_t *p_param );int (*p_get_frame_total)( hnd_t handle );int (*p_read_frame)( x264_picture_t *p_pic, hnd_t handle, int i_frame );int (*p_close_infile)( hnd_t handle );/* output file operation function pointers */static int (*p_open_outfile)( char *psz_filename, hnd_t *p_handle );static int (*p_set_outfile_param)( hnd_t handle, x264_param_t *p_param );static int (*p_write_nalu)( hnd_t handle, uint8_t *p_nal, int i_size );static int (*p_set_eop)( hnd_t handle, x264_picture_t *p_picture );static int (*p_close_outfile)( hnd_t handle );static void Help( x264_param_t *defaults, int b_longhelp );static int  Parse( int argc, char **argv, x264_param_t *param, cli_opt_t *opt );static int  Encode( x264_param_t *param, cli_opt_t *opt );/**************************************************************************** * main: ****************************************************************************/int main( int argc, char **argv ){    x264_param_t param;    cli_opt_t opt;    int ret;#ifdef PTW32_STATIC_LIB    pthread_win32_process_attach_np();    pthread_win32_thread_attach_np();#endif#ifdef _MSC_VER    _setmode(_fileno(stdin), _O_BINARY);    _setmode(_fileno(stdout), _O_BINARY);#endif    x264_param_default( &param );    /* Parse command line */    if( Parse( argc, argv, &param, &opt ) < 0 )        return -1;    /* Control-C handler */    signal( SIGINT, SigIntHandler );    ret = Encode( &param, &opt );#ifdef PTW32_STATIC_LIB    pthread_win32_thread_detach_np();    pthread_win32_process_detach_np();#endif    return ret;}static char const *strtable_lookup( const char * const table[], int index ){    int i = 0; while( table[i] ) i++;    return ( ( index >= 0 && index < i ) ? table[ index ] : "???" );}/***************************************************************************** * Help: *****************************************************************************/static void Help( x264_param_t *defaults, int b_longhelp ){#define H0 printf#define H1 if(b_longhelp) printf    H0( "x264 core:%d%s\n"        "Syntax: x264 [options] -o outfile infile [widthxheight]\n"        "\n"        "Infile can be raw YUV 4:2:0 (in which case resolution is required),\n"        "  or YUV4MPEG 4:2:0 (*.y4m),\n"        "  or AVI or Avisynth if compiled with AVIS support (%s).\n"        "Outfile type is selected by filename:\n"        " .264 -> Raw bytestream\n"        " .mkv -> Matroska\n"        " .mp4 -> MP4 if compiled with GPAC support (%s)\n"        "\n"        "Options:\n"        "\n"        "  -h, --help                  List the more commonly used options\n"        "      --longhelp              List all options\n"        "\n",        X264_BUILD, X264_VERSION,#ifdef AVIS_INPUT        "yes",#else        "no",#endif#ifdef MP4_OUTPUT        "yes"#else        "no"#endif      );    H0( "Frame-type options:\n" );    H0( "\n" );    H0( "  -I, --keyint <integer>      Maximum GOP size [%d]\n", defaults->i_keyint_max );    H1( "  -i, --min-keyint <integer>  Minimum GOP size [%d]\n", defaults->i_keyint_min );    H1( "      --scenecut <integer>    How aggressively to insert extra I-frames [%d]\n", defaults->i_scenecut_threshold );    H1( "      --pre-scenecut          Faster, less precise scenecut detection.\n"        "                                  Required and implied by multi-threading.\n" );    H0( "  -b, --bframes <integer>     Number of B-frames between I and P [%d]\n", defaults->i_bframe );    H1( "      --no-b-adapt            Disable adaptive B-frame decision\n" );    H1( "      --b-bias <integer>      Influences how often B-frames are used [%d]\n", defaults->i_bframe_bias );    H0( "      --b-pyramid             Keep some B-frames as references\n" );    H0( "      --no-cabac              Disable CABAC\n" );    H0( "  -r, --ref <integer>         Number of reference frames [%d]\n", defaults->i_frame_reference );    H1( "      --no-deblock            Disable loop filter\n" );    H0( "  -f, --deblock <alpha:beta>  Loop filter AlphaC0 and Beta parameters [%d:%d]\n",                                       defaults->i_deblocking_filter_alphac0, defaults->i_deblocking_filter_beta );    H0( "      --interlaced            Enable pure-interlaced mode\n" );    H0( "\n" );    H0( "Ratecontrol:\n" );    H0( "\n" );    H0( "  -q, --qp <integer>          Set QP (0=lossless) [%d]\n", defaults->rc.i_qp_constant );    H0( "  -B, --bitrate <integer>     Set bitrate (kbit/s)\n" );    H0( "      --crf <float>           Quality-based VBR (nominal QP)\n" );    H1( "      --vbv-maxrate <integer> Max local bitrate (kbit/s) [%d]\n", defaults->rc.i_vbv_max_bitrate );    H0( "      --vbv-bufsize <integer> Enable CBR and set size of the VBV buffer (kbit) [%d]\n", defaults->rc.i_vbv_buffer_size );    H1( "      --vbv-init <float>      Initial VBV buffer occupancy [%.1f]\n", defaults->rc.f_vbv_buffer_init );    H1( "      --qpmin <integer>       Set min QP [%d]\n", defaults->rc.i_qp_min );    H1( "      --qpmax <integer>       Set max QP [%d]\n", defaults->rc.i_qp_max );    H1( "      --qpstep <integer>      Set max QP step [%d]\n", defaults->rc.i_qp_step );    H0( "      --ratetol <float>       Allowed variance of average bitrate [%.1f]\n", defaults->rc.f_rate_tolerance );    H0( "      --ipratio <float>       QP factor between I and P [%.2f]\n", defaults->rc.f_ip_factor );    H0( "      --pbratio <float>       QP factor between P and B [%.2f]\n", defaults->rc.f_pb_factor );    H1( "      --chroma-qp-offset <integer>  QP difference between chroma and luma [%d]\n", defaults->analyse.i_chroma_qp_offset );    H0( "\n" );    H0( "  -p, --pass <1|2|3>          Enable multipass ratecontrol\n"        "                                  - 1: First pass, creates stats file\n"        "                                  - 2: Last pass, does not overwrite stats file\n"        "                                  - 3: Nth pass, overwrites stats file\n" );    H0( "      --stats <string>        Filename for 2 pass stats [\"%s\"]\n", defaults->rc.psz_stat_out );    H1( "      --rceq <string>         Ratecontrol equation [\"%s\"]\n", defaults->rc.psz_rc_eq );    H0( "      --qcomp <float>         QP curve compression: 0.0 => CBR, 1.0 => CQP [%.2f]\n", defaults->rc.f_qcompress );    H1( "      --cplxblur <float>      Reduce fluctuations in QP (before curve compression) [%.1f]\n", defaults->rc.f_complexity_blur );    H1( "      --qblur <float>         Reduce fluctuations in QP (after curve compression) [%.1f]\n", defaults->rc.f_qblur );    H0( "      --zones <zone0>/<zone1>/...  Tweak the bitrate of some regions of the video\n" );    H1( "                              Each zone is of the form\n"        "                                  <start frame>,<end frame>,<option>\n"        "                                  where <option> is either\n"        "                                      q=<integer> (force QP)\n"        "                                  or  b=<float> (bitrate multiplier)\n" );    H1( "      --qpfile <string>       Force frametypes and QPs\n" );    H0( "\n" );    H0( "Analysis:\n" );    H0( "\n" );    H0( "  -A, --partitions <string>   Partitions to consider [\"p8x8,b8x8,i8x8,i4x4\"]\n"        "                                  - p8x8, p4x4, b8x8, i8x8, i4x4\n"        "                                  - none, all\n"        "                                  (p4x4 requires p8x8. i8x8 requires --8x8dct.)\n" );    H0( "      --direct <string>       Direct MV prediction mode [\"%s\"]\n"        "                                  - none, spatial, temporal, auto\n",                                       strtable_lookup( x264_direct_pred_names, defaults->analyse.i_direct_mv_pred ) );    H1( "      --direct-8x8 <-1|0|1>   Direct prediction size [%d]\n"        "                                  -  0: 4x4\n"        "                                  -  1: 8x8\n"        "                                  - -1: smallest possible according to level\n",                                       defaults->analyse.i_direct_8x8_inference );    H0( "  -w, --weightb               Weighted prediction for B-frames\n" );    H0( "      --me <string>           Integer pixel motion estimation method [\"%s\"]\n",                                       strtable_lookup( x264_motion_est_names, defaults->analyse.i_me_method ) );    H1( "                                  - dia: diamond search, radius 1 (fast)\n"        "                                  - hex: hexagonal search, radius 2\n"        "                                  - umh: uneven multi-hexagon search\n"        "                                  - esa: exhaustive search (slow)\n" );    else H0( "                                  - dia, hex, umh\n" );    H0( "      --merange <integer>     Maximum motion vector search range [%d]\n", defaults->analyse.i_me_range );    H1( "      --mvrange <integer>     Maximum motion vector length [-1 (auto)]\n" );    H1( "      --mvrange-thread <int>  Minimum buffer between threads [-1 (auto)]\n" );    H0( "  -m, --subme <integer>       Subpixel motion estimation and partition\n"        "                                  decision quality: 1=fast, 7=best. [%d]\n", defaults->analyse.i_subpel_refine );    H0( "      --b-rdo                 RD based mode decision for B-frames. Requires subme 6.\n" );    H0( "      --mixed-refs            Decide references on a per partition basis\n" );    H1( "      --no-chroma-me          Ignore chroma in motion estimation\n" );    H1( "      --bime                  Jointly optimize both MVs in B-frames\n" );    H0( "  -8, --8x8dct                Adaptive spatial transform size\n" );    H0( "  -t, --trellis <integer>     Trellis RD quantization. Requires CABAC. [%d]\n"        "                                  - 0: disabled\n"        "                                  - 1: enabled only on the final encode of a MB\n"        "                                  - 2: enabled on all mode decisions\n", defaults->analyse.i_trellis );    H0( "      --no-fast-pskip         Disables early SKIP detection on P-frames\n" );    H0( "      --no-dct-decimate       Disables coefficient thresholding on P-frames\n" );    H0( "      --nr <integer>          Noise reduction [%d]\n", defaults->analyse.i_noise_reduction );    H1( "\n" );    H1( "      --deadzone-inter <int>  Set the size of the inter luma quantization deadzone [%d]\n", defaults->analyse.i_luma_deadzone[0] );    H1( "      --deadzone-intra <int>  Set the size of the intra luma quantization deadzone [%d]\n", defaults->analyse.i_luma_deadzone[1] );    H1( "                                  Deadzones should be in the range 0 - 32.\n" );    H1( "      --cqm <string>          Preset quant matrices [\"flat\"]\n"        "                                  - jvt, flat\n" );    H0( "      --cqmfile <string>      Read custom quant matrices from a JM-compatible file\n" );    H1( "                                  Overrides any other --cqm* options.\n" );    H1( "      --cqm4 <list>           Set all 4x4 quant matrices\n"        "                                  Takes a comma-separated list of 16 integers.\n" );    H1( "      --cqm8 <list>           Set all 8x8 quant matrices\n"        "                                  Takes a comma-separated list of 64 integers.\n" );    H1( "      --cqm4i, --cqm4p, --cqm8i, --cqm8p\n"        "                              Set both luma and chroma quant matrices\n" );    H1( "      --cqm4iy, --cqm4ic, --cqm4py, --cqm4pc\n"        "                              Set individual quant matrices\n" );    H1( "\n" );    H1( "Video Usability Info (Annex E):\n" );    H1( "The VUI settings are not used by the encoder but are merely suggestions to\n" );    H1( "the playback equipment. See doc/vui.txt for details. Use at your own risk.\n" );    H1( "\n" );    H1( "      --overscan <string>     Specify crop overscan setting [\"%s\"]\n"        "                                  - undef, show, crop\n",                                       strtable_lookup( x264_overscan_names, defaults->vui.i_overscan ) );    H1( "      --videoformat <string>  Specify video format [\"%s\"]\n"        "                                  - component, pal, ntsc, secam, mac, undef\n",                                       strtable_lookup( x264_vidformat_names, defaults->vui.i_vidformat ) );    H1( "      --fullrange <string>    Specify full range samples setting [\"%s\"]\n"        "                                  - off, on\n",                                       strtable_lookup( x264_fullrange_names, defaults->vui.b_fullrange ) );    H1( "      --colorprim <string>    Specify color primaries [\"%s\"]\n"        "                                  - undef, bt709, bt470m, bt470bg\n"        "                                    smpte170m, smpte240m, film\n",                                       strtable_lookup( x264_colorprim_names, defaults->vui.i_colorprim ) );    H1( "      --transfer <string>     Specify transfer characteristics [\"%s\"]\n"        "                                  - undef, bt709, bt470m, bt470bg, linear,\n"        "                                    log100, log316, smpte170m, smpte240m\n",                                       strtable_lookup( x264_transfer_names, defaults->vui.i_transfer ) );    H1( "      --colormatrix <string>  Specify color matrix setting [\"%s\"]\n"        "                                  - undef, bt709, fcc, bt470bg\n"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -