From 84f608f4a096d3fa31e966a25fea49dbba0e7ce8 Mon Sep 17 00:00:00 2001 From: Vidar Madsen Date: Fri, 31 Oct 2003 10:25:21 +0000 Subject: [PATCH] New options for intra/inter matrices patch by (Vidar Madsen ) Originally committed as revision 2456 to svn://svn.ffmpeg.org/ffmpeg/trunk --- ffmpeg.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/ffmpeg.c b/ffmpeg.c index d755c9e..7c79693 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -87,6 +87,8 @@ static int video_mb_qmax = 31; static int video_qdiff = 3; static float video_qblur = 0.5; static float video_qcomp = 0.5; +static uint16_t *intra_matrix = NULL; +static uint16_t *inter_matrix = NULL; #if 0 //experimental, (can be removed) static float video_rc_qsquish=1.0; static float video_rc_qmod_amp=0; @@ -2261,7 +2263,12 @@ static void opt_output_file(const char *filename) video_enc->flags |= CODEC_FLAG_QSCALE; st->quality = FF_QP2LAMBDA * video_qscale; } - + + if(intra_matrix) + video_enc->intra_matrix = intra_matrix; + if(inter_matrix) + video_enc->inter_matrix = inter_matrix; + if(bitexact) video_enc->flags |= CODEC_FLAG_BITEXACT; @@ -2666,6 +2673,35 @@ static void show_formats(void) exit(1); } +void parse_matrix_coeffs(uint16_t *dest, const char *str) +{ + int i; + const char *p = str; + for(i = 0;; i++) { + dest[i] = atoi(p); + if(i == 63) + break; + p = strchr(p, ','); + if(!p) { + fprintf(stderr, "Syntax error in matrix \"%s\" at coeff %d\n", str, i); + exit(1); + } + p++; + } +} + +void opt_inter_matrix(const char *arg) +{ + inter_matrix = av_mallocz(sizeof(uint16_t) * 64); + parse_matrix_coeffs(inter_matrix, arg); +} + +void opt_intra_matrix(const char *arg) +{ + intra_matrix = av_mallocz(sizeof(uint16_t) * 64); + parse_matrix_coeffs(intra_matrix, arg); +} + const OptionDef options[] = { /* main options */ { "L", 0, {(void*)show_license}, "show license" }, @@ -2751,6 +2787,8 @@ const OptionDef options[] = { { "vhook", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)add_frame_hooker}, "insert video processing module", "module" }, { "aic", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&use_aic}, "enable Advanced intra coding (h263+)" }, { "umv", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&use_umv}, "enable Unlimited Motion Vector (h263+)" }, + { "intra_matrix", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_intra_matrix}, "specify intra matrix coeffs", "matrix" }, + { "inter_matrix", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_inter_matrix}, "specify inter matrix coeffs", "matrix" }, /* audio options */ { "ab", HAS_ARG | OPT_AUDIO, {(void*)opt_audio_bitrate}, "set audio bitrate (in kbit/s)", "bitrate", }, @@ -2875,6 +2913,10 @@ int main(int argc, char **argv) av_free_static(); + if(intra_matrix) + av_free(intra_matrix); + if(inter_matrix) + av_free(inter_matrix); #ifdef POWERPC_PERFORMANCE_REPORT extern void powerpc_display_perf_report(void); -- 2.7.4