mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-25 08:42:39 +00:00
avconv: fix parsing bitstream filters
The current code modifies the user-supplied string, which is shared for the whole output file. So a bitstream filter specification applied to multiple streams would not work correctly.
This commit is contained in:
parent
80fb19bc23
commit
fe7b21c8f1
18
avconv_opt.c
18
avconv_opt.c
@ -941,7 +941,8 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
|
|||||||
OutputStream *ost;
|
OutputStream *ost;
|
||||||
AVStream *st = avformat_new_stream(oc, NULL);
|
AVStream *st = avformat_new_stream(oc, NULL);
|
||||||
int idx = oc->nb_streams - 1, ret = 0;
|
int idx = oc->nb_streams - 1, ret = 0;
|
||||||
char *bsf = NULL, *next, *codec_tag = NULL;
|
const char *bsfs = NULL;
|
||||||
|
char *next, *codec_tag = NULL;
|
||||||
double qscale = -1;
|
double qscale = -1;
|
||||||
|
|
||||||
if (!st) {
|
if (!st) {
|
||||||
@ -1007,18 +1008,21 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
|
|||||||
ost->max_frames = INT64_MAX;
|
ost->max_frames = INT64_MAX;
|
||||||
MATCH_PER_STREAM_OPT(max_frames, i64, ost->max_frames, oc, st);
|
MATCH_PER_STREAM_OPT(max_frames, i64, ost->max_frames, oc, st);
|
||||||
|
|
||||||
MATCH_PER_STREAM_OPT(bitstream_filters, str, bsf, oc, st);
|
MATCH_PER_STREAM_OPT(bitstream_filters, str, bsfs, oc, st);
|
||||||
while (bsf) {
|
while (bsfs && *bsfs) {
|
||||||
const AVBitStreamFilter *filter;
|
const AVBitStreamFilter *filter;
|
||||||
|
char *bsf;
|
||||||
|
|
||||||
if (next = strchr(bsf, ','))
|
bsf = av_get_token(&bsfs, ",");
|
||||||
*next++ = 0;
|
if (!bsf)
|
||||||
|
exit_program(1);
|
||||||
|
|
||||||
filter = av_bsf_get_by_name(bsf);
|
filter = av_bsf_get_by_name(bsf);
|
||||||
if (!filter) {
|
if (!filter) {
|
||||||
av_log(NULL, AV_LOG_FATAL, "Unknown bitstream filter %s\n", bsf);
|
av_log(NULL, AV_LOG_FATAL, "Unknown bitstream filter %s\n", bsf);
|
||||||
exit_program(1);
|
exit_program(1);
|
||||||
}
|
}
|
||||||
|
av_freep(&bsf);
|
||||||
|
|
||||||
ost->bitstream_filters = av_realloc_array(ost->bitstream_filters,
|
ost->bitstream_filters = av_realloc_array(ost->bitstream_filters,
|
||||||
ost->nb_bitstream_filters + 1,
|
ost->nb_bitstream_filters + 1,
|
||||||
@ -1027,8 +1031,8 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
|
|||||||
exit_program(1);
|
exit_program(1);
|
||||||
|
|
||||||
ost->bitstream_filters[ost->nb_bitstream_filters++] = filter;
|
ost->bitstream_filters[ost->nb_bitstream_filters++] = filter;
|
||||||
|
if (*bsfs)
|
||||||
bsf = next;
|
bsfs++;
|
||||||
}
|
}
|
||||||
|
|
||||||
MATCH_PER_STREAM_OPT(codec_tags, str, codec_tag, oc, st);
|
MATCH_PER_STREAM_OPT(codec_tags, str, codec_tag, oc, st);
|
||||||
|
Loading…
Reference in New Issue
Block a user