/* [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)
+ dirac_source_params *source, int *bit_depth)
{
AVRational frame_rate = { 0, 0 };
unsigned luma_depth = 8, luma_offset = 16;
if (luma_depth > 8)
av_log(avctx, AV_LOG_WARNING, "Bitdepth greater than 8\n");
+
+ *bit_depth = luma_depth;
+
avctx->pix_fmt = dirac_pix_fmt[!luma_offset][source->chroma_format];
avcodec_get_chroma_sub_sample(avctx->pix_fmt, &chroma_x_shift, &chroma_y_shift);
if ((source->width % (1<<chroma_x_shift)) || (source->height % (1<<chroma_y_shift))) {
/* [DIRAC_STD] 10. Sequence Header. sequence_header() */
int avpriv_dirac_parse_sequence_header(AVCodecContext *avctx, GetBitContext *gb,
- dirac_source_params *source)
+ dirac_source_params *source,
+ DiracVersionInfo *version,
+ int *bit_depth)
{
- unsigned version_major;
unsigned video_format, picture_coding_mode;
int ret;
/* [DIRAC_SPEC] 10.1 Parse Parameters. parse_parameters() */
- version_major = svq3_get_ue_golomb(gb);
- svq3_get_ue_golomb(gb); /* version_minor */
- avctx->profile = svq3_get_ue_golomb(gb);
- avctx->level = svq3_get_ue_golomb(gb);
+ version->major = svq3_get_ue_golomb(gb);
+ version->minor = svq3_get_ue_golomb(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 */
- video_format = svq3_get_ue_golomb(gb);
+ video_format = svq3_get_ue_golomb(gb);
- if (version_major < 2)
+ if (version->major < 2)
av_log(avctx, AV_LOG_WARNING, "Stream is old and may not work\n");
- else if (version_major > 2)
+ else if (version->major > 2)
av_log(avctx, AV_LOG_WARNING, "Stream may have unhandled features\n");
if (video_format > 20U)
/* [DIRAC_STD] 10.3 Source Parameters
* Override the defaults. */
- if (ret = parse_source_parameters(avctx, gb, source))
+ if (ret = parse_source_parameters(avctx, gb, source, bit_depth))
return ret;
ret = ff_set_dimensions(avctx, source->width, source->height);