From cbcfd7da4d1f5d43b0b9abb05d9b6fc4451cad0d Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 10 Feb 2014 19:01:41 +0100 Subject: avcodec: support setting the chroma intra matrix Signed-off-by: Michael Niedermayer --- libavcodec/avcodec.h | 11 +++++++++++ libavcodec/mpegvideo_enc.c | 2 ++ libavcodec/utils.c | 1 + 3 files changed, 14 insertions(+) (limited to 'libavcodec') diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index f9b2e5cf27..5df717caef 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -2988,6 +2988,14 @@ typedef struct AVCodecContext { #define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames #define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames #endif + + /** + * custom intra quantization matrix + * Code outside libavcodec should access this field using av_codec_g/set_chroma_intra_matrix() + * - encoding: Set by user, can be NULL. + * - decoding: unused. + */ + uint16_t *chroma_intra_matrix; } AVCodecContext; AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx); @@ -3002,6 +3010,9 @@ void av_codec_set_lowres(AVCodecContext *avctx, int val); int av_codec_get_seek_preroll(const AVCodecContext *avctx); void av_codec_set_seek_preroll(AVCodecContext *avctx, int val); +uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx); +void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val); + /** * AVProfile. */ diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 54ef15f5e7..bb49822ce2 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -3511,6 +3511,8 @@ static int encode_picture(MpegEncContext *s, int picture_number) chroma_matrix = luma_matrix = s->avctx->intra_matrix; } + if (s->avctx->chroma_intra_matrix) + chroma_matrix = s->avctx->chroma_intra_matrix; /* for mjpeg, we do include qscale in the matrix */ for(i=1;i<64;i++){ diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 5d318dc77f..d24854a987 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -1116,6 +1116,7 @@ MAKE_ACCESSORS(AVCodecContext, codec, AVRational, pkt_timebase) MAKE_ACCESSORS(AVCodecContext, codec, const AVCodecDescriptor *, codec_descriptor) MAKE_ACCESSORS(AVCodecContext, codec, int, lowres) MAKE_ACCESSORS(AVCodecContext, codec, int, seek_preroll) +MAKE_ACCESSORS(AVCodecContext, codec, uint16_t*, chroma_intra_matrix) int av_codec_get_max_lowres(const AVCodec *codec) { -- cgit v1.2.3