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 }