diff options
author | wm4 <wm4@nowhere> | 2016-07-31 18:47:46 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2016-07-31 18:51:05 +0200 |
commit | 48f60e182a61637a2c5d77839f0b174bb6fd7ccb (patch) | |
tree | c42a1a61954c84299cf2aaaac6933fe38fed624e /audio/filter | |
parent | 98af572484dca052a0dbf276ac782f68f6bfbf44 (diff) | |
download | mpv-48f60e182a61637a2c5d77839f0b174bb6fd7ccb.tar.bz2 mpv-48f60e182a61637a2c5d77839f0b174bb6fd7ccb.tar.xz |
af_lavcac3enc: fix aspects of AVFrame handling
We send a refcounted frame to the encoder, but then disrespect
refcounting rules and write to the frame data without making sure the
buffer is really writeable.
In theory this can lead to reallocation on every frame is the encoder
really keeps a reference. If we really cared, we could fix this by
providing a buffer pool. But then again, we don't care.
Diffstat (limited to 'audio/filter')
-rw-r--r-- | audio/filter/af_lavcac3enc.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/audio/filter/af_lavcac3enc.c b/audio/filter/af_lavcac3enc.c index 31b84e1528..44a2231836 100644 --- a/audio/filter/af_lavcac3enc.c +++ b/audio/filter/af_lavcac3enc.c @@ -232,6 +232,9 @@ static bool fill_buffer(struct af_instance *af) af->delay = 0; if (s->pending) { + if (!mp_audio_is_writeable(s->input)) + assert(s->input->samples == 0); // we can't have sent a partial frame + mp_audio_realloc_min(s->input, s->in_samples); int copy = MPMIN(s->in_samples - s->input->samples, s->pending->samples); s->input->samples += copy; mp_audio_copy(s->input, s->input->samples - copy, s->pending, 0, copy); |