@ -265,7 +265,7 @@ static void mpegts_write_pat(AVFormatContext *s)
}
/* NOTE: !str is accepted for an empty string */
static void putstr8 ( uint8_t * * q_ptr , const char * str )
static void putstr8 ( uint8_t * * q_ptr , const char * str , int write_len )
{
uint8_t * q ;
int len ;
@ -275,7 +275,8 @@ static void putstr8(uint8_t **q_ptr, const char *str)
len = 0 ;
else
len = strlen ( str ) ;
* q + + = len ;
if ( write_len )
* q + + = len ;
memcpy ( q , str , len ) ;
q + = len ;
* q_ptr = q ;
@ -637,12 +638,15 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
* q + + = ' V ' ;
* q + + = ' A ' ;
} else if ( st - > codecpar - > codec_id = = AV_CODEC_ID_TIMED_ID3 ) {
* q + + = 0x5 ; /* MPEG-2 registration descriptor */
* q + + = 4 ;
* q + + = ' I ' ;
* q + + = ' D ' ;
* q + + = ' 3 ' ;
* q + + = ' ' ;
const char * tag = " ID3 " ;
* q + + = 0x26 ; /* metadata descriptor */
* q + + = 13 ;
put16 ( & q , 0xffff ) ; /* metadata application format */
putstr8 ( & q , tag , 0 ) ;
* q + + = 0xff ; /* metadata format */
putstr8 ( & q , tag , 0 ) ;
* q + + = 0 ; /* metadata service ID */
* q + + = 0xF ; /* metadata_locator_record_flag|MPEG_carriage_flags|reserved */
}
break ;
}
@ -687,8 +691,8 @@ static void mpegts_write_sdt(AVFormatContext *s)
desc_len_ptr = q ;
q + + ;
* q + + = ts - > service_type ;
putstr8 ( & q , service - > provider_name ) ;
putstr8 ( & q , service - > name ) ;
putstr8 ( & q , service - > provider_name , 1 ) ;
putstr8 ( & q , service - > name , 1 ) ;
desc_len_ptr [ 0 ] = q - desc_len_ptr - 1 ;
/* fill descriptor length */