On Tue, Dec 13, 2011 at 02:18:19AM +0530, Aneesh Dogra wrote:
> ---
>  libavcodec/vc1dec.c |   19 +++++++++----------
>  1 files changed, 9 insertions(+), 10 deletions(-)
> 
> diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c
> index 0340dc2..35596ad 100644
> --- a/libavcodec/vc1dec.c
> +++ b/libavcodec/vc1dec.c
> @@ -5425,7 +5425,6 @@ static int vc1_decode_frame(AVCodecContext *avctx, void 
> *data,
>      MpegEncContext *s = &v->s;
>      AVFrame *pict = data;
>      uint8_t *buf2 = NULL;
> -    uint8_t *buf_field2 = NULL;
>      const uint8_t *buf_start = buf;
>      int mb_height, n_slices1;
>      struct {
> @@ -5492,9 +5491,6 @@ static int vc1_decode_frame(AVCodecContext *avctx, void 
> *data,
>                      slices[n_slices].mby_start = s->mb_height >> 1;
>                      n_slices1 = n_slices - 1; // index of the last slice of 
> the first field
>                      n_slices++;
> -                    // not necessary, ad hoc until I find a way to handle 
> WVC1i
> -                    buf_field2 = av_mallocz(buf_size + 
> FF_INPUT_BUFFER_PADDING_SIZE);
> -                    vc1_unescape_buffer(start + 4, size, buf_field2);
>                      break;
>                  }
>                  case VC1_CODE_ENTRYPOINT: /* it should be before frame data 
> */
> @@ -5522,14 +5518,21 @@ static int vc1_decode_frame(AVCodecContext *avctx, 
> void *data,
>              }
>          } else if (v->interlace && ((buf[0] & 0xC0) == 0xC0)) { /* WVC1 
> interlaced stores both fields divided by marker */
>              const uint8_t *divider;
> +            int buf_size3;
>  
>              divider = find_next_marker(buf, buf + buf_size);
>              if ((divider == (buf + buf_size)) || AV_RB32(divider) != 
> VC1_CODE_FIELD) {
>                  av_log(avctx, AV_LOG_ERROR, "Error in WVC1 interlaced 
> frame\n");
>                  goto err;
>              } else { // found field marker, unescape second field
> -                buf_field2 = av_mallocz(buf_size + 
> FF_INPUT_BUFFER_PADDING_SIZE);
> -                vc1_unescape_buffer(divider + 4, buf + buf_size - divider - 
> 4, buf_field2);
> +                slices = av_realloc(slices, sizeof(*slices) * (n_slices+1));

this still needs a check for realloc failure
something like

uint8_t *tmp;
...

tmp = av_realloc(slices, sizeof(*slices) * (n_slices+1));
if (!tmp)
    goto err;
slices = tmp;

> +                slices[n_slices].buf = av_mallocz(buf_size + 
> FF_INPUT_BUFFER_PADDING_SIZE);

and this one - for alloc failure, like

if (!slices[n_slices].buf)
    goto err;

> +                buf_size3 = vc1_unescape_buffer(divider + 4, buf + buf_size 
> - divider - 4, slices[n_slices].buf);
> +                init_get_bits(&slices[n_slices].gb, slices[n_slices].buf,
> +                                  buf_size3 << 3);
> +                slices[n_slices].mby_start = s->mb_height >> 1;
> +                n_slices1 = n_slices - 1;
> +                n_slices++;
>              }
>              buf_size2 = vc1_unescape_buffer(buf, divider - buf, buf2);
>          } else {
> @@ -5700,10 +5703,7 @@ static int vc1_decode_frame(AVCodecContext *avctx, 
> void *data,
>                  s->gb = slices[i].gb;
>          }
>          if (v->field_mode) {
> -            av_free(buf_field2);
>              v->second_field = 0;
> -        }
> -        if (v->field_mode) {
>              if (s->pict_type == AV_PICTURE_TYPE_B) {
>                  memcpy(v->mv_f_base, v->mv_f_next_base,
>                         2 * (s->b8_stride * (s->mb_height * 2 + 1) + 
> s->mb_stride * (s->mb_height + 1) * 2));
> @@ -5758,7 +5758,6 @@ err:
>      for (i = 0; i < n_slices; i++)
>          av_free(slices[i].buf);
>      av_free(slices);
> -    av_free(buf_field2);
>      return -1;
>  }
>  
> -- 
> 1.7.4.1
> 
> _______________________________________________
> libav-devel mailing list
> libav-devel@libav.org
> https://lists.libav.org/mailman/listinfo/libav-devel
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to