diff mbox

[FFmpeg-devel] lavc/utils.c: Make sure skip_samples never goes negative.

Message ID 1478212274-21980-1-git-send-email-isasi@google.com
State Superseded
Headers show

Commit Message

Sasi Inguva Nov. 3, 2016, 10:31 p.m. UTC
Signed-off-by: Sasi Inguva <isasi@google.com>
---
 libavcodec/utils.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Hendrik Leppkes Nov. 3, 2016, 10:41 p.m. UTC | #1
On Thu, Nov 3, 2016 at 11:31 PM, Sasi Inguva
<isasi-at-google.com@ffmpeg.org> wrote:
> Signed-off-by: Sasi Inguva <isasi@google.com>
> ---
>  libavcodec/utils.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> index 87de15f..a33afaa 100644
> --- a/libavcodec/utils.c
> +++ b/libavcodec/utils.c
> @@ -2391,7 +2391,9 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
>
>          if ((frame->flags & AV_FRAME_FLAG_DISCARD) && *got_frame_ptr &&
>              !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) {
> -            avctx->internal->skip_samples -= frame->nb_samples;
> +            if (avctx->internal->skip_samples >= frame->nb_samples) {
> +                avctx->internal->skip_samples -= frame->nb_samples;
> +            }
>              *got_frame_ptr = 0;
>          }
>

Shouldnt skip samples be zeroed then?

Maybe something like:
avctx->internal->skip_samples -= FFMAX(frame->nb_samples,
avctx->internal->skip_samples);

- Hendrik
Sasi Inguva Nov. 4, 2016, 10:31 p.m. UTC | #2
yeah. that is better.

On Thu, Nov 3, 2016 at 3:41 PM, Hendrik Leppkes <h.leppkes@gmail.com> wrote:

> On Thu, Nov 3, 2016 at 11:31 PM, Sasi Inguva
> <isasi-at-google.com@ffmpeg.org> wrote:
> > Signed-off-by: Sasi Inguva <isasi@google.com>
> > ---
> >  libavcodec/utils.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> > index 87de15f..a33afaa 100644
> > --- a/libavcodec/utils.c
> > +++ b/libavcodec/utils.c
> > @@ -2391,7 +2391,9 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext
> *avctx,
> >
> >          if ((frame->flags & AV_FRAME_FLAG_DISCARD) && *got_frame_ptr &&
> >              !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) {
> > -            avctx->internal->skip_samples -= frame->nb_samples;
> > +            if (avctx->internal->skip_samples >= frame->nb_samples) {
> > +                avctx->internal->skip_samples -= frame->nb_samples;
> > +            }
> >              *got_frame_ptr = 0;
> >          }
> >
>
> Shouldnt skip samples be zeroed then?
>
> Maybe something like:
> avctx->internal->skip_samples -= FFMAX(frame->nb_samples,
> avctx->internal->skip_samples);
>
> - Hendrik
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
diff mbox

Patch

diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 87de15f..a33afaa 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -2391,7 +2391,9 @@  int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
 
         if ((frame->flags & AV_FRAME_FLAG_DISCARD) && *got_frame_ptr &&
             !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) {
-            avctx->internal->skip_samples -= frame->nb_samples;
+            if (avctx->internal->skip_samples >= frame->nb_samples) {
+                avctx->internal->skip_samples -= frame->nb_samples;
+            }
             *got_frame_ptr = 0;
         }