summaryrefslogtreecommitdiff
path: root/libavformat/mpegtsenc.c
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2019-02-23 00:09:12 +0100
committerMarton Balint <cus@passwd.hu>2019-03-01 22:30:13 +0100
commitfe36dcbff20e5a6eae8abbc0dd1a3a68df640ea6 (patch)
tree14e9877790056f5e9ba26df4205e51c0e51167e8 /libavformat/mpegtsenc.c
parent007c13e51e737ceb7bc05f2e5eef4ef1e1aded7b (diff)
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.c50
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 */