diff 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
line wrap: on
line diff
--- a/utils.c	Mon Sep 24 13:01:15 2007 +0000
+++ b/utils.c	Mon Sep 24 13:21:41 2007 +0000
@@ -171,6 +171,7 @@
     case PIX_FMT_YUVJ420P:
     case PIX_FMT_YUVJ422P:
     case PIX_FMT_YUVJ444P:
+    case PIX_FMT_YUVA420P:
         w_align= 16; //FIXME check for non mpeg style codecs and use less alignment
         h_align= 16;
         break;
@@ -265,7 +266,7 @@
         buf->last_pic_num= *picture_number;
     }else{
         int h_chroma_shift, v_chroma_shift;
-        int pixel_size, size[3];
+        int pixel_size, size[4];
         AVPicture picture;
 
         avcodec_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift);
@@ -290,16 +291,17 @@
         size[1] = avpicture_fill(&picture, NULL, s->pix_fmt, w, h);
         size[0] = picture.linesize[0] * h;
         size[1] -= size[0];
+        size[2] = size[3] = 0;
         if(picture.data[2])
             size[1]= size[2]= size[1]/2;
-        else
-            size[2]= 0;
+        if(picture.data[3])
+            size[3] = picture.linesize[3] * h;
 
         buf->last_pic_num= -256*256*256*64;
         memset(buf->base, 0, sizeof(buf->base));
         memset(buf->data, 0, sizeof(buf->data));
 
-        for(i=0; i<3 && size[i]; i++){
+        for(i=0; i<4 && size[i]; i++){
             const int h_shift= i==0 ? 0 : h_chroma_shift;
             const int v_shift= i==0 ? 0 : v_chroma_shift;
 
@@ -351,7 +353,7 @@
 
     FFSWAP(InternalBuffer, *buf, *last);
 
-    for(i=0; i<3; i++){
+    for(i=0; i<4; i++){
         pic->data[i]=NULL;
 //        pic->base[i]=NULL;
     }