Mercurial > libavcodec.hg
comparison utils.c @ 5706:3e8764a25c53 libavcodec
add support for yuva420p colorspace (yuv420p + alpha)
author | aurel |
---|---|
date | Mon, 24 Sep 2007 13:21:41 +0000 |
parents | 1a92e129a679 |
children | c46509aca422 |
comparison
equal
deleted
inserted
replaced
5705:c08c9340c7ca | 5706:3e8764a25c53 |
---|---|
169 case PIX_FMT_GRAY16BE: | 169 case PIX_FMT_GRAY16BE: |
170 case PIX_FMT_GRAY16LE: | 170 case PIX_FMT_GRAY16LE: |
171 case PIX_FMT_YUVJ420P: | 171 case PIX_FMT_YUVJ420P: |
172 case PIX_FMT_YUVJ422P: | 172 case PIX_FMT_YUVJ422P: |
173 case PIX_FMT_YUVJ444P: | 173 case PIX_FMT_YUVJ444P: |
174 case PIX_FMT_YUVA420P: | |
174 w_align= 16; //FIXME check for non mpeg style codecs and use less alignment | 175 w_align= 16; //FIXME check for non mpeg style codecs and use less alignment |
175 h_align= 16; | 176 h_align= 16; |
176 break; | 177 break; |
177 case PIX_FMT_YUV411P: | 178 case PIX_FMT_YUV411P: |
178 case PIX_FMT_UYYVYY411: | 179 case PIX_FMT_UYYVYY411: |
263 if(buf->base[0]){ | 264 if(buf->base[0]){ |
264 pic->age= *picture_number - buf->last_pic_num; | 265 pic->age= *picture_number - buf->last_pic_num; |
265 buf->last_pic_num= *picture_number; | 266 buf->last_pic_num= *picture_number; |
266 }else{ | 267 }else{ |
267 int h_chroma_shift, v_chroma_shift; | 268 int h_chroma_shift, v_chroma_shift; |
268 int pixel_size, size[3]; | 269 int pixel_size, size[4]; |
269 AVPicture picture; | 270 AVPicture picture; |
270 | 271 |
271 avcodec_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift); | 272 avcodec_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift); |
272 | 273 |
273 avcodec_align_dimensions(s, &w, &h); | 274 avcodec_align_dimensions(s, &w, &h); |
288 else | 289 else |
289 w= ALIGN(pixel_size*w, STRIDE_ALIGN<<(h_chroma_shift+3)) / pixel_size; | 290 w= ALIGN(pixel_size*w, STRIDE_ALIGN<<(h_chroma_shift+3)) / pixel_size; |
290 size[1] = avpicture_fill(&picture, NULL, s->pix_fmt, w, h); | 291 size[1] = avpicture_fill(&picture, NULL, s->pix_fmt, w, h); |
291 size[0] = picture.linesize[0] * h; | 292 size[0] = picture.linesize[0] * h; |
292 size[1] -= size[0]; | 293 size[1] -= size[0]; |
294 size[2] = size[3] = 0; | |
293 if(picture.data[2]) | 295 if(picture.data[2]) |
294 size[1]= size[2]= size[1]/2; | 296 size[1]= size[2]= size[1]/2; |
295 else | 297 if(picture.data[3]) |
296 size[2]= 0; | 298 size[3] = picture.linesize[3] * h; |
297 | 299 |
298 buf->last_pic_num= -256*256*256*64; | 300 buf->last_pic_num= -256*256*256*64; |
299 memset(buf->base, 0, sizeof(buf->base)); | 301 memset(buf->base, 0, sizeof(buf->base)); |
300 memset(buf->data, 0, sizeof(buf->data)); | 302 memset(buf->data, 0, sizeof(buf->data)); |
301 | 303 |
302 for(i=0; i<3 && size[i]; i++){ | 304 for(i=0; i<4 && size[i]; i++){ |
303 const int h_shift= i==0 ? 0 : h_chroma_shift; | 305 const int h_shift= i==0 ? 0 : h_chroma_shift; |
304 const int v_shift= i==0 ? 0 : v_chroma_shift; | 306 const int v_shift= i==0 ? 0 : v_chroma_shift; |
305 | 307 |
306 buf->linesize[i]= picture.linesize[i]; | 308 buf->linesize[i]= picture.linesize[i]; |
307 | 309 |
349 s->internal_buffer_count--; | 351 s->internal_buffer_count--; |
350 last = &((InternalBuffer*)s->internal_buffer)[s->internal_buffer_count]; | 352 last = &((InternalBuffer*)s->internal_buffer)[s->internal_buffer_count]; |
351 | 353 |
352 FFSWAP(InternalBuffer, *buf, *last); | 354 FFSWAP(InternalBuffer, *buf, *last); |
353 | 355 |
354 for(i=0; i<3; i++){ | 356 for(i=0; i<4; i++){ |
355 pic->data[i]=NULL; | 357 pic->data[i]=NULL; |
356 // pic->base[i]=NULL; | 358 // pic->base[i]=NULL; |
357 } | 359 } |
358 //printf("R%X\n", pic->opaque); | 360 //printf("R%X\n", pic->opaque); |
359 } | 361 } |