diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-08-24 14:22:38 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-08-24 14:30:40 +0200 |
commit | bec180e1127f6753b5af1e6e5242020e0de12366 (patch) | |
tree | b27493eb57b5a484bde3cbc5740d9e60f06f9776 /libavcodec/dirac.c | |
parent | 6b72615c32d7f3bc53a6d6075042aee626d07412 (diff) | |
parent | a1bcc76e6036e78f25cbb7323c145056cfca9d93 (diff) | |
download | ffmpeg-bec180e1127f6753b5af1e6e5242020e0de12366.tar.gz |
Merge commit 'a1bcc76e6036e78f25cbb7323c145056cfca9d93'
* commit 'a1bcc76e6036e78f25cbb7323c145056cfca9d93': (21 commits)
cmdutils: fix a memleak when specifying an option twice.
x86: mpegvideo: more sensible names for optimization file and init function
x86: mpegvideoenc: Split optimizations off into a separate file
dnxhdenc: x86: more sensible names for optimization file and init function
svq1/svq3: Move common code out of SVQ1 decoder-specific file
dirac: add Comments and references to the standard
lavr: x86: optimized 6-channel flt to fltp conversion
lavr: x86: optimized 2-channel flt to fltp conversion
lavr: x86: optimized 6-channel flt to s16p conversion
lavr: x86: optimized 2-channel flt to s16p conversion
lavr: x86: optimized 6-channel s16 to fltp conversion
lavr: x86: optimized 2-channel s16 to fltp conversion
lavr: x86: optimized 6-channel s16 to s16p conversion
lavr: x86: optimized 2-channel s16 to s16p conversion
lavr: x86: optimized 2-channel fltp to flt conversion
lavr: x86: optimized 6-channel fltp to s16 conversion
lavr: x86: optimized 2-channel fltp to s16 conversion
lavr: x86: optimized 6-channel s16p to flt conversion
lavr: x86: optimized 2-channel s16p to flt conversion
lavr: x86: optimized 6-channel s16p to s16 conversion
...
Conflicts:
libavcodec/dirac.c
libavcodec/mpegvideo.h
libavcodec/x86/Makefile
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/dirac.c')
-rw-r--r-- | libavcodec/dirac.c | 122 |
1 files changed, 65 insertions, 57 deletions
diff --git a/libavcodec/dirac.c b/libavcodec/dirac.c index 3aa65e3c4d..bab3980382 100644 --- a/libavcodec/dirac.c +++ b/libavcodec/dirac.c @@ -57,10 +57,7 @@ static const dirac_source_params dirac_source_parameters_defaults[] = { { 7680, 4320, 1, 0, 1, 6, 1, 3840, 2160, 0, 0, 3, 3 }, }; -/** - * Dirac Specification -> - * Table 10.4 - Available preset pixel aspect ratio values - */ +/* [DIRAC_STD] Table 10.4 - Available preset pixel aspect ratio values */ static const AVRational dirac_preset_aspect_ratios[] = { {1, 1}, {10, 11}, @@ -70,19 +67,16 @@ static const AVRational dirac_preset_aspect_ratios[] = { {4, 3}, }; -/** - * Dirac Specification -> - * Values 9,10 of 10.3.5 Frame Rate. Table 10.3 Available preset frame rate values +/* [DIRAC_STD] Values 9,10 of 10.3.5 Frame Rate. + * Table 10.3 Available preset frame rate values */ static const AVRational dirac_frame_rate[] = { {15000, 1001}, {25, 2}, }; -/** - * Dirac Specification -> - * This should be equivalent to Table 10.5 Available signal range presets - */ +/* [DIRAC_STD] This should be equivalent to Table 10.5 Available signal + * range presets */ static const struct { uint8_t bitdepth; enum AVColorRange color_range; @@ -111,19 +105,14 @@ static const struct { { AVCOL_PRI_BT709, AVCOL_SPC_BT709, AVCOL_TRC_UNSPECIFIED /* DCinema */ }, }; -/** - * Dirac Specification -> - * Table 10.2 Supported chroma sampling formats + Luma Offset - */ +/* [DIRAC_STD] Table 10.2 Supported chroma sampling formats + luma Offset */ static const enum PixelFormat dirac_pix_fmt[2][3] = { { PIX_FMT_YUV444P, PIX_FMT_YUV422P, PIX_FMT_YUV420P }, { PIX_FMT_YUVJ444P, PIX_FMT_YUVJ422P, PIX_FMT_YUVJ420P }, }; -/** - * Dirac Specification -> - * 10.3 Parse Source Parameters. source_parameters(base_video_format) - */ +/* [DIRAC_STD] 10.3 Parse Source Parameters. + * source_parameters(base_video_format) */ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb, dirac_source_params *source) { @@ -132,15 +121,18 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb, int idx; /* [DIRAC_STD] 10.3.2 Frame size. frame_size(video_params) */ - if (get_bits1(gb)) { /* [DIRAC_STD] custom_dimensions_flag */ - source->width = svq3_get_ue_golomb(gb); /* [DIRAC_STD] FRAME_WIDTH */ - source->height = svq3_get_ue_golomb(gb); /* [DIRAC_STD] FRAME_HEIGHT */ + /* [DIRAC_STD] custom_dimensions_flag */ + if (get_bits1(gb)) { + source->width = svq3_get_ue_golomb(gb); /* [DIRAC_STD] FRAME_WIDTH */ + source->height = svq3_get_ue_golomb(gb); /* [DIRAC_STD] FRAME_HEIGHT */ } /* [DIRAC_STD] 10.3.3 Chroma Sampling Format. - chroma_sampling_format(video_params) */ - if (get_bits1(gb)) /* [DIRAC_STD] custom_chroma_format_flag */ - source->chroma_format = svq3_get_ue_golomb(gb); /*[DIRAC_STD] CHROMA_FORMAT_INDEX */ + * chroma_sampling_format(video_params) */ + /* [DIRAC_STD] custom_chroma_format_flag */ + if (get_bits1(gb)) + /* [DIRAC_STD] CHROMA_FORMAT_INDEX */ + source->chroma_format = svq3_get_ue_golomb(gb); if (source->chroma_format > 2U) { av_log(avctx, AV_LOG_ERROR, "Unknown chroma format %d\n", source->chroma_format); @@ -148,8 +140,10 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb, } /* [DIRAC_STD] 10.3.4 Scan Format. scan_format(video_params) */ - if (get_bits1(gb)) /* [DIRAC_STD] custom_scan_format_flag */ - source->interlaced = svq3_get_ue_golomb(gb); /* [DIRAC_STD] SOURCE_SAMPLING */ + /* [DIRAC_STD] custom_scan_format_flag */ + if (get_bits1(gb)) + /* [DIRAC_STD] SOURCE_SAMPLING */ + source->interlaced = svq3_get_ue_golomb(gb); if (source->interlaced > 1U) return AVERROR_INVALIDDATA; @@ -160,23 +154,29 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb, if (source->frame_rate_index > 10U) return AVERROR_INVALIDDATA; - if (!source->frame_rate_index){ - frame_rate.num = svq3_get_ue_golomb(gb); /* [DIRAC_STD] FRAME_RATE_NUMER */ - frame_rate.den = svq3_get_ue_golomb(gb); /* [DIRAC_STD] FRAME_RATE_DENOM */ + if (!source->frame_rate_index) { + /* [DIRAC_STD] FRAME_RATE_NUMER */ + frame_rate.num = svq3_get_ue_golomb(gb); + /* [DIRAC_STD] FRAME_RATE_DENOM */ + frame_rate.den = svq3_get_ue_golomb(gb); } } - if (source->frame_rate_index > 0) { /* [DIRAC_STD] preset_frame_rate(video_params,index) */ + /* [DIRAC_STD] preset_frame_rate(video_params, index) */ + if (source->frame_rate_index > 0) { if (source->frame_rate_index <= 8) frame_rate = avpriv_frame_rate_tab[source->frame_rate_index]; /* [DIRAC_STD] Table 10.3 values 1-8 */ else - frame_rate = dirac_frame_rate[source->frame_rate_index-9]; /* [DIRAC_STD] Table 10.3 values 9-10 */ + /* [DIRAC_STD] Table 10.3 values 9-10 */ + frame_rate = dirac_frame_rate[source->frame_rate_index-9]; } av_reduce(&avctx->time_base.num, &avctx->time_base.den, frame_rate.den, frame_rate.num, 1<<30); - /* [DIRAC_STD] 10.3.6 Pixel Aspect Ratio. pixel_aspect_ratio(video_params) */ + /* [DIRAC_STD] 10.3.6 Pixel Aspect Ratio. + * pixel_aspect_ratio(video_params) */ if (get_bits1(gb)) { /* [DIRAC_STD] custom_pixel_aspect_ratio_flag */ - source->aspect_ratio_index = svq3_get_ue_golomb(gb); /* [DIRAC_STD] index */ + /* [DIRAC_STD] index */ + source->aspect_ratio_index = svq3_get_ue_golomb(gb); if (source->aspect_ratio_index > 6U) return AVERROR_INVALIDDATA; @@ -186,22 +186,30 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb, avctx->sample_aspect_ratio.den = svq3_get_ue_golomb(gb); } } - if (source->aspect_ratio_index > 0) /* [DIRAC_STD] Take value from Table 10.4 Available preset pixel aspect ratio values */ + /* [DIRAC_STD] Take value from Table 10.4 Available preset pixel + * aspect ratio values */ + if (source->aspect_ratio_index > 0) avctx->sample_aspect_ratio = dirac_preset_aspect_ratios[source->aspect_ratio_index-1]; /* [DIRAC_STD] 10.3.7 Clean area. clean_area(video_params) */ if (get_bits1(gb)) { /* [DIRAC_STD] custom_clean_area_flag */ - source->clean_width = svq3_get_ue_golomb(gb); /* [DIRAC_STD] CLEAN_WIDTH */ - source->clean_height = svq3_get_ue_golomb(gb); /* [DIRAC_STD] CLEAN_HEIGHT */ - source->clean_left_offset = svq3_get_ue_golomb(gb); /* [DIRAC_STD] CLEAN_LEFT_OFFSET */ - source->clean_right_offset = svq3_get_ue_golomb(gb); /* [DIRAC_STD] CLEAN_RIGHT_OFFSET */ + /* [DIRAC_STD] CLEAN_WIDTH */ + source->clean_width = svq3_get_ue_golomb(gb); + /* [DIRAC_STD] CLEAN_HEIGHT */ + source->clean_height = svq3_get_ue_golomb(gb); + /* [DIRAC_STD] CLEAN_LEFT_OFFSET */ + source->clean_left_offset = svq3_get_ue_golomb(gb); + /* [DIRAC_STD] CLEAN_RIGHT_OFFSET */ + source->clean_right_offset = svq3_get_ue_golomb(gb); } - /*[DIRAC_STD] 10.3.8 Signal range. signal_range(video_params) - WARNING: Some adaptation seemed to be done using the AVCOL_RANGE_MPEG/JPEG values */ - if (get_bits1(gb)) { /*[DIRAC_STD] custom_signal_range_flag */ - source->pixel_range_index = svq3_get_ue_golomb(gb); /*[DIRAC_STD] index */ + /* [DIRAC_STD] 10.3.8 Signal range. signal_range(video_params) + * WARNING: Some adaptation seems to be done using the + * AVCOL_RANGE_MPEG/JPEG values */ + if (get_bits1(gb)) { /* [DIRAC_STD] custom_signal_range_flag */ + /* [DIRAC_STD] index */ + source->pixel_range_index = svq3_get_ue_golomb(gb); if (source->pixel_range_index > 4U) return AVERROR_INVALIDDATA; @@ -210,13 +218,14 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb, if (!source->pixel_range_index) { luma_offset = svq3_get_ue_golomb(gb); luma_depth = av_log2(svq3_get_ue_golomb(gb))+1; - svq3_get_ue_golomb(gb); /* chroma offset @Jordi: Why are these two ignored? */ + svq3_get_ue_golomb(gb); /* chroma offset */ svq3_get_ue_golomb(gb); /* chroma excursion */ - avctx->color_range = luma_offset ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG; } } - if (source->pixel_range_index > 0) { /*[DIRAC_STD] Take values from Table 10.5 Available signal range presets */ + /* [DIRAC_STD] Table 10.5 + * Available signal range presets <--> pixel_range_presets */ + if (source->pixel_range_index > 0) { idx = source->pixel_range_index-1; luma_depth = pixel_range_presets[idx].bitdepth; avctx->color_range = pixel_range_presets[idx].color_range; @@ -229,7 +238,8 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb, /* [DIRAC_STD] 10.3.9 Colour specification. colour_spec(video_params) */ if (get_bits1(gb)) { /* [DIRAC_STD] custom_colour_spec_flag */ - idx = source->color_spec_index = svq3_get_ue_golomb(gb); /* [DIRAC_STD] index */ + /* [DIRAC_STD] index */ + idx = source->color_spec_index = svq3_get_ue_golomb(gb); if (source->color_spec_index > 4U) return AVERROR_INVALIDDATA; @@ -239,13 +249,13 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb, avctx->color_trc = dirac_color_presets[idx].color_trc; if (!source->color_spec_index) { - /* [DIRAC_STD] 10.3.9.1 Color primaries */ + /* [DIRAC_STD] 10.3.9.1 Colour primaries */ if (get_bits1(gb)) { idx = svq3_get_ue_golomb(gb); if (idx < 3U) avctx->color_primaries = dirac_primaries[idx]; } - /* [DIRAC_STD] 10.3.9.2 Color matrix */ + /* [DIRAC_STD] 10.3.9.2 Colour matrix */ if (get_bits1(gb)) { idx = svq3_get_ue_golomb(gb); if (!idx) @@ -267,10 +277,7 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb, return 0; } -/** - * Dirac Specification -> - * 10. Sequence Header. sequence_header() - */ +/* [DIRAC_STD] 10. Sequence Header. sequence_header() */ int avpriv_dirac_parse_sequence_header(AVCodecContext *avctx, GetBitContext *gb, dirac_source_params *source) { @@ -284,7 +291,7 @@ int avpriv_dirac_parse_sequence_header(AVCodecContext *avctx, GetBitContext *gb, avctx->profile = svq3_get_ue_golomb(gb); avctx->level = svq3_get_ue_golomb(gb); /* [DIRAC_SPEC] sequence_header() -> base_video_format as defined in - 10.2 Base Video Format, table 10.1 Dirac predefined video formats */ + * 10.2 Base Video Format, table 10.1 Dirac predefined video formats */ video_format = svq3_get_ue_golomb(gb); if (version_major < 2) @@ -298,7 +305,8 @@ int avpriv_dirac_parse_sequence_header(AVCodecContext *avctx, GetBitContext *gb, /* Fill in defaults for the source parameters. */ *source = dirac_source_parameters_defaults[video_format]; - // Override the defaults. + /* [DIRAC_STD] 10.3 Source Parameters + * Override the defaults. */ if (ret = parse_source_parameters(avctx, gb, source)) return ret; @@ -307,8 +315,8 @@ int avpriv_dirac_parse_sequence_header(AVCodecContext *avctx, GetBitContext *gb, avcodec_set_dimensions(avctx, source->width, source->height); - /*[DIRAC_STD] picture_coding_mode shall be 0 for fields and 1 for frames - currently only used to signal field coding */ + /* [DIRAC_STD] picture_coding_mode shall be 0 for fields and 1 for frames + * currently only used to signal field coding */ picture_coding_mode = svq3_get_ue_golomb(gb); if (picture_coding_mode != 0) { av_log(avctx, AV_LOG_ERROR, "Unsupported picture coding mode %d", |