|
|
|
@ -288,33 +288,55 @@ static int parse_filename(char *filename, char **representation_id, |
|
|
|
|
char *period_pos = NULL; |
|
|
|
|
char *temp_pos = NULL; |
|
|
|
|
char *filename_str = av_strdup(filename); |
|
|
|
|
if (!filename_str) return AVERROR(ENOMEM); |
|
|
|
|
int ret = 0; |
|
|
|
|
|
|
|
|
|
if (!filename_str) { |
|
|
|
|
ret = AVERROR(ENOMEM); |
|
|
|
|
goto end; |
|
|
|
|
} |
|
|
|
|
temp_pos = av_stristr(filename_str, "_"); |
|
|
|
|
while (temp_pos) { |
|
|
|
|
underscore_pos = temp_pos + 1; |
|
|
|
|
temp_pos = av_stristr(temp_pos + 1, "_"); |
|
|
|
|
} |
|
|
|
|
if (!underscore_pos) return AVERROR_INVALIDDATA; |
|
|
|
|
if (!underscore_pos) { |
|
|
|
|
ret = AVERROR_INVALIDDATA; |
|
|
|
|
goto end; |
|
|
|
|
} |
|
|
|
|
period_pos = av_stristr(underscore_pos, "."); |
|
|
|
|
if (!period_pos) return AVERROR_INVALIDDATA; |
|
|
|
|
if (!period_pos) { |
|
|
|
|
ret = AVERROR_INVALIDDATA; |
|
|
|
|
goto end; |
|
|
|
|
} |
|
|
|
|
*(underscore_pos - 1) = 0; |
|
|
|
|
if (representation_id) { |
|
|
|
|
*representation_id = av_malloc(period_pos - underscore_pos + 1); |
|
|
|
|
if (!(*representation_id)) return AVERROR(ENOMEM); |
|
|
|
|
if (!(*representation_id)) { |
|
|
|
|
ret = AVERROR(ENOMEM); |
|
|
|
|
goto end; |
|
|
|
|
} |
|
|
|
|
av_strlcpy(*representation_id, underscore_pos, period_pos - underscore_pos + 1); |
|
|
|
|
} |
|
|
|
|
if (initialization_pattern) { |
|
|
|
|
*initialization_pattern = av_asprintf("%s_$RepresentationID$.hdr", |
|
|
|
|
filename_str); |
|
|
|
|
if (!(*initialization_pattern)) return AVERROR(ENOMEM); |
|
|
|
|
if (!(*initialization_pattern)) { |
|
|
|
|
ret = AVERROR(ENOMEM); |
|
|
|
|
goto end; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (media_pattern) { |
|
|
|
|
*media_pattern = av_asprintf("%s_$RepresentationID$_$Number$.chk", |
|
|
|
|
filename_str); |
|
|
|
|
if (!(*media_pattern)) return AVERROR(ENOMEM); |
|
|
|
|
if (!(*media_pattern)) { |
|
|
|
|
ret = AVERROR(ENOMEM); |
|
|
|
|
goto end; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
av_free(filename_str); |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
end: |
|
|
|
|
av_freep(&filename_str); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|