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 } |
