aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-03-29 18:19:43 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-04-02 12:06:56 +0200
commit968c158abde36ebb7520706a69eebe3e8eacbd81 (patch)
tree71c6932bd2d154852e26ac5268c0c964e98ced32 /libavcodec
parent3d97a0061c723827fda0c1cf28c6f63e7e4cf1b8 (diff)
downloadffmpeg-968c158abde36ebb7520706a69eebe3e8eacbd81.tar.gz
avcodec/ac3enc: Use actual size of buffer in init_put_bits()
Since the very beginning (since de6d9b6404bfd1c589799142da5a95428f146edd) the AC-3 encoder used AC3_MAX_CODED_FRAME_SIZE (namely 3840) for the size of the output buffer (without any check at all). This causes problems when encoding EAC-3 for which the maximum is too small, smaller than the actual size of the buffer: One can run into asserts used by the PutBits API. Ticket #8513 is about such a case and this commit fixes it by using the real size of the buffer. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/ac3.h1
-rw-r--r--libavcodec/ac3enc.c2
2 files changed, 1 insertions, 2 deletions
diff --git a/libavcodec/ac3.h b/libavcodec/ac3.h
index f8f6a81f45..e358f8d9e3 100644
--- a/libavcodec/ac3.h
+++ b/libavcodec/ac3.h
@@ -27,7 +27,6 @@
#ifndef AVCODEC_AC3_H
#define AVCODEC_AC3_H
-#define AC3_MAX_CODED_FRAME_SIZE 3840 /* in bytes */
#define EAC3_MAX_CHANNELS 16 /**< maximum number of channels in EAC3 */
#define AC3_MAX_CHANNELS 7 /**< maximum number of channels, including coupling channel */
#define CPL_CH 0 /**< coupling channel index */
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index 8044e6dcd0..4cfd0afe12 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -1729,7 +1729,7 @@ static void ac3_output_frame(AC3EncodeContext *s, unsigned char *frame)
{
int blk;
- init_put_bits(&s->pb, frame, AC3_MAX_CODED_FRAME_SIZE);
+ init_put_bits(&s->pb, frame, s->frame_size);
s->output_frame_header(s);