diff options
author | Marton Balint <cus@passwd.hu> | 2019-02-23 00:09:12 +0100 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2019-03-01 22:30:13 +0100 |
commit | fe36dcbff20e5a6eae8abbc0dd1a3a68df640ea6 (patch) | |
tree | 14e9877790056f5e9ba26df4205e51c0e51167e8 /libavformat/mpegtsenc.c | |
parent | 007c13e51e737ceb7bc05f2e5eef4ef1e1aded7b (diff) | |
download | ffmpeg-fe36dcbff20e5a6eae8abbc0dd1a3a68df640ea6.tar.gz |
avformat/mpegtsenc: factorize writing registration_descriptor
Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavformat/mpegtsenc.c')
-rw-r--r-- | libavformat/mpegtsenc.c | 50 |
1 files changed, 18 insertions, 32 deletions
diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 35a72002c8..099d003f42 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -270,6 +270,18 @@ static void putbuf(uint8_t **q_ptr, const uint8_t *buf, size_t len) *q_ptr += len; } +static void put_registration_descriptor(uint8_t **q_ptr, uint32_t tag) +{ + uint8_t *q = *q_ptr; + *q++ = 0x05; /* MPEG-2 registration descriptor*/ + *q++ = 4; + *q++ = tag; + *q++ = tag >> 8; + *q++ = tag >> 16; + *q++ = tag >> 24; + *q_ptr = q; +} + static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) { MpegTSWrite *ts = s->priv_data; @@ -396,14 +408,8 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) *q++=1; // 1 byte, all flags sets to 0 *q++=0; // omit all fields... } - if (st->codecpar->codec_id==AV_CODEC_ID_S302M) { - *q++ = 0x05; /* MPEG-2 registration descriptor*/ - *q++ = 4; - *q++ = 'B'; - *q++ = 'S'; - *q++ = 'S'; - *q++ = 'D'; - } + if (st->codecpar->codec_id==AV_CODEC_ID_S302M) + put_registration_descriptor(&q, MKTAG('B', 'S', 'S', 'D')); if (st->codecpar->codec_id==AV_CODEC_ID_OPUS) { /* 6 bytes registration descriptor, 4 bytes Opus audio descriptor */ if (q - data > SECTION_LENGTH - 6 - 4) { @@ -411,12 +417,7 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) break; } - *q++ = 0x05; /* MPEG-2 registration descriptor*/ - *q++ = 4; - *q++ = 'O'; - *q++ = 'p'; - *q++ = 'u'; - *q++ = 's'; + put_registration_descriptor(&q, MKTAG('O', 'p', 'u', 's')); *q++ = 0x7f; /* DVB extension descriptor */ *q++ = 2; @@ -602,29 +603,14 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) break; case AVMEDIA_TYPE_VIDEO: if (stream_type == STREAM_TYPE_VIDEO_DIRAC) { - *q++ = 0x05; /*MPEG-2 registration descriptor*/ - *q++ = 4; - *q++ = 'd'; - *q++ = 'r'; - *q++ = 'a'; - *q++ = 'c'; + put_registration_descriptor(&q, MKTAG('d', 'r', 'a', 'c')); } else if (stream_type == STREAM_TYPE_VIDEO_VC1) { - *q++ = 0x05; /*MPEG-2 registration descriptor*/ - *q++ = 4; - *q++ = 'V'; - *q++ = 'C'; - *q++ = '-'; - *q++ = '1'; + put_registration_descriptor(&q, MKTAG('V', 'C', '-', '1')); } break; case AVMEDIA_TYPE_DATA: if (st->codecpar->codec_id == AV_CODEC_ID_SMPTE_KLV) { - *q++ = 0x05; /* MPEG-2 registration descriptor */ - *q++ = 4; - *q++ = 'K'; - *q++ = 'L'; - *q++ = 'V'; - *q++ = 'A'; + put_registration_descriptor(&q, MKTAG('K', 'L', 'V', 'A')); } else if (st->codecpar->codec_id == AV_CODEC_ID_TIMED_ID3) { const char *tag = "ID3 "; *q++ = 0x26; /* metadata descriptor */ |