@ -173,17 +173,17 @@ typedef struct VariantStream {
unsigned int nb_streams ;
int m3u8_created ; /* status of media play-list creation */
int is_default ; /* default status of audio group */
char * language ; /* audio lauguage name */
char * agroup ; /* audio group name */
char * sgroup ; /* subtitle group name */
char * ccgroup ; /* closed caption group name */
char * varname ; // variant name
const char * language ; /* audio lauguage name */
const char * agroup ; /* audio group name */
const char * sgroup ; /* subtitle group name */
const char * ccgroup ; /* closed caption group name */
const char * varname ; /* variant name */
} VariantStream ;
typedef struct ClosedCaptionsStream {
char * ccgroup ; /* closed caption group name */
char * instreamid ; /* closed captions INSTREAM-ID */
char * language ; /* closed captions langauge */
const char * ccgroup ; /* closed caption group name */
const char * instreamid ; /* closed captions INSTREAM-ID */
const char * language ; /* closed captions langauge */
} ClosedCaptionsStream ;
typedef struct HLSContext {
@ -1290,8 +1290,8 @@ static int create_master_playlist(AVFormatContext *s,
int ret , bandwidth ;
const char * m3u8_rel_name = NULL ;
const char * vtt_m3u8_rel_name = NULL ;
char * ccgroup ;
char * sgroup = NULL ;
const char * ccgroup ;
const char * sgroup = NULL ;
ClosedCaptionsStream * ccs ;
const char * proto = avio_find_protocol_name ( hls - > master_m3u8_url ) ;
int is_file_proto = proto & & ! strcmp ( proto , " file " ) ;
@ -1962,10 +1962,7 @@ static int parse_variant_stream_mapstring(AVFormatContext *s)
char * end ;
varstr = NULL ;
if ( av_strstart ( keyval , " language: " , & val ) ) {
av_free ( vs - > language ) ;
vs - > language = av_strdup ( val ) ;
if ( ! vs - > language )
return AVERROR ( ENOMEM ) ;
vs - > language = val ;
continue ;
} else if ( av_strstart ( keyval , " default: " , & val ) ) {
vs - > is_default = ( ! av_strncasecmp ( val , " YES " , strlen ( " YES " ) ) | |
@ -1973,28 +1970,16 @@ static int parse_variant_stream_mapstring(AVFormatContext *s)
hls - > has_default_key = 1 ;
continue ;
} else if ( av_strstart ( keyval , " name: " , & val ) ) {
av_free ( vs - > varname ) ;
vs - > varname = av_strdup ( val ) ;
if ( ! vs - > varname )
return AVERROR ( ENOMEM ) ;
vs - > varname = val ;
continue ;
} else if ( av_strstart ( keyval , " agroup: " , & val ) ) {
av_free ( vs - > agroup ) ;
vs - > agroup = av_strdup ( val ) ;
if ( ! vs - > agroup )
return AVERROR ( ENOMEM ) ;
vs - > agroup = val ;
continue ;
} else if ( av_strstart ( keyval , " sgroup: " , & val ) ) {
av_free ( vs - > sgroup ) ;
vs - > sgroup = av_strdup ( val ) ;
if ( ! vs - > sgroup )
return AVERROR ( ENOMEM ) ;
vs - > sgroup = val ;
continue ;
} else if ( av_strstart ( keyval , " ccgroup: " , & val ) ) {
av_free ( vs - > ccgroup ) ;
vs - > ccgroup = av_strdup ( val ) ;
if ( ! vs - > ccgroup )
return AVERROR ( ENOMEM ) ;
vs - > ccgroup = val ;
continue ;
} else if ( av_strstart ( keyval , " v: " , & val ) ) {
codec_type = AVMEDIA_TYPE_VIDEO ;
@ -2085,20 +2070,11 @@ static int parse_cc_stream_mapstring(AVFormatContext *s)
ccstr = NULL ;
if ( av_strstart ( keyval , " ccgroup: " , & val ) ) {
av_free ( ccs - > ccgroup ) ;
ccs - > ccgroup = av_strdup ( val ) ;
if ( ! ccs - > ccgroup )
return AVERROR ( ENOMEM ) ;
ccs - > ccgroup = val ;
} else if ( av_strstart ( keyval , " instreamid: " , & val ) ) {
av_free ( ccs - > instreamid ) ;
ccs - > instreamid = av_strdup ( val ) ;
if ( ! ccs - > instreamid )
return AVERROR ( ENOMEM ) ;
ccs - > instreamid = val ;
} else if ( av_strstart ( keyval , " language: " , & val ) ) {
av_free ( ccs - > language ) ;
ccs - > language = av_strdup ( val ) ;
if ( ! ccs - > language )
return AVERROR ( ENOMEM ) ;
ccs - > language = val ;
} else {
av_log ( s , AV_LOG_ERROR , " Invalid keyval %s \n " , keyval ) ;
return AVERROR ( EINVAL ) ;
@ -2162,9 +2138,7 @@ static int update_variant_stream_info(AVFormatContext *s)
//by default, the first available ccgroup is mapped to the variant stream
if ( hls - > nb_ccstreams ) {
hls - > var_streams [ 0 ] . ccgroup = av_strdup ( hls - > cc_streams [ 0 ] . ccgroup ) ;
if ( ! hls - > var_streams [ 0 ] . ccgroup )
return AVERROR ( ENOMEM ) ;
hls - > var_streams [ 0 ] . ccgroup = hls - > cc_streams [ 0 ] . ccgroup ;
}
for ( i = 0 ; i < s - > nb_streams ; i + + )
@ -2576,19 +2550,6 @@ static void hls_deinit(AVFormatContext *s)
hls_free_segments ( vs - > old_segments ) ;
av_freep ( & vs - > m3u8_name ) ;
av_freep ( & vs - > streams ) ;
av_freep ( & vs - > agroup ) ;
av_freep ( & vs - > sgroup ) ;
av_freep ( & vs - > language ) ;
av_freep ( & vs - > ccgroup ) ;
av_freep ( & vs - > varname ) ;
}
for ( i = 0 ; i < hls - > nb_ccstreams ; i + + ) {
ClosedCaptionsStream * ccs = & hls - > cc_streams [ i ] ;
av_freep ( & ccs - > ccgroup ) ;
av_freep ( & ccs - > instreamid ) ;
av_freep ( & ccs - > language ) ;
}
ff_format_io_close ( s , & hls - > m3u8_out ) ;