int nnal, i;
x264_picture_t pic_out;
+ x264_picture_init( &x4->pic );
x4->pic.img.i_csp = X264_CSP_I420;
x4->pic.img.i_plane = 3;
}
x4->pic.i_pts = frame->pts;
- x4->pic.i_type = X264_TYPE_AUTO;
+ x4->pic.i_type =
+ frame->pict_type == FF_I_TYPE ? X264_TYPE_KEYFRAME :
+ frame->pict_type == FF_P_TYPE ? X264_TYPE_P :
+ frame->pict_type == FF_B_TYPE ? X264_TYPE_B :
+ X264_TYPE_AUTO;
+ if (x4->params.b_tff != frame->top_field_first) {
+ x4->params.b_tff = frame->top_field_first;
+ x264_encoder_reconfig(x4->enc, &x4->params);
+ }
}
do {
if (avctx->level > 0)
x4->params.i_level_idc = avctx->level;
- x4->params.rc.f_rate_tolerance =
- (float)avctx->bit_rate_tolerance/avctx->bit_rate;
-
- if ((avctx->rc_buffer_size != 0) &&
+ if (avctx->rc_buffer_size && avctx->rc_initial_buffer_occupancy &&
(avctx->rc_initial_buffer_occupancy <= avctx->rc_buffer_size)) {
x4->params.rc.f_vbv_buffer_init =
(float)avctx->rc_initial_buffer_occupancy / avctx->rc_buffer_size;
- } else
- x4->params.rc.f_vbv_buffer_init = 0.9;
+ }
x4->params.rc.b_mb_tree = !!(avctx->flags2 & CODEC_FLAG2_MBTREE);
x4->params.rc.f_ip_factor = 1 / fabs(avctx->i_quant_factor);
x4->params.b_interlaced = avctx->flags & CODEC_FLAG_INTERLACED_DCT;
+ x4->params.i_slice_count = avctx->slices;
+
+ x4->params.vui.b_fullrange = avctx->pix_fmt == PIX_FMT_YUVJ420P;
+
if (avctx->flags & CODEC_FLAG_GLOBAL_HEADER)
x4->params.b_repeat_headers = 0;
return 0;
}
-AVCodec libx264_encoder = {
+AVCodec ff_libx264_encoder = {
.name = "libx264",
.type = AVMEDIA_TYPE_VIDEO,
.id = CODEC_ID_H264,
.encode = X264_frame,
.close = X264_close,
.capabilities = CODEC_CAP_DELAY,
- .pix_fmts = (const enum PixelFormat[]) { PIX_FMT_YUV420P, PIX_FMT_NONE },
+ .pix_fmts = (const enum PixelFormat[]) { PIX_FMT_YUV420P, PIX_FMT_YUVJ420P, PIX_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
};