[FFmpeg-devel] [PATCH 2/3] nutdec: stop skipping bytes at EOF

Michael Niedermayer michaelni at gmx.at
Wed May 20 03:15:06 CEST 2015


On Wed, May 20, 2015 at 12:49:55AM +0200, Andreas Cadhalpun wrote:
> This can unnecessarily waste a lot of time.
> 
> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
> ---
>  libavformat/nutdec.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c
> index a75587f..e979ee6 100644
> --- a/libavformat/nutdec.c
> +++ b/libavformat/nutdec.c
> @@ -47,6 +47,8 @@ static int get_str(AVIOContext *bc, char *string, unsigned int maxlen)
>      while (len > maxlen) {
>          avio_r8(bc);
>          len--;
> +        if (bc->eof_reached)
> +            len = maxlen;
>      }

maybe this would be better as avio_skip()
but ok either way


>  
>      if (maxlen)
> @@ -211,7 +213,7 @@ static int skip_reserved(AVIOContext *bc, int64_t pos)
>          avio_seek(bc, pos, SEEK_CUR);
>          return AVERROR_INVALIDDATA;
>      } else {
> -        while (pos--)
> +        while (pos-- && !bc->eof_reached)
>              avio_r8(bc);
>          return 0;
>      }
> @@ -291,7 +293,7 @@ static int decode_main_header(NUTContext *nut)
>          if (tmp_fields > 7)
>              tmp_head_idx = ffio_read_varlen(bc);
>  
> -        while (tmp_fields-- > 8)
> +        while (tmp_fields-- > 8 && !bc->eof_reached)
>              ffio_read_varlen(bc);
>  
>          if (count <= 0 || count > 256 - (i <= 'N') - i) {
> @@ -990,7 +992,7 @@ static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id,
>          *header_idx = ffio_read_varlen(bc);
>      if (flags & FLAG_RESERVED)
>          reserved_count = ffio_read_varlen(bc);
> -    for (i = 0; i < reserved_count; i++)
> +    for (i = 0; i < reserved_count && !bc->eof_reached; i++)
>          ffio_read_varlen(bc);

these should return an error in the eof case
the first of the 3 could use a seek/skip as well possibly

also if you want some of these things could also be limited by te
packet end from get_packetheader and not just EOF

[..]
--
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

it is not once nor twice but times without number that the same ideas make
their appearance in the world. -- Aristotle
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150520/c8a24490/attachment.asc>


More information about the ffmpeg-devel mailing list