[vlc-commits] avcodec: set color settings on encoding
Ilkka Ollakka
git at videolan.org
Sun Apr 17 10:57:04 CEST 2016
vlc | branch: master | Ilkka Ollakka <ileoo at videolan.org> | Sat Apr 16 18:29:44 2016 +0300| [2baae89ba631f9c64fe7ac1903f1e4916c87ed6a] | committer: Ilkka Ollakka
avcodec: set color settings on encoding
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2baae89ba631f9c64fe7ac1903f1e4916c87ed6a
---
modules/codec/avcodec/encoder.c | 50 +++++++++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
diff --git a/modules/codec/avcodec/encoder.c b/modules/codec/avcodec/encoder.c
index 9babede..e2f0546 100644
--- a/modules/codec/avcodec/encoder.c
+++ b/modules/codec/avcodec/encoder.c
@@ -277,6 +277,55 @@ static void probe_video_frame_rate( encoder_t *p_enc, AVCodecContext *p_context,
msg_Dbg( p_enc, "Time base set to %d/%d", p_context->time_base.num, p_context->time_base.den );
}
+static void set_video_color_settings( encoder_t *p_enc, AVCodecContext *p_context )
+{
+ if( p_enc->fmt_in.video.b_color_range_full )
+ p_context->color_range = AVCOL_RANGE_JPEG;
+
+ switch( p_enc->fmt_in.video.space )
+ {
+ case COLOR_SPACE_BT709:
+ p_context->colorspace = AVCOL_SPC_BT709;
+ break;
+ case COLOR_SPACE_BT601:
+ p_context->colorspace = AVCOL_SPC_BT470BG;
+ break;
+ case COLOR_SPACE_BT2020:
+ p_context->colorspace = AVCOL_SPC_BT2020_CL;
+ break;
+ default:
+ break;
+ }
+
+ switch( p_enc->fmt_in.video.transfer )
+ {
+ case TRANSFER_FUNC_LINEAR:
+ p_context->color_trc = AVCOL_TRC_LINEAR;
+ break;
+ case TRANSFER_FUNC_SRGB:
+ p_context->color_trc = AVCOL_TRC_GAMMA22;
+ break;
+ case TRANSFER_FUNC_BT709:
+ p_context->color_trc = AVCOL_TRC_BT709;
+ break;
+ }
+ switch( p_enc->fmt_in.video.primaries )
+ {
+ case COLOR_PRIMARIES_BT601_525:
+ p_context->color_primaries = AVCOL_PRI_SMPTE170M;
+ break;
+ case COLOR_PRIMARIES_BT601_625:
+ p_context->color_primaries = AVCOL_PRI_BT470BG;
+ break;
+ case COLOR_PRIMARIES_BT709:
+ p_context->color_primaries = AVCOL_PRI_BT709;
+ break;
+ case COLOR_PRIMARIES_BT2020:
+ p_context->color_primaries = AVCOL_PRI_BT2020;
+ break;
+ }
+}
+
int OpenEncoder( vlc_object_t *p_this )
{
encoder_t *p_enc = (encoder_t *)p_this;
@@ -502,6 +551,7 @@ int OpenEncoder( vlc_object_t *p_this )
p_context->height = p_enc->fmt_in.video.i_visible_height;
probe_video_frame_rate( p_enc, p_context, p_codec );
+ set_video_color_settings( p_enc, p_context );
/* Defaults from ffmpeg.c */
p_context->qblur = 0.5;
More information about the vlc-commits
mailing list