Mercurial > libavcodec.hg
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 |