comparison indeo3.c @ 7952:7f123fad56ea libavcodec

Move allocated buffer out of YUV buffer structure.
author benoit
date Tue, 30 Sep 2008 11:51:44 +0000
parents f6c77b264d9b
children edfe5fb802a3
comparison
equal deleted inserted replaced
7951:f6c77b264d9b 7952:7f123fad56ea
33 typedef struct 33 typedef struct
34 { 34 {
35 uint8_t *Ybuf; 35 uint8_t *Ybuf;
36 uint8_t *Ubuf; 36 uint8_t *Ubuf;
37 uint8_t *Vbuf; 37 uint8_t *Vbuf;
38 uint8_t *the_buf;
39 unsigned int the_buf_size; 38 unsigned int the_buf_size;
40 unsigned short y_w, y_h; 39 unsigned short y_w, y_h;
41 unsigned short uv_w, uv_h; 40 unsigned short uv_w, uv_h;
42 } YUVBufs; 41 } YUVBufs;
43 42
44 typedef struct Indeo3DecodeContext { 43 typedef struct Indeo3DecodeContext {
45 AVCodecContext *avctx; 44 AVCodecContext *avctx;
46 int width, height; 45 int width, height;
47 AVFrame frame; 46 AVFrame frame;
48 47
48 uint8_t *buf;
49 YUVBufs iv_frame[2]; 49 YUVBufs iv_frame[2];
50 YUVBufs *cur_frame; 50 YUVBufs *cur_frame;
51 YUVBufs *ref_frame; 51 YUVBufs *ref_frame;
52 52
53 uint8_t *ModPred; 53 uint8_t *ModPred;
116 chroma_pixels = chroma_width * chroma_height; 116 chroma_pixels = chroma_width * chroma_height;
117 117
118 bufsize = luma_pixels * 2 + luma_width * 3 + 118 bufsize = luma_pixels * 2 + luma_width * 3 +
119 (chroma_pixels + chroma_width) * 4; 119 (chroma_pixels + chroma_width) * 4;
120 120
121 if(!(s->iv_frame[0].the_buf = av_malloc(bufsize))) 121 if(!(s->buf = av_malloc(bufsize)))
122 return AVERROR(ENOMEM); 122 return AVERROR(ENOMEM);
123 s->iv_frame[0].y_w = s->iv_frame[1].y_w = luma_width; 123 s->iv_frame[0].y_w = s->iv_frame[1].y_w = luma_width;
124 s->iv_frame[0].y_h = s->iv_frame[1].y_h = luma_height; 124 s->iv_frame[0].y_h = s->iv_frame[1].y_h = luma_height;
125 s->iv_frame[0].uv_w = s->iv_frame[1].uv_w = chroma_width; 125 s->iv_frame[0].uv_w = s->iv_frame[1].uv_w = chroma_width;
126 s->iv_frame[0].uv_h = s->iv_frame[1].uv_h = chroma_height; 126 s->iv_frame[0].uv_h = s->iv_frame[1].uv_h = chroma_height;
127 s->iv_frame[0].the_buf_size = bufsize; 127 s->iv_frame[0].the_buf_size = bufsize;
128 128
129 s->iv_frame[0].Ybuf = s->iv_frame[0].the_buf + luma_width; 129 s->iv_frame[0].Ybuf = s->buf + luma_width;
130 i = luma_pixels + luma_width * 2; 130 i = luma_pixels + luma_width * 2;
131 s->iv_frame[1].Ybuf = s->iv_frame[0].the_buf + i; 131 s->iv_frame[1].Ybuf = s->buf + i;
132 i += (luma_pixels + luma_width); 132 i += (luma_pixels + luma_width);
133 s->iv_frame[0].Ubuf = s->iv_frame[0].the_buf + i; 133 s->iv_frame[0].Ubuf = s->buf + i;
134 i += (chroma_pixels + chroma_width); 134 i += (chroma_pixels + chroma_width);
135 s->iv_frame[1].Ubuf = s->iv_frame[0].the_buf + i; 135 s->iv_frame[1].Ubuf = s->buf + i;
136 i += (chroma_pixels + chroma_width); 136 i += (chroma_pixels + chroma_width);
137 s->iv_frame[0].Vbuf = s->iv_frame[0].the_buf + i; 137 s->iv_frame[0].Vbuf = s->buf + i;
138 i += (chroma_pixels + chroma_width); 138 i += (chroma_pixels + chroma_width);
139 s->iv_frame[1].Vbuf = s->iv_frame[0].the_buf + i; 139 s->iv_frame[1].Vbuf = s->buf + i;
140 140
141 for(i = 1; i <= luma_width; i++) 141 for(i = 1; i <= luma_width; i++)
142 s->iv_frame[0].Ybuf[-i] = s->iv_frame[1].Ybuf[-i] = 142 s->iv_frame[0].Ybuf[-i] = s->iv_frame[1].Ybuf[-i] =
143 s->iv_frame[0].Ubuf[-i] = 0x80; 143 s->iv_frame[0].Ubuf[-i] = 0x80;
144 144
156 static av_cold void iv_free_func(Indeo3DecodeContext *s) 156 static av_cold void iv_free_func(Indeo3DecodeContext *s)
157 { 157 {
158 int i; 158 int i;
159 159
160 for(i = 0 ; i < 2 ; i++) { 160 for(i = 0 ; i < 2 ; i++) {
161 if(s->iv_frame[i].the_buf != NULL) 161 if(s->buf != NULL)
162 av_free(s->iv_frame[i].the_buf); 162 av_free(s->buf);
163 s->iv_frame[i].Ybuf = s->iv_frame[i].Ubuf = 163 s->iv_frame[i].Ybuf = s->iv_frame[i].Ubuf =
164 s->iv_frame[i].Vbuf = NULL; 164 s->iv_frame[i].Vbuf = NULL;
165 s->iv_frame[i].the_buf = NULL; 165 s->buf = NULL;
166 s->iv_frame[i].the_buf_size = 0; 166 s->iv_frame[i].the_buf_size = 0;
167 s->iv_frame[i].y_w = s->iv_frame[i].y_h = 0; 167 s->iv_frame[i].y_w = s->iv_frame[i].y_h = 0;
168 s->iv_frame[i].uv_w = s->iv_frame[i].uv_h = 0; 168 s->iv_frame[i].uv_w = s->iv_frame[i].uv_h = 0;
169 } 169 }
170 170