[FFmpeg-cvslog] ffmpeg: support setting the chroma intra matrix

Michael Niedermayer git at videolan.org
Tue Feb 18 19:44:00 CET 2014


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Mon Feb 10 19:02:01 2014 +0100| [3e70c7023e598afa15d40ae3fce62ae1eee25195] | committer: Michael Niedermayer

ffmpeg: support setting the chroma intra matrix

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3e70c7023e598afa15d40ae3fce62ae1eee25195
---

 ffmpeg.h     |    2 ++
 ffmpeg_opt.c |   14 ++++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/ffmpeg.h b/ffmpeg.h
index 00f7a2a..04e5b72 100644
--- a/ffmpeg.h
+++ b/ffmpeg.h
@@ -171,6 +171,8 @@ typedef struct OptionsContext {
     int        nb_intra_matrices;
     SpecifierOpt *inter_matrices;
     int        nb_inter_matrices;
+    SpecifierOpt *chroma_intra_matrices;
+    int        nb_chroma_intra_matrices;
     SpecifierOpt *top_field_first;
     int        nb_top_field_first;
     SpecifierOpt *metadata_map;
diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
index 26798f7..5db961a 100644
--- a/ffmpeg_opt.c
+++ b/ffmpeg_opt.c
@@ -1265,6 +1265,7 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc, in
         char *frame_size = NULL;
         char *frame_pix_fmt = NULL;
         char *intra_matrix = NULL, *inter_matrix = NULL;
+        char *chroma_intra_matrix = NULL;
         int do_pass = 0;
         int i;
 
@@ -1297,6 +1298,16 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc, in
             }
             parse_matrix_coeffs(video_enc->intra_matrix, intra_matrix);
         }
+        MATCH_PER_STREAM_OPT(chroma_intra_matrices, str, chroma_intra_matrix, oc, st);
+        if (chroma_intra_matrix) {
+            uint16_t *p = av_mallocz(sizeof(*video_enc->chroma_intra_matrix) * 64);
+            if (!p) {
+                av_log(NULL, AV_LOG_FATAL, "Could not allocate memory for intra matrix.\n");
+                exit_program(1);
+            }
+            av_codec_set_chroma_intra_matrix(video_enc, p);
+            parse_matrix_coeffs(p, chroma_intra_matrix);
+        }
         MATCH_PER_STREAM_OPT(inter_matrices, str, inter_matrix, oc, st);
         if (inter_matrix) {
             if (!(video_enc->inter_matrix = av_mallocz(sizeof(*video_enc->inter_matrix) * 64))) {
@@ -2860,6 +2871,9 @@ const OptionDef options[] = {
     { "inter_matrix", OPT_VIDEO | HAS_ARG | OPT_EXPERT  | OPT_STRING | OPT_SPEC |
                       OPT_OUTPUT,                                                { .off = OFFSET(inter_matrices) },
         "specify inter matrix coeffs", "matrix" },
+    { "chroma_intra_matrix", OPT_VIDEO | HAS_ARG | OPT_EXPERT  | OPT_STRING | OPT_SPEC |
+                      OPT_OUTPUT,                                                { .off = OFFSET(chroma_intra_matrices) },
+        "specify intra matrix coeffs", "matrix" },
     { "top",          OPT_VIDEO | HAS_ARG | OPT_EXPERT  | OPT_INT| OPT_SPEC |
                       OPT_INPUT | OPT_OUTPUT,                                    { .off = OFFSET(top_field_first) },
         "top=1/bottom=0/auto=-1 field first", "" },



More information about the ffmpeg-cvslog mailing list