libavcodec: factor out SEI generation for A53 captions
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:

committed by
Michael Niedermayer

parent
0fcc252829
commit
63adb3602d
@@ -4178,3 +4178,46 @@ int avcodec_parameters_to_context(AVCodecContext *codec,
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ff_alloc_a53_sei(const AVFrame *frame, size_t prefix_len,
|
||||
void **data, size_t *sei_size)
|
||||
{
|
||||
AVFrameSideData *side_data = NULL;
|
||||
uint8_t *sei_data;
|
||||
|
||||
if (frame)
|
||||
side_data = av_frame_get_side_data(frame, AV_FRAME_DATA_A53_CC);
|
||||
|
||||
if (!side_data) {
|
||||
*data = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*sei_size = side_data->size + 11;
|
||||
*data = av_mallocz(*sei_size + prefix_len);
|
||||
if (!*data)
|
||||
return AVERROR(ENOMEM);
|
||||
sei_data = (uint8_t*)*data + prefix_len;
|
||||
|
||||
// country code
|
||||
sei_data[0] = 181;
|
||||
sei_data[1] = 0;
|
||||
sei_data[2] = 49;
|
||||
|
||||
/**
|
||||
* 'GA94' is standard in North America for ATSC, but hard coding
|
||||
* this style may not be the right thing to do -- other formats
|
||||
* do exist. This information is not available in the side_data
|
||||
* so we are going with this right now.
|
||||
*/
|
||||
AV_WL32(sei_data + 3, MKTAG('G', 'A', '9', '4'));
|
||||
sei_data[7] = 3;
|
||||
sei_data[8] = ((side_data->size/3) & 0x1f) | 0x40;
|
||||
sei_data[9] = 0;
|
||||
|
||||
memcpy(sei_data + 10, side_data->data, side_data->size);
|
||||
|
||||
sei_data[side_data->size+10] = 255;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user