Mercurial > libavcodec.hg
annotate ptx.c @ 6070:4acd7b248bb8 libavcodec
remove useless casts
| author | ivo |
|---|---|
| date | Wed, 26 Dec 2007 16:23:25 +0000 |
| parents | c16a59ef6a86 |
| children | 20d8a8f0fd30 |
| rev | line source |
|---|---|
| 4884 | 1 /* |
| 2 * V.Flash PTX (.ptx) image decoder | |
| 3 * Copyright (c) 2007 Ivo van Poorten | |
| 4 * | |
| 5 * This file is part of FFmpeg. | |
| 6 * | |
| 7 * FFmpeg is free software; you can redistribute it and/or | |
| 8 * modify it under the terms of the GNU Lesser General Public | |
| 9 * License as published by the Free Software Foundation; either | |
| 10 * version 2.1 of the License, or (at your option) any later version. | |
| 11 * | |
| 12 * FFmpeg is distributed in the hope that it will be useful, | |
| 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 15 * Lesser General Public License for more details. | |
| 16 * | |
| 17 * You should have received a copy of the GNU Lesser General Public | |
| 18 * License along with FFmpeg; if not, write to the Free Software | |
| 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
| 20 */ | |
| 21 | |
| 22 #include "avcodec.h" | |
| 23 | |
| 24 typedef struct PTXContext { | |
| 25 AVFrame picture; | |
| 26 } PTXContext; | |
| 27 | |
| 28 static int ptx_init(AVCodecContext *avctx) { | |
| 29 PTXContext *s = avctx->priv_data; | |
| 30 | |
| 6070 | 31 avcodec_get_frame_defaults(&s->picture); |
| 32 avctx->coded_frame= &s->picture; | |
| 4884 | 33 s->picture.data[0] = NULL; |
| 34 | |
| 35 return 0; | |
| 36 } | |
| 37 | |
| 38 static int ptx_decode_frame(AVCodecContext *avctx, void *data, int *data_size, | |
| 39 uint8_t *buf, int buf_size) { | |
| 40 PTXContext * const s = avctx->priv_data; | |
| 41 AVFrame *picture = data; | |
| 42 AVFrame * const p = (AVFrame *)&s->picture; | |
| 43 unsigned int offset, w, h, y, stride, bytes_per_pixel; | |
| 44 uint8_t *ptr; | |
| 45 | |
| 46 offset = AV_RL16(buf); | |
| 47 w = AV_RL16(buf+8); | |
| 48 h = AV_RL16(buf+10); | |
| 49 bytes_per_pixel = AV_RL16(buf+12) >> 3; | |
| 50 | |
| 51 if (bytes_per_pixel != 2) { | |
| 52 av_log(avctx, AV_LOG_ERROR, "image format is not rgb15, please report on ffmpeg-users mailing list\n"); | |
| 53 return -1; | |
| 54 } | |
| 55 | |
| 56 avctx->pix_fmt = PIX_FMT_RGB555; | |
| 57 | |
| 58 if (offset != 0x2c) | |
| 59 av_log(avctx, AV_LOG_WARNING, "offset != 0x2c, untested due to lack of sample files\n"); | |
| 60 | |
| 61 buf += offset; | |
| 62 | |
| 63 if (p->data[0]) | |
| 64 avctx->release_buffer(avctx, p); | |
| 65 | |
| 66 if (avcodec_check_dimensions(avctx, w, h)) | |
| 67 return -1; | |
| 68 if (w != avctx->width || h != avctx->height) | |
| 69 avcodec_set_dimensions(avctx, w, h); | |
| 70 if (avctx->get_buffer(avctx, p) < 0) { | |
| 71 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); | |
| 72 return -1; | |
| 73 } | |
| 74 | |
| 75 p->pict_type = FF_I_TYPE; | |
| 76 | |
| 77 ptr = p->data[0]; | |
| 78 stride = p->linesize[0]; | |
| 79 | |
| 80 for (y=0; y<h; y++) { | |
| 81 #ifdef WORDS_BIGENDIAN | |
| 82 unsigned int x; | |
| 83 for (x=0; x<w*bytes_per_pixel; x+=bytes_per_pixel) | |
|
5520
c16a59ef6a86
* renaming (ST|LD)(16|32|64) -> AV_(R|W)N(16|32|64)
romansh
parents:
5215
diff
changeset
|
84 AV_WN16(ptr+x, AV_RL16(buf+x)); |
| 4884 | 85 #else |
| 86 memcpy(ptr, buf, w*bytes_per_pixel); | |
| 87 #endif | |
| 88 ptr += stride; | |
| 89 buf += w*bytes_per_pixel; | |
| 90 } | |
| 91 | |
| 6070 | 92 *picture = s->picture; |
| 4884 | 93 *data_size = sizeof(AVPicture); |
| 94 | |
| 95 return offset + w*h*bytes_per_pixel; | |
| 96 } | |
| 97 | |
| 98 static int ptx_end(AVCodecContext *avctx) { | |
| 99 PTXContext *s = avctx->priv_data; | |
| 100 | |
| 101 if(s->picture.data[0]) | |
| 102 avctx->release_buffer(avctx, &s->picture); | |
| 103 | |
| 104 return 0; | |
| 105 } | |
| 106 | |
| 107 AVCodec ptx_decoder = { | |
| 108 "ptx", | |
| 109 CODEC_TYPE_VIDEO, | |
| 110 CODEC_ID_PTX, | |
| 111 sizeof(PTXContext), | |
| 112 ptx_init, | |
| 113 NULL, | |
| 114 ptx_end, | |
| 115 ptx_decode_frame, | |
| 116 0, | |
| 117 NULL | |
| 118 }; |
