Commit b1a32429 authored by Will Kelleher's avatar Will Kelleher Committed by Michael Niedermayer

hevc: Fix a53 caption extraction

Just realized my previous patch doesn't work quite right.  I uploaded a better
sample file that actually has visible captions to /incoming/hevc_cc.ts.  I
tested with that file doing hevc->x264 and it works.

This is basically an exact copy of the existing h264 logic.
Signed-off-by: 's avatarWill Kelleher <wkelleher@gogoair.com>
Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent 58d32c00
......@@ -2573,6 +2573,7 @@ static int set_side_data(HEVCContext *s)
if (sd)
memcpy(sd->data, s->a53_caption, s->a53_caption_size);
av_freep(&s->a53_caption);
s->a53_caption_size = 0;
s->avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS;
}
......
......@@ -151,7 +151,6 @@ static int decode_registered_user_data_closed_caption(HEVCContext *s, int size)
int flag;
int user_data_type_code;
int cc_count;
int i;
GetBitContext *gb = &s->HEVClc->gb;
......@@ -170,20 +169,28 @@ static int decode_registered_user_data_closed_caption(HEVCContext *s, int size)
size -= 2;
if (cc_count && size >= cc_count * 3) {
av_freep(&s->a53_caption);
s->a53_caption_size = cc_count * 3;
s->a53_caption = av_malloc(s->a53_caption_size);
if (!s->a53_caption)
return(AVERROR(ENOMEM));
for (i = 0; i < s->a53_caption_size; i++) {
s->a53_caption[i++] = get_bits(gb, 8);
const uint64_t new_size = (s->a53_caption_size + cc_count
* UINT64_C(3));
int i, ret;
if (new_size > INT_MAX)
return AVERROR(EINVAL);
/* Allow merging of the cc data from two fields. */
ret = av_reallocp(&s->a53_caption, new_size);
if (ret < 0)
return ret;
for (i = 0; i < cc_count; i++) {
s->a53_caption[s->a53_caption_size++] = get_bits(gb, 8);
s->a53_caption[s->a53_caption_size++] = get_bits(gb, 8);
s->a53_caption[s->a53_caption_size++] = get_bits(gb, 8);
}
skip_bits(gb, 8); // marker_bits
}
}
} else {
int i;
for (i = 0; i < size - 1; i++)
skip_bits(gb, 8);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment