[FFmpeg-devel] [PATCH] avformat/matroskadec: retain error codes in matroska_resync() and matroska_read_packet()
Benoit Fouet
benoit.fouet at free.fr
Fri Sep 23 11:40:07 EEST 2016
Hi,
On 22/09/2016 23:03, Sophia Wang wrote:
> Signed-off-by: Sophia Wang <skw at google.com>
> ---
> libavformat/matroskadec.c | 13 ++++++++-----
> 1 file changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
> index 77b8a5d..936690d 100644
> --- a/libavformat/matroskadec.c
> +++ b/libavformat/matroskadec.c
> @@ -738,13 +738,16 @@ static int matroska_read_close(AVFormatContext *s);
> static int matroska_resync(MatroskaDemuxContext *matroska, int64_t last_pos)
> {
> AVIOContext *pb = matroska->ctx->pb;
> + int64_t ret;
> uint32_t id;
> matroska->current_id = 0;
> matroska->num_levels = 0;
>
> /* seek to next position to resync from */
> - if (avio_seek(pb, last_pos + 1, SEEK_SET) < 0)
> - goto eof;
> + if ((ret = avio_seek(pb, last_pos + 1, SEEK_SET)) < 0) {
> + matroska->done = 1;
> + return ret;
doesn't this generate a warning, returning an int64 from a function
supposed to return an int?
> + }
>
> id = avio_rb32(pb);
>
> @@ -760,7 +763,6 @@ static int matroska_resync(MatroskaDemuxContext *matroska, int64_t last_pos)
> id = (id << 8) | avio_r8(pb);
> }
>
> -eof:
> matroska->done = 1;
> return AVERROR_EOF;
> }
> @@ -3317,13 +3319,14 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
> static int matroska_read_packet(AVFormatContext *s, AVPacket *pkt)
> {
> MatroskaDemuxContext *matroska = s->priv_data;
> + int ret = 0;
>
> while (matroska_deliver_packet(matroska, pkt)) {
> int64_t pos = avio_tell(matroska->ctx->pb);
> if (matroska->done)
> - return AVERROR_EOF;
> + return (ret < 0) ? ret : AVERROR_EOF;
> if (matroska_parse_cluster(matroska) < 0)
> - matroska_resync(matroska, pos);
> + ret = matroska_resync(matroska, pos);
> }
>
> return 0;
You might want to return ret instead of 0 here.
--
Ben
More information about the ffmpeg-devel
mailing list