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

📄 x264.c

📁 uclinux 下的vlc播放器源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
    add_integer( SOUT_CFG_PREFIX "qp", 26, NULL, QP_TEXT, QP_LONGTEXT,                 VLC_FALSE );        change_integer_range( 0, 51 ); /* QP 0 -> lossless encoding */#if X264_BUILD >= 37 /* r334 */    add_integer( SOUT_CFG_PREFIX "crf", 0, NULL, CRF_TEXT,                 CRF_LONGTEXT, VLC_FALSE );        change_integer_range( 0, 51 );#endif    add_integer( SOUT_CFG_PREFIX "qpmin", 10, NULL, QPMIN_TEXT,                 QPMIN_LONGTEXT, VLC_FALSE );        change_integer_range( 0, 51 );    	add_deprecated( SOUT_CFG_PREFIX "qp-min", VLC_FALSE ); /* Deprecated since 0.8.5 */    add_integer( SOUT_CFG_PREFIX "qpmax", 51, NULL, QPMAX_TEXT,                 QPMAX_LONGTEXT, VLC_FALSE );        change_integer_range( 0, 51 );    	add_deprecated( SOUT_CFG_PREFIX "qp-max", VLC_FALSE ); /* Deprecated since 0.8.5 */    add_integer( SOUT_CFG_PREFIX "qpstep", 4, NULL, QPSTEP_TEXT,                 QPSTEP_LONGTEXT, VLC_FALSE );        change_integer_range( 0, 51 );    add_float( SOUT_CFG_PREFIX "ratetol", 1.0, NULL, RATETOL_TEXT,               RATETOL_LONGTEXT, VLC_FALSE );        change_float_range( 0, 100 );    	add_deprecated( SOUT_CFG_PREFIX "tolerance", VLC_FALSE ); /* Deprecated since 0.8.5 */    add_integer( SOUT_CFG_PREFIX "vbv-maxrate", 0, NULL, VBV_MAXRATE_TEXT,                 VBV_MAXRATE_LONGTEXT, VLC_FALSE );    add_integer( SOUT_CFG_PREFIX "vbv-bufsize", 0, NULL, VBV_BUFSIZE_TEXT,                 VBV_BUFSIZE_LONGTEXT, VLC_FALSE );    add_float( SOUT_CFG_PREFIX "vbv-init", 0.9, NULL, VBV_INIT_TEXT,               VBV_INIT_LONGTEXT, VLC_FALSE );        change_float_range( 0, 1 );    add_float( SOUT_CFG_PREFIX "ipratio", 1.40, NULL, IPRATIO_TEXT,               IPRATIO_LONGTEXT, VLC_FALSE );        change_float_range( 1, 2 );    add_float( SOUT_CFG_PREFIX "pbratio", 1.30, NULL, PBRATIO_TEXT,               PBRATIO_LONGTEXT, VLC_FALSE );        change_float_range( 1, 2 );#if X264_BUILD >= 23 /* r190 */    add_integer( SOUT_CFG_PREFIX "chroma-qp-offset", 0, NULL, CHROMA_QP_OFFSET_TEXT,                 CHROMA_QP_OFFSET_LONGTEXT, VLC_FALSE );#endif    add_float( SOUT_CFG_PREFIX "qcomp", 0.60, NULL, QCOMP_TEXT,               QCOMP_LONGTEXT, VLC_FALSE );        change_float_range( 0, 1 );    add_float( SOUT_CFG_PREFIX "cplxblur", 20.0, NULL, CPLXBLUR_TEXT,               CPLXBLUR_LONGTEXT, VLC_FALSE );    add_float( SOUT_CFG_PREFIX "qblur", 0.5, NULL, QBLUR_TEXT,               QBLUR_LONGTEXT, VLC_FALSE );/* Analysis */    /* x264 partitions = none (default). set at least "normal" mode. */    add_string( SOUT_CFG_PREFIX "partitions", "normal", NULL, ANALYSE_TEXT,                ANALYSE_LONGTEXT, VLC_FALSE );        change_string_list( enc_analyse_list, enc_analyse_list_text, 0 );    	add_deprecated( SOUT_CFG_PREFIX "analyse", VLC_FALSE ); /* Deprecated since 0.8.6 */    add_string( SOUT_CFG_PREFIX "direct", "spatial", NULL, DIRECT_PRED_TEXT,                DIRECT_PRED_LONGTEXT, VLC_FALSE );        change_string_list( direct_pred_list, direct_pred_list_text, 0 );#if X264_BUILD >= 52 /* r573 */    add_integer( SOUT_CFG_PREFIX "direct-8x8", 0, NULL, DIRECT_PRED_SIZE_TEXT,                 DIRECT_PRED_SIZE_LONGTEXT, VLC_FALSE );        change_integer_range( -1, 1 );#endif#if X264_BUILD >= 0x0012 /* r134 */    add_bool( SOUT_CFG_PREFIX "weightb", 0, NULL, WEIGHTB_TEXT,              WEIGHTB_LONGTEXT, VLC_FALSE );#endif#if X264_BUILD >= 24 /* r221 */    add_string( SOUT_CFG_PREFIX "me", "hex", NULL, ME_TEXT,                ME_LONGTEXT, VLC_FALSE );        change_string_list( enc_me_list, enc_me_list_text, 0 );    add_integer( SOUT_CFG_PREFIX "merange", 16, NULL, MERANGE_TEXT,                 MERANGE_LONGTEXT, VLC_FALSE );        change_integer_range( 1, 64 );#endif    add_integer( SOUT_CFG_PREFIX "subme", 5, NULL, SUBME_TEXT,                 SUBME_LONGTEXT, VLC_FALSE );        change_integer_range( 1, SUBME_MAX );    	add_deprecated( SOUT_CFG_PREFIX "subpel", VLC_FALSE ); /* Deprecated since 0.8.5 */#if X264_BUILD >= 41 /* r368 */    add_bool( SOUT_CFG_PREFIX "b-rdo", 0, NULL, B_RDO_TEXT,              B_RDO_LONGTEXT, VLC_FALSE );#endif#if X264_BUILD >= 36 /* r318 */    add_bool( SOUT_CFG_PREFIX "mixed-refs", 0, NULL, MIXED_REFS_TEXT,              MIXED_REFS_LONGTEXT, VLC_FALSE );#endif#if X264_BUILD >= 23 /* r171 */    add_bool( SOUT_CFG_PREFIX "chroma-me", 1, NULL, CHROMA_ME_TEXT,              CHROMA_ME_LONGTEXT, VLC_FALSE );#endif#if X264_BUILD >= 43 /* r390 */    add_bool( SOUT_CFG_PREFIX "bime", 0, NULL, BIME_TEXT,              BIME_LONGTEXT, VLC_FALSE );#endif#if X264_BUILD >= 30 /* r251 */    add_bool( SOUT_CFG_PREFIX "8x8dct", 0, NULL, TRANSFORM_8X8DCT_TEXT,              TRANSFORM_8X8DCT_LONGTEXT, VLC_FALSE );#endif#if X264_BUILD >= 39 /* r360 */    add_integer( SOUT_CFG_PREFIX "trellis", 0, NULL, TRELLIS_TEXT,                 TRELLIS_LONGTEXT, VLC_FALSE );        change_integer_range( 0, 2 );#endif#if X264_BUILD >= 42 /* r384 */    add_bool( SOUT_CFG_PREFIX "fast-pskip", 1, NULL, FAST_PSKIP_TEXT,              FAST_PSKIP_LONGTEXT, VLC_FALSE );#endif#if X264_BUILD >= 46 /* r503 */    add_bool( SOUT_CFG_PREFIX "dct-decimate", 1, NULL, DCT_DECIMATE_TEXT,              DCT_DECIMATE_LONGTEXT, VLC_FALSE );#endif#if X264_BUILD >= 44 /* r398 */    add_integer( SOUT_CFG_PREFIX "nr", 0, NULL, NR_TEXT,                 NR_LONGTEXT, VLC_FALSE );        change_integer_range( 0, 1000 );#endif#if X264_BUILD >= 52 /* r573 */    add_integer( SOUT_CFG_PREFIX "deadzone-inter", 21, NULL, DEADZONE_INTER_TEXT,                 DEADZONE_INTRA_LONGTEXT, VLC_FALSE );        change_integer_range( 0, 32 );    add_integer( SOUT_CFG_PREFIX "deadzone-intra", 11, NULL, DEADZONE_INTRA_TEXT,                 DEADZONE_INTRA_LONGTEXT, VLC_FALSE );        change_integer_range( 0, 32 );#endif/* Input/Output */    add_bool( SOUT_CFG_PREFIX "asm", 1, NULL, ASM_TEXT,              ASM_LONGTEXT, VLC_FALSE );    /* x264 psnr = 1 (default). disable PSNR computation for speed. */    add_bool( SOUT_CFG_PREFIX "psnr", 0, NULL, PSNR_TEXT,              PSNR_LONGTEXT, VLC_FALSE );#if X264_BUILD >= 50 /* r554 */    /* x264 ssim = 1 (default). disable SSIM computation for speed. */    add_bool( SOUT_CFG_PREFIX "ssim", 0, NULL, SSIM_TEXT,              SSIM_LONGTEXT, VLC_FALSE );#endif    add_bool( SOUT_CFG_PREFIX "quiet", 0, NULL, QUIET_TEXT,              QUIET_LONGTEXT, VLC_FALSE );#if X264_BUILD >= 47 /* r518 */    add_integer( SOUT_CFG_PREFIX "sps-id", 0, NULL, SPS_ID_TEXT,                 SPS_ID_LONGTEXT, VLC_FALSE );#endif    add_bool( SOUT_CFG_PREFIX "aud", 0, NULL, AUD_TEXT,              AUD_LONGTEXT, VLC_FALSE );#if X264_BUILD >= 0x000e /* r81 */    add_bool( SOUT_CFG_PREFIX "verbose", 0, NULL, VERBOSE_TEXT,              VERBOSE_LONGTEXT, VLC_FALSE );#endifvlc_module_end();/***************************************************************************** * Local prototypes *****************************************************************************/static const char *ppsz_sout_options[] = {    "8x8dct", "analyse", "asm", "aud", "bframes", "bime", "bpyramid",    "b-adapt", "b-bias", "b-rdo", "cabac", "chroma-me", "chroma-qp-offset",    "cplxblur", "crf", "dct-decimate", "deadzone-inter", "deadzone-intra",    "deblock", "direct", "direct-8x8", "filter", "fast-pskip", "frameref",    "interlaced", "ipratio", "keyint", "keyint-min", "level", "loopfilter",    "me", "merange", "min-keyint", "mixed-refs", "nf", "nr", "partitions",    "pbratio", "psnr", "qblur", "qp", "qcomp", "qpstep", "qpmax", "qpmin",    "qp-max", "qp-min", "quiet", "ratetol", "ref", "scenecut", "sps-id",    "ssim", "subme", "subpel", "tolerance", "trellis", "verbose",    "vbv-bufsize", "vbv-init", "vbv-maxrate", "weightb", NULL};static block_t *Encode( encoder_t *, picture_t * );struct encoder_sys_t{    x264_t          *h;    x264_param_t    param;    int             i_buffer;    uint8_t         *p_buffer;    mtime_t         i_last_ref_pts;};/***************************************************************************** * Open: probe the encoder *****************************************************************************/static int  Open ( vlc_object_t *p_this ){    encoder_t     *p_enc = (encoder_t *)p_this;    encoder_sys_t *p_sys;    vlc_value_t    val;    int i_qmin = 0, i_qmax = 0;    x264_nal_t    *nal;    int i, i_nal;    if( p_enc->fmt_out.i_codec != VLC_FOURCC( 'h', '2', '6', '4' ) &&        !p_enc->b_force )    {        return VLC_EGENERIC;    }#if X264_BUILD < 37    if( p_enc->fmt_in.video.i_width % 16 != 0 ||        p_enc->fmt_in.video.i_height % 16 != 0 )    {        msg_Warn( p_enc, "size is not a multiple of 16 (%ix%i)",                  p_enc->fmt_in.video.i_width, p_enc->fmt_in.video.i_height );        if( p_enc->fmt_in.video.i_width < 16 ||            p_enc->fmt_in.video.i_height < 16 )        {            msg_Err( p_enc, "video is too small to be cropped" );            return VLC_EGENERIC;        }        msg_Warn( p_enc, "cropping video to %ix%i",                  p_enc->fmt_in.video.i_width >> 4 << 4,                  p_enc->fmt_in.video.i_height >> 4 << 4 );    }#endif    sout_CfgParse( p_enc, SOUT_CFG_PREFIX, ppsz_sout_options, p_enc->p_cfg );    p_enc->fmt_out.i_codec = VLC_FOURCC( 'h', '2', '6', '4' );    p_enc->fmt_in.i_codec = VLC_FOURCC('I','4','2','0');    p_enc->pf_encode_video = Encode;    p_enc->pf_encode_audio = NULL;    p_enc->p_sys = p_sys = malloc( sizeof( encoder_sys_t ) );    p_sys->i_last_ref_pts = 0;    x264_param_default( &p_sys->param );    p_sys->param.i_width  = p_enc->fmt_in.video.i_width;    p_sys->param.i_height = p_enc->fmt_in.video.i_height;#if X264_BUILD < 37    p_sys->param.i_width  = p_sys->param.i_width >> 4 << 4;    p_sys->param.i_height = p_sys->param.i_height >> 4 << 4;#endif    /* average bitrate specified by transcode vb */    p_sys->param.rc.i_bitrate = p_enc->fmt_out.i_bitrate / 1000;#if X264_BUILD < 48    /* cbr = 1 overrides qp or crf and sets an average bitrate       but maxrate = average bitrate is needed for "real" CBR */    if( p_sys->param.rc.i_bitrate > 0 ) p_sys->param.rc.b_cbr = 1;#else    if( p_sys->param.rc.i_bitrate > 0 ) p_sys->param.rc.i_rc_method = X264_RC_ABR;#endif    var_Get( p_enc, SOUT_CFG_PREFIX "qpstep", &val );    if( val.i_int >= 0 && val.i_int <= 51 ) p_sys->param.rc.i_qp_step = val.i_int;    var_Get( p_enc, SOUT_CFG_PREFIX "qpmin", &val );    if( val.i_int >= 0 && val.i_int <= 51 ) i_qmin = val.i_int;    var_Get( p_enc, SOUT_CFG_PREFIX "qpmax", &val );    if( val.i_int >= 0 && val.i_int <= 51 ) i_qmax = val.i_int;    var_Get( p_enc, SOUT_CFG_PREFIX "qp", &val );    if( val.i_int >= 0 && val.i_int <= 51 )    {        if( i_qmin > val.i_int ) i_qmin = val.i_int;        if( i_qmax < val.i_int ) i_qmax = val.i_int;#if X264_BUILD >= 0x000a        p_sys->param.rc.i_qp_constant = val.i_int;        p_sys->param.rc.i_qp_min = i_qmin;        p_sys->param.rc.i_qp_max = i_qmax;#else        p_sys->param.i_qp_constant = val.i_int;#endif    }#if X264_BUILD >= 24    var_Get( p_enc, SOUT_CFG_PREFIX "ratetol", &val );    p_sys->param.rc.f_rate_tolerance = val.f_float;    var_Get( p_enc, SOUT_CFG_PREFIX "vbv-init", &val );    p_sys->param.rc.f_vbv_buffer_init = val.f_float;    var_Get( p_enc, SOUT_CFG_PREFIX "vbv-bufsize", &val );    p_sys->param.rc.i_vbv_buffer_size = val.i_int;    /* x264 vbv-bufsize = 0 (default). if not provided set period       in seconds for local maximum bitrate (cache/bufsize) based       on average bitrate. */    if( !val.i_int )        p_sys->param.rc.i_vbv_buffer_size = p_sys->param.rc.i_bitrate * 2;    /* max bitrate = average bitrate -> CBR */    var_Get( p_enc, SOUT_CFG_PREFIX "vbv-maxrate", &val );    p_sys->param.rc.i_vbv_max_bitrate = val.i_int;#else    p_sys->param.rc.i_rc_buffer_size = p_sys->param.rc.i_bitrate;    p_sys->param.rc.i_rc_init_buffer = p_sys->param.rc.i_bitrate / 4;#endif    var_Get( p_enc, SOUT_CFG_PREFIX "cabac", &val );    p_sys->param.b_cabac = val.b_bool;    /* disable deblocking when nf (no loop filter) is enabled */    var_Get( p_enc, SOUT_CFG_PREFIX "nf", &val );    p_sys->param.b_deblocking_filter = !val.b_bool;    var_Get( p_enc, SOUT_CFG_PREFIX "deblock", &val );    if( val.psz_string )    {        char *p = strchr( val.psz_string, ':' );        p_sys->param.i_deblocking_filter_alphac0 = atoi( val.psz_string );        p_sys->param.i_deblocking_filter_beta = p ? atoi( p+1 ) : p_sys->param.i_deblocking_filter_alphac0;        free( val.psz_string );    }    var_Get( p_enc, SOUT_CFG_PREFIX "level", &val );    if( val.psz_string )    {        if( atof (val.psz_string) < 6 )            p_sys->param.i_level_idc = (int) ( 10 * atof (val.psz_string) + .5);        else            p_sys->param.i_level_idc = atoi (val.psz_string);        free( val.psz_string );    }#if X264_BUILD >= 51 /* r570 */    var_Get( p_enc, SOUT_CFG_PREFIX "interlaced", &val );    p_sys->param.b_interlaced = val.b_bool;#endif    var_Get( p_enc, SOUT_CFG_PREFIX "ipratio", &val );    p_sys->param.rc.f_ip_factor = val.f_float;    var_Get( p_enc, SOUT_CFG_PREFIX "pbratio", &val );    p_sys->param.rc.f_pb_factor = val.f_float;    var_Get( p_enc, SOUT_CFG_PREFIX "qcomp", &val );    p_sys->param.rc.f_qcompress = val.f_float;    var_Get( p_enc, SOUT_CFG_PREFIX "cplxblur", &val );    p_sys->param.rc.f_complexity_blur = val.f_float;    var_Get( p_enc, SOUT_CFG_PREFIX "qblur", &val );    p_sys->param.rc.f_qblur = val.f_float;#if X264_BUILD >= 0x000e    var_Get( p_enc, SOUT_CFG_PREFIX "verbose", &val );    if( val.b_bool ) p_sys->param.i_log_level = X264_LOG_DEBUG;#endif    var_Get( p_enc, SOUT_CFG_PREFIX "quiet", &val );    if( val.b_bool ) p_sys->param.i_log_level = X264_LOG_NONE;#if X264_BUILD >= 47 /* r518 */    var_Get( p_enc, SOUT_CFG_PREFIX "sps-id", &val );    if( val.i_int >= 0 ) p_sys->param.i_sps_id = val.i_int;#endif    var_Get( p_enc, SOUT_CFG_PREFIX "aud", &val );    if( val.b_bool ) p_sys->param.b_aud = val.b_bool;    var_Get( p_enc, SOUT_CFG_PREFIX "keyint", &val );

⌨️ 快捷键说明

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