|
|
|
@ -20,6 +20,7 @@ |
|
|
|
|
|
|
|
|
|
#include "libavutil/avassert.h" |
|
|
|
|
#include "libavutil/avstring.h" |
|
|
|
|
#include "libavutil/bprint.h" |
|
|
|
|
#include "libavutil/intreadwrite.h" |
|
|
|
|
#include "libavutil/opt.h" |
|
|
|
|
#include "libavutil/parseutils.h" |
|
|
|
@ -386,18 +387,18 @@ static int concat_read_close(AVFormatContext *avf) |
|
|
|
|
static int concat_read_header(AVFormatContext *avf) |
|
|
|
|
{ |
|
|
|
|
ConcatContext *cat = avf->priv_data; |
|
|
|
|
uint8_t buf[4096]; |
|
|
|
|
AVBPrint bp; |
|
|
|
|
uint8_t *cursor, *keyword; |
|
|
|
|
int ret, line = 0, i; |
|
|
|
|
int line = 0, i; |
|
|
|
|
unsigned nb_files_alloc = 0; |
|
|
|
|
ConcatFile *file = NULL; |
|
|
|
|
int64_t time = 0; |
|
|
|
|
int64_t ret, time = 0; |
|
|
|
|
|
|
|
|
|
while (1) { |
|
|
|
|
if ((ret = ff_get_line(avf->pb, buf, sizeof(buf))) <= 0) |
|
|
|
|
break; |
|
|
|
|
av_bprint_init(&bp, 0, AV_BPRINT_SIZE_UNLIMITED); |
|
|
|
|
|
|
|
|
|
while ((ret = ff_read_line_to_bprint_overwrite(avf->pb, &bp)) >= 0) { |
|
|
|
|
line++; |
|
|
|
|
cursor = buf; |
|
|
|
|
cursor = bp.str; |
|
|
|
|
keyword = get_keyword(&cursor); |
|
|
|
|
if (!*keyword || *keyword == '#') |
|
|
|
|
continue; |
|
|
|
@ -473,7 +474,7 @@ static int concat_read_header(AVFormatContext *avf) |
|
|
|
|
FAIL(AVERROR_INVALIDDATA); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (ret < 0) |
|
|
|
|
if (ret != AVERROR_EOF && ret < 0) |
|
|
|
|
goto fail; |
|
|
|
|
if (!cat->nb_files) |
|
|
|
|
FAIL(AVERROR_INVALIDDATA); |
|
|
|
@ -499,9 +500,11 @@ static int concat_read_header(AVFormatContext *avf) |
|
|
|
|
MATCH_ONE_TO_ONE; |
|
|
|
|
if ((ret = open_file(avf, 0)) < 0) |
|
|
|
|
goto fail; |
|
|
|
|
av_bprint_finalize(&bp, NULL); |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
fail: |
|
|
|
|
av_bprint_finalize(&bp, NULL); |
|
|
|
|
concat_read_close(avf); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|