X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fcljr.c;h=e2b01e2a6ab1e894052427aa4ca2a66905db75ca;hb=2caf19e90f270abe1e80a3e85acaf0eb5c9d0aac;hp=ddc00583d13fce8faf0856c96174e3dbbfee6818;hpb=fe4bf37455e81ecf2c0b769c979bdf6eec785602;p=ffmpeg diff --git a/libavcodec/cljr.c b/libavcodec/cljr.c index ddc00583d13..e2b01e2a6ab 100644 --- a/libavcodec/cljr.c +++ b/libavcodec/cljr.c @@ -2,31 +2,35 @@ * Cirrus Logic AccuPak (CLJR) codec * Copyright (c) 2003 Alex Beregszaszi * - * This file is part of FFmpeg. + * This file is part of Libav. * - * FFmpeg is free software; you can redistribute it and/or + * Libav 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. * - * FFmpeg is distributed in the hope that it will be useful, + * Libav 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 FFmpeg; if not, write to the Free Software + * License along with Libav; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** - * @file cljr.c + * @file * Cirrus Logic AccuPak codec. */ #include "avcodec.h" #include "dsputil.h" -#include "bitstream.h" +#include "get_bits.h" + +/* Disable the encoder. */ +#undef CONFIG_CLJR_ENCODER +#define CONFIG_CLJR_ENCODER 0 typedef struct CLJRContext{ AVCodecContext *avctx; @@ -38,8 +42,10 @@ typedef struct CLJRContext{ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, - const uint8_t *buf, int buf_size) + AVPacket *avpkt) { + const uint8_t *buf = avpkt->data; + int buf_size = avpkt->size; CLJRContext * const a = avctx->priv_data; AVFrame *picture = data; AVFrame * const p= (AVFrame*)&a->picture; @@ -48,12 +54,17 @@ static int decode_frame(AVCodecContext *avctx, if(p->data[0]) avctx->release_buffer(avctx, p); + if(buf_size/avctx->height < avctx->width) { + av_log(avctx, AV_LOG_ERROR, "Resolution larger than buffer size. Invalid header?\n"); + return -1; + } + p->reference= 0; if(avctx->get_buffer(avctx, p) < 0){ av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return -1; } - p->pict_type= FF_I_TYPE; + p->pict_type= AV_PICTURE_TYPE_I; p->key_frame= 1; init_get_bits(&a->gb, buf, buf_size); @@ -81,16 +92,15 @@ static int decode_frame(AVCodecContext *avctx, return buf_size; } -#if 0 +#if CONFIG_CLJR_ENCODER static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){ CLJRContext * const a = avctx->priv_data; AVFrame *pict = data; AVFrame * const p= (AVFrame*)&a->picture; int size; - int mb_x, mb_y; *p = *pict; - p->pict_type= FF_I_TYPE; + p->pict_type= AV_PICTURE_TYPE_I; p->key_frame= 1; emms_c(); @@ -121,7 +131,7 @@ static av_cold int decode_init(AVCodecContext *avctx){ return 0; } -#if 0 +#if CONFIG_CLJR_ENCODER static av_cold int encode_init(AVCodecContext *avctx){ common_init(avctx); @@ -130,9 +140,9 @@ static av_cold int encode_init(AVCodecContext *avctx){ } #endif -AVCodec cljr_decoder = { +AVCodec ff_cljr_decoder = { "cljr", - CODEC_TYPE_VIDEO, + AVMEDIA_TYPE_VIDEO, CODEC_ID_CLJR, sizeof(CLJRContext), decode_init, @@ -142,19 +152,16 @@ AVCodec cljr_decoder = { CODEC_CAP_DR1, .long_name = NULL_IF_CONFIG_SMALL("Cirrus Logic AccuPak"), }; -#if 0 -#ifdef CONFIG_ENCODERS -AVCodec cljr_encoder = { +#if CONFIG_CLJR_ENCODER +AVCodec ff_cljr_encoder = { "cljr", - CODEC_TYPE_VIDEO, - CODEC_ID_cljr, + AVMEDIA_TYPE_VIDEO, + CODEC_ID_CLJR, sizeof(CLJRContext), encode_init, encode_frame, //encode_end, .long_name = NULL_IF_CONFIG_SMALL("Cirrus Logic AccuPak"), }; - -#endif //CONFIG_ENCODERS #endif