[vlc-commits] x264.c: support high422,high444 and high10 encoding
Ilkka Ollakka
git at videolan.org
Thu Jan 5 12:05:48 CET 2012
vlc | branch: master | Ilkka Ollakka <ileoo at videolan.org> | Thu Jan 5 15:49:40 2012 +0200| [b7003c73eebe84afbb6f99bff10b3400502933da] | committer: Ilkka Ollakka
x264.c: support high422,high444 and high10 encoding
10-bit encoding requires libx264 compiled with 10-bit support that doesn't
work with normal 8-bit input.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b7003c73eebe84afbb6f99bff10b3400502933da
---
NEWS | 2 ++
modules/codec/x264.c | 32 ++++++++++++++++++++++++++++----
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/NEWS b/NEWS
index d46a90b..63fef27 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,8 @@
Changes between 1.2.x and 1.3.0-git:
--------------------------------
+Encoders:
+ * high10,high422 and high444 encoding support in h264
Changes between 1.1.12 and 1.2.0:
diff --git a/modules/codec/x264.c b/modules/codec/x264.c
index 60cd3b2..1479a53 100644
--- a/modules/codec/x264.c
+++ b/modules/codec/x264.c
@@ -727,6 +727,7 @@ struct encoder_sys_t
char *psz_stat_name;
int i_sei_size;
+ uint32_t i_colorspace;
uint8_t *p_sei;
};
@@ -760,13 +761,35 @@ static int Open ( vlc_object_t *p_this )
p_enc->fmt_out.i_cat = VIDEO_ES;
p_enc->fmt_out.i_codec = VLC_CODEC_H264;
+ p_enc->p_sys = p_sys = malloc( sizeof( encoder_sys_t ) );
+ if( !p_sys )
+ return VLC_ENOMEM;
+
p_enc->fmt_in.i_codec = VLC_CODEC_I420;
+ p_sys->i_colorspace = X264_CSP_I420;
+ char *psz_profile = var_GetString( p_enc, SOUT_CFG_PREFIX "profile" );
+ if( psz_profile )
+ {
+ if( !strcmp( psz_profile, "high10" ) )
+ {
+ p_enc->fmt_in.i_codec = VLC_CODEC_I420_10L;
+ p_sys->i_colorspace = X264_CSP_I420 | X264_CSP_HIGH_DEPTH;
+ }
+ if( !strcmp( psz_profile, "high422" ) )
+ {
+ p_enc->fmt_in.i_codec = VLC_CODEC_I422;
+ p_sys->i_colorspace = X264_CSP_I422;
+ }
+ if( !strcmp( psz_profile, "high444" ) )
+ {
+ p_enc->fmt_in.i_codec = VLC_CODEC_I444;
+ p_sys->i_colorspace = X264_CSP_I444;
+ }
+ }
+ free( psz_profile );
p_enc->pf_encode_video = Encode;
p_enc->pf_encode_audio = NULL;
- p_enc->p_sys = p_sys = malloc( sizeof( encoder_sys_t ) );
- if( !p_sys )
- return VLC_ENOMEM;
p_sys->i_initial_delay = 0;
p_sys->psz_stat_name = NULL;
p_sys->i_sei_size = 0;
@@ -783,6 +806,7 @@ static int Open ( vlc_object_t *p_this )
x264_param_default_preset( &p_sys->param, psz_preset, psz_tune );
free( psz_preset );
free( psz_tune );
+ p_sys->param.i_csp = p_sys->i_colorspace;
p_sys->param.i_width = p_enc->fmt_in.video.i_width;
p_sys->param.i_height = p_enc->fmt_in.video.i_height;
@@ -1313,7 +1337,7 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pict )
if( unlikely( p_sys->i_initial_delay == 0 ) )
p_sys->i_initial_delay = p_pict->date;
pic.i_pts -= p_sys->i_initial_delay;
- pic.img.i_csp = X264_CSP_I420;
+ pic.img.i_csp = p_sys->i_colorspace;
pic.img.i_plane = p_pict->i_planes;
for( i = 0; i < p_pict->i_planes; i++ )
{
More information about the vlc-commits
mailing list