mirror of
https://github.com/mpv-player/mpv
synced 2024-12-22 23:02:37 +00:00
af_lavcac3enc: fix assert failure "s->expect_len <= s->pending_data_size"
The code handling input format negotiation incorrectly used the bps value of the suggested input format instead of the format it was going to actually use. As a result the player could abort with the above assertion failure. Fix.
This commit is contained in:
parent
7a669a6407
commit
c3b6850e81
@ -70,17 +70,6 @@ static int control(struct af_instance_s *af, int cmd, void *arg)
|
|||||||
if (AF_FORMAT_IS_AC3(data->format) || data->nch < s->min_channel_num)
|
if (AF_FORMAT_IS_AC3(data->format) || data->nch < s->min_channel_num)
|
||||||
return AF_DETACH;
|
return AF_DETACH;
|
||||||
|
|
||||||
s->pending_len = 0;
|
|
||||||
s->expect_len = AC3_FRAME_SIZE * data->nch * data->bps;
|
|
||||||
assert(s->expect_len <= s->pending_data_size);
|
|
||||||
if (s->add_iec61937_header)
|
|
||||||
af->mul = (double)AC3_FRAME_SIZE * 2 * 2 / s->expect_len;
|
|
||||||
else
|
|
||||||
af->mul = (double)AC3_MAX_CODED_FRAME_SIZE / s->expect_len;
|
|
||||||
|
|
||||||
mp_msg(MSGT_AFILTER, MSGL_DBG2, "af_lavcac3enc reinit: %d, %d, %f, %d.\n",
|
|
||||||
data->nch, data->rate, af->mul, s->expect_len);
|
|
||||||
|
|
||||||
af->data->format = AF_FORMAT_S16_NE;
|
af->data->format = AF_FORMAT_S16_NE;
|
||||||
if (data->rate == 48000 || data->rate == 44100 || data->rate == 32000)
|
if (data->rate == 48000 || data->rate == 44100 || data->rate == 32000)
|
||||||
af->data->rate = data->rate;
|
af->data->rate = data->rate;
|
||||||
@ -93,6 +82,17 @@ static int control(struct af_instance_s *af, int cmd, void *arg)
|
|||||||
af->data->bps = 2;
|
af->data->bps = 2;
|
||||||
test_output_res = af_test_output(af, data);
|
test_output_res = af_test_output(af, data);
|
||||||
|
|
||||||
|
s->pending_len = 0;
|
||||||
|
s->expect_len = AC3_FRAME_SIZE * data->nch * af->data->bps;
|
||||||
|
assert(s->expect_len <= s->pending_data_size);
|
||||||
|
if (s->add_iec61937_header)
|
||||||
|
af->mul = (double)AC3_FRAME_SIZE * 2 * 2 / s->expect_len;
|
||||||
|
else
|
||||||
|
af->mul = (double)AC3_MAX_CODED_FRAME_SIZE / s->expect_len;
|
||||||
|
|
||||||
|
mp_msg(MSGT_AFILTER, MSGL_DBG2, "af_lavcac3enc reinit: %d, %d, %f, %d.\n",
|
||||||
|
data->nch, data->rate, af->mul, s->expect_len);
|
||||||
|
|
||||||
bit_rate = s->bit_rate ? s->bit_rate : default_bit_rate[af->data->nch];
|
bit_rate = s->bit_rate ? s->bit_rate : default_bit_rate[af->data->nch];
|
||||||
|
|
||||||
if (s->lavc_actx->channels != af->data->nch ||
|
if (s->lavc_actx->channels != af->data->nch ||
|
||||||
|
Loading…
Reference in New Issue
Block a user