Commit fe36dcbf authored by Marton Balint's avatar Marton Balint

avformat/mpegtsenc: factorize writing registration_descriptor

Signed-off-by: 's avatarMarton Balint <cus@passwd.hu>
parent 007c13e5
...@@ -270,6 +270,18 @@ static void putbuf(uint8_t **q_ptr, const uint8_t *buf, size_t len) ...@@ -270,6 +270,18 @@ static void putbuf(uint8_t **q_ptr, const uint8_t *buf, size_t len)
*q_ptr += 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) static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
{ {
MpegTSWrite *ts = s->priv_data; MpegTSWrite *ts = s->priv_data;
...@@ -396,14 +408,8 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) ...@@ -396,14 +408,8 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
*q++=1; // 1 byte, all flags sets to 0 *q++=1; // 1 byte, all flags sets to 0
*q++=0; // omit all fields... *q++=0; // omit all fields...
} }
if (st->codecpar->codec_id==AV_CODEC_ID_S302M) { if (st->codecpar->codec_id==AV_CODEC_ID_S302M)
*q++ = 0x05; /* MPEG-2 registration descriptor*/ put_registration_descriptor(&q, MKTAG('B', 'S', 'S', 'D'));
*q++ = 4;
*q++ = 'B';
*q++ = 'S';
*q++ = 'S';
*q++ = 'D';
}
if (st->codecpar->codec_id==AV_CODEC_ID_OPUS) { if (st->codecpar->codec_id==AV_CODEC_ID_OPUS) {
/* 6 bytes registration descriptor, 4 bytes Opus audio descriptor */ /* 6 bytes registration descriptor, 4 bytes Opus audio descriptor */
if (q - data > SECTION_LENGTH - 6 - 4) { if (q - data > SECTION_LENGTH - 6 - 4) {
...@@ -411,12 +417,7 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) ...@@ -411,12 +417,7 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
break; break;
} }
*q++ = 0x05; /* MPEG-2 registration descriptor*/ put_registration_descriptor(&q, MKTAG('O', 'p', 'u', 's'));
*q++ = 4;
*q++ = 'O';
*q++ = 'p';
*q++ = 'u';
*q++ = 's';
*q++ = 0x7f; /* DVB extension descriptor */ *q++ = 0x7f; /* DVB extension descriptor */
*q++ = 2; *q++ = 2;
...@@ -602,29 +603,14 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) ...@@ -602,29 +603,14 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
break; break;
case AVMEDIA_TYPE_VIDEO: case AVMEDIA_TYPE_VIDEO:
if (stream_type == STREAM_TYPE_VIDEO_DIRAC) { if (stream_type == STREAM_TYPE_VIDEO_DIRAC) {
*q++ = 0x05; /*MPEG-2 registration descriptor*/ put_registration_descriptor(&q, MKTAG('d', 'r', 'a', 'c'));
*q++ = 4;
*q++ = 'd';
*q++ = 'r';
*q++ = 'a';
*q++ = 'c';
} else if (stream_type == STREAM_TYPE_VIDEO_VC1) { } else if (stream_type == STREAM_TYPE_VIDEO_VC1) {
*q++ = 0x05; /*MPEG-2 registration descriptor*/ put_registration_descriptor(&q, MKTAG('V', 'C', '-', '1'));
*q++ = 4;
*q++ = 'V';
*q++ = 'C';
*q++ = '-';
*q++ = '1';
} }
break; break;
case AVMEDIA_TYPE_DATA: case AVMEDIA_TYPE_DATA:
if (st->codecpar->codec_id == AV_CODEC_ID_SMPTE_KLV) { if (st->codecpar->codec_id == AV_CODEC_ID_SMPTE_KLV) {
*q++ = 0x05; /* MPEG-2 registration descriptor */ put_registration_descriptor(&q, MKTAG('K', 'L', 'V', 'A'));
*q++ = 4;
*q++ = 'K';
*q++ = 'L';
*q++ = 'V';
*q++ = 'A';
} else if (st->codecpar->codec_id == AV_CODEC_ID_TIMED_ID3) { } else if (st->codecpar->codec_id == AV_CODEC_ID_TIMED_ID3) {
const char *tag = "ID3 "; const char *tag = "ID3 ";
*q++ = 0x26; /* metadata descriptor */ *q++ = 0x26; /* metadata descriptor */
......
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