avcodec: support setting the chroma intra matrix
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 10 Feb 2014 18:01:41 +0000 (19:01 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 18 Feb 2014 17:19:27 +0000 (18:19 +0100)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/avcodec.h
libavcodec/mpegvideo_enc.c
libavcodec/utils.c

index f9b2e5c..5df717c 100644 (file)
@@ -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.
  */
index 54ef15f..bb49822 100644 (file)
@@ -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++){
index 5d318dc..d24854a 100644 (file)
@@ -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)
 {