h264_parser: export video format and dimensions
This commit is contained in:
parent
5b1d9ceec7
commit
31d2039cb4
5 changed files with 58 additions and 1 deletions
|
@ -275,6 +275,35 @@ static inline int parse_nal_units(AVCodecParserContext *s,
|
|||
h->sps = *h->sps_buffers[h->pps.sps_id];
|
||||
h->frame_num = get_bits(&h->gb, h->sps.log2_max_frame_num);
|
||||
|
||||
s->coded_width = 16 * h->sps.mb_width;
|
||||
s->coded_height = 16 * h->sps.mb_height;
|
||||
s->width = s->coded_width - (h->sps.crop_right + h->sps.crop_left);
|
||||
s->height = s->coded_height - (h->sps.crop_top + h->sps.crop_bottom);
|
||||
if (s->width <= 0 || s->height <= 0) {
|
||||
s->width = s->coded_width;
|
||||
s->height = s->coded_height;
|
||||
}
|
||||
|
||||
switch (h->sps.bit_depth_luma) {
|
||||
case 9:
|
||||
if (CHROMA444(h)) s->format = AV_PIX_FMT_YUV444P9;
|
||||
else if (CHROMA422(h)) s->format = AV_PIX_FMT_YUV422P9;
|
||||
else s->format = AV_PIX_FMT_YUV420P9;
|
||||
break;
|
||||
case 10:
|
||||
if (CHROMA444(h)) s->format = AV_PIX_FMT_YUV444P10;
|
||||
else if (CHROMA422(h)) s->format = AV_PIX_FMT_YUV422P10;
|
||||
else s->format = AV_PIX_FMT_YUV420P10;
|
||||
break;
|
||||
case 8:
|
||||
if (CHROMA444(h)) s->format = AV_PIX_FMT_YUV444P;
|
||||
else if (CHROMA422(h)) s->format = AV_PIX_FMT_YUV422P;
|
||||
else s->format = AV_PIX_FMT_YUV420P;
|
||||
break;
|
||||
default:
|
||||
s->format = AV_PIX_FMT_NONE;
|
||||
}
|
||||
|
||||
avctx->profile = ff_h264_get_profile(&h->sps);
|
||||
avctx->level = h->sps.level_idc;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue