diff options
Diffstat (limited to 'libavcodec/cavs.c')
-rw-r--r-- | libavcodec/cavs.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/libavcodec/cavs.c b/libavcodec/cavs.c index 3f21dccedf..69058575bb 100644 --- a/libavcodec/cavs.c +++ b/libavcodec/cavs.c @@ -2,20 +2,20 @@ * Chinese AVS video (AVS1-P2, JiZhun profile) decoder. * Copyright (c) 2006 Stefan Gehrer <stefan.gehrer@gmx.de> * - * This file is part of Libav. + * This file is part of FFmpeg. * - * Libav is free software; you can redistribute it and/or + * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * - * Libav is distributed in the hope that it will be useful, + * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with Libav; if not, write to the Free Software + * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ @@ -526,7 +526,7 @@ void ff_cavs_inter(AVSContext *h, enum cavs_mb mb_type) static inline void scale_mv(AVSContext *h, int *d_x, int *d_y, cavs_vector *src, int distp) { - int den = h->scale_den[src->ref]; + int den = h->scale_den[FFMAX(src->ref, 0)]; *d_x = (src->x * distp * den + 256 + (src->x >> 31)) >> 9; *d_y = (src->y * distp * den + 256 + (src->y >> 31)) >> 9; @@ -703,7 +703,7 @@ int ff_cavs_next_mb(AVSContext *h) * ****************************************************************************/ -void ff_cavs_init_pic(AVSContext *h) +int ff_cavs_init_pic(AVSContext *h) { int i; @@ -724,6 +724,8 @@ void ff_cavs_init_pic(AVSContext *h) h->luma_scan[3] = 8 * h->l_stride + 8; h->mbx = h->mby = h->mbidx = 0; h->flags = 0; + + return 0; } /***************************************************************************** @@ -741,16 +743,16 @@ void ff_cavs_init_top_lines(AVSContext *h) { /* alloc top line of predictors */ h->top_qp = av_mallocz(h->mb_width); - h->top_mv[0] = av_mallocz((h->mb_width * 2 + 1) * sizeof(cavs_vector)); - h->top_mv[1] = av_mallocz((h->mb_width * 2 + 1) * sizeof(cavs_vector)); - h->top_pred_Y = av_mallocz(h->mb_width * 2 * sizeof(*h->top_pred_Y)); - h->top_border_y = av_mallocz((h->mb_width + 1) * 16); - h->top_border_u = av_mallocz(h->mb_width * 10); - h->top_border_v = av_mallocz(h->mb_width * 10); + h->top_mv[0] = av_mallocz_array(h->mb_width * 2 + 1, sizeof(cavs_vector)); + h->top_mv[1] = av_mallocz_array(h->mb_width * 2 + 1, sizeof(cavs_vector)); + h->top_pred_Y = av_mallocz_array(h->mb_width * 2, sizeof(*h->top_pred_Y)); + h->top_border_y = av_mallocz_array(h->mb_width + 1, 16); + h->top_border_u = av_mallocz_array(h->mb_width, 10); + h->top_border_v = av_mallocz_array(h->mb_width, 10); /* alloc space for co-located MVs and types */ - h->col_mv = av_mallocz(h->mb_width * h->mb_height * 4 * - sizeof(cavs_vector)); + h->col_mv = av_mallocz_array(h->mb_width * h->mb_height, + 4 * sizeof(cavs_vector)); h->col_type_base = av_mallocz(h->mb_width * h->mb_height); h->block = av_mallocz(64 * sizeof(int16_t)); } |