mirror of https://git.ffmpeg.org/ffmpeg.git
avformat/mpegtsenc: refact mpegts_check_bitstream to loop up table
Signed-off-by: Marton Balint <cus@passwd.hu> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
aa3155e4c2
commit
8559cce3c3
|
@ -2257,23 +2257,26 @@ static void mpegts_deinit(AVFormatContext *s)
|
|||
static int mpegts_check_bitstream(AVFormatContext *s, AVStream *st,
|
||||
const AVPacket *pkt)
|
||||
{
|
||||
int ret = 1;
|
||||
const struct Entry {
|
||||
enum AVCodecID id;
|
||||
const char *bsf_name;
|
||||
uint8_t mask;
|
||||
uint8_t value;
|
||||
} list[] = {
|
||||
{ AV_CODEC_ID_H264, "h264_mp4toannexb", 0xff, 0x01 /* configurationVersion in AVCDecoderConfigurationRecord */},
|
||||
{ AV_CODEC_ID_HEVC, "hevc_mp4toannexb", 0xff, 0x01 /* configurationVersion in HEVCDecoderConfigurationRecord */},
|
||||
};
|
||||
|
||||
if (st->codecpar->codec_id == AV_CODEC_ID_H264) {
|
||||
if (pkt->size >= 5 && AV_RB32(pkt->data) != 0x0000001 &&
|
||||
for (int i = 0; i < FF_ARRAY_ELEMS(list); i++) {
|
||||
const struct Entry *e = list + i;
|
||||
if (e->id == st->codecpar->codec_id &&
|
||||
pkt->size >= 5 && AV_RB32(pkt->data) != 0x0000001 &&
|
||||
(AV_RB24(pkt->data) != 0x000001 ||
|
||||
(st->codecpar->extradata_size > 0 &&
|
||||
st->codecpar->extradata[0] == 1)))
|
||||
ret = ff_stream_add_bitstream_filter(st, "h264_mp4toannexb", NULL);
|
||||
} else if (st->codecpar->codec_id == AV_CODEC_ID_HEVC) {
|
||||
if (pkt->size >= 5 && AV_RB32(pkt->data) != 0x0000001 &&
|
||||
(AV_RB24(pkt->data) != 0x000001 ||
|
||||
(st->codecpar->extradata_size > 0 &&
|
||||
st->codecpar->extradata[0] == 1)))
|
||||
ret = ff_stream_add_bitstream_filter(st, "hevc_mp4toannexb", NULL);
|
||||
(st->codecpar->extradata[0] & e->mask == e->value))))
|
||||
return ff_stream_add_bitstream_filter(st, e->bsf_name, NULL);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define OFFSET(x) offsetof(MpegTSWrite, x)
|
||||
|
|
Loading…
Reference in New Issue