[FFmpeg-devel] [PATCH]lavc/mjpegenc: Add an option to force outputting chroma matrix

Carl Eugen Hoyos cehoyos at ag.or.at
Thu Oct 1 22:03:39 CEST 2015


Hi!

Attached patch adds an option to force writing chroma matrix even if it is 
identical to luma matrix as suggested by RFC 2435 for mjpeg over rtp.

Is force_write_chroma_matrix better?

Please comment, Carl Eugen
-------------- next part --------------
diff --git a/libavcodec/mjpegenc_common.c b/libavcodec/mjpegenc_common.c
index d1d4cfb..7dadda8 100644
--- a/libavcodec/mjpegenc_common.c
+++ b/libavcodec/mjpegenc_common.c
@@ -64,11 +64,14 @@ static void jpeg_table_header(AVCodecContext *avctx, PutBitContext *p,
 {
     int i, j, size;
     uint8_t *ptr;
+    MpegEncContext *s = avctx->priv_data;
 
     if (avctx->codec_id != AV_CODEC_ID_LJPEG) {
         int matrix_count = 1 + !!memcmp(luma_intra_matrix,
                                         chroma_intra_matrix,
                                         sizeof(luma_intra_matrix[0]) * 64);
+    if (s->force_duplicated_matrix)
+        matrix_count = 2;
     /* quant matrixes */
     put_marker(p, DQT);
     put_bits(p, 16, 2 + matrix_count * (1 + 64));
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index 750388a..a2cd8e8 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -299,6 +299,7 @@ typedef struct MpegEncContext {
     uint16_t chroma_intra_matrix[64];
     uint16_t inter_matrix[64];
     uint16_t chroma_inter_matrix[64];
+    int force_duplicated_matrix; ///< Force duplication of mjpeg matrices, useful for rtp streaming
 
     int intra_quant_bias;    ///< bias for the quantizer
     int inter_quant_bias;    ///< bias for the quantizer
@@ -596,6 +597,7 @@ typedef struct MpegEncContext {
 { "zero", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_ZERO }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \
 { "epzs", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_EPZS }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \
 { "xone", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_XONE }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \
+{ "force_duplicated_matrix", "Always write luma and chroma matrix for mjpeg, useful for rtp streaming.", FF_MPV_OFFSET(force_duplicated_matrix), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, FF_MPV_OPT_FLAGS },   \
 
 extern const AVOption ff_mpv_generic_options[];
 


More information about the ffmpeg-devel mailing list