Browse Source

avcodec/parser: Don't return pointer to stack buffer

When flushing, the parser receives a dummy buffer with padding
that lives on the stack of av_parser_parse2(). Certain parsers
(e.g. Dolby E) only analyze the input, but don't repack it. When
flushing, such parsers return a pointer to the stack buffer and
a size of 0. And this is also what av_parser_parse2() returns.

Fix this by always resetting poutbuf in case poutbuf_size is zero.

Reviewed-by: James Almer <jamrial@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
(cherry picked from commit 9faf3f8bb0)
tags/n4.4
Andreas Rheinhardt 4 years ago
parent
commit
2b114adcf4
1 changed files with 3 additions and 0 deletions
  1. +3
    -0
      libavcodec/parser.c

+ 3
- 0
libavcodec/parser.c View File

@@ -179,6 +179,9 @@ int av_parser_parse2(AVCodecParserContext *s, AVCodecContext *avctx,
/* offset of the next frame */
s->next_frame_offset = s->cur_offset + index;
s->fetch_timestamp = 1;
} else {
/* Don't return a pointer to dummy_buf. */
*poutbuf = NULL;
}
if (index < 0)
index = 0;


Loading…
Cancel
Save