[SCM] libav/experimental: picture utils

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:29:52 UTC 2013


The following commit has been merged in the experimental branch:
commit cf0875950d75da6b5cb4ffea6ff2f4220db7e229
Author: Fabrice Bellard <fabrice at bellard.org>
Date:   Sat Aug 11 19:04:31 2001 +0000

    picture utils
    
    
    Originally committed as revision 72 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 958f6d3..b32bd18 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -174,6 +174,15 @@ AVCodec *avcodec_find(enum CodecID id)
     return NULL;
 }
 
+const char *pix_fmt_str[] = {
+    "yuv420p",
+    "yuv422",
+    "rgb24",
+    "bgr24",
+    "yuv422p",
+    "yuv444p",
+};
+    
 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
 {
     const char *codec_name;
@@ -208,6 +217,11 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
         snprintf(buf, buf_size,
                  "Video: %s%s",
                  codec_name, enc->flags & CODEC_FLAG_HQ ? " (hq)" : "");
+        if (enc->codec_id == CODEC_ID_RAWVIDEO) {
+            snprintf(buf + strlen(buf), buf_size - strlen(buf),
+                     ", %s",
+                     pix_fmt_str[enc->pix_fmt]);
+        }
         if (enc->width) {
             snprintf(buf + strlen(buf), buf_size - strlen(buf),
                      ", %dx%d, %0.2f fps",
@@ -235,6 +249,89 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
     }
 }
 
+/* Picture field are filled with 'ptr' addresses */
+void avpicture_fill(AVPicture *picture, UINT8 *ptr,
+                    int pix_fmt, int width, int height)
+{
+    int size;
+
+    size = width * height;
+    switch(pix_fmt) {
+    case PIX_FMT_YUV420P:
+        picture->data[0] = ptr;
+        picture->data[1] = picture->data[0] + size;
+        picture->data[2] = picture->data[1] + size / 4;
+        picture->linesize[0] = width;
+        picture->linesize[1] = width / 2;
+        picture->linesize[2] = width / 2;
+        break;
+    case PIX_FMT_YUV422P:
+        picture->data[0] = ptr;
+        picture->data[1] = picture->data[0] + size;
+        picture->data[2] = picture->data[1] + size / 2;
+        picture->linesize[0] = width;
+        picture->linesize[1] = width / 2;
+        picture->linesize[2] = width / 2;
+        break;
+    case PIX_FMT_YUV444P:
+        picture->data[0] = ptr;
+        picture->data[1] = picture->data[0] + size;
+        picture->data[2] = picture->data[1] + size;
+        picture->linesize[0] = width;
+        picture->linesize[1] = width;
+        picture->linesize[2] = width;
+        break;
+    case PIX_FMT_RGB24:
+    case PIX_FMT_BGR24:
+        picture->data[0] = ptr;
+        picture->data[1] = NULL;
+        picture->data[2] = NULL;
+        picture->linesize[0] = width * 3;
+        break;
+    case PIX_FMT_YUV422:
+        picture->data[0] = ptr;
+        picture->data[1] = NULL;
+        picture->data[2] = NULL;
+        picture->linesize[0] = width * 2;
+        break;
+    default:
+        picture->data[0] = NULL;
+        picture->data[1] = NULL;
+        picture->data[2] = NULL;
+        break;
+    }
+}
+
+int avpicture_get_size(int pix_fmt, int width, int height)
+{
+    int size;
+
+    size = width * height;
+    switch(pix_fmt) {
+    case PIX_FMT_YUV420P:
+        size = (size * 3) / 2;
+        break;
+    case PIX_FMT_YUV422P:
+        size = (size * 2);
+        break;
+    case PIX_FMT_YUV444P:
+        size = (size * 3);
+        break;
+    case PIX_FMT_RGB24:
+    case PIX_FMT_BGR24:
+        size = (size * 3);
+        break;
+    case PIX_FMT_YUV422:
+        size = (size * 2);
+        break;
+    default:
+        size = -1;
+        break;
+    }
+    return size;
+}
+
+
 /* must be called before any other functions */
 void avcodec_init(void)
 {

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list