pixdesc: add av_get_padded_bits_per_pixel()
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 21 Nov 2012 15:45:54 +0000 (16:45 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 21 Nov 2012 16:05:50 +0000 (17:05 +0100)
This will be needed to allow removing the PixFmtInfo table

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavutil/pixdesc.c
libavutil/pixdesc.h

index e5e3fa8..c7ef57c 100644 (file)
@@ -1712,6 +1712,26 @@ int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
     return bits >> log2_pixels;
 }
 
+int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
+{
+    int c, bits = 0;
+    int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
+    int steps[4] = {0};
+
+    for (c = 0; c < pixdesc->nb_components; c++) {
+        AVComponentDescriptor *comp = &pixdesc->comp[c];
+        int s = c == 1 || c == 2 ? 0 : log2_pixels;
+        steps[comp->plane] = (comp->step_minus1 + 1) << s;
+    }
+    for (c = 0; c < 4; c++)
+        bits += steps[c];
+
+    if(!(pixdesc->flags & PIX_FMT_BITSTREAM))
+        bits *= 8;
+
+    return bits >> log2_pixels;
+}
+
 char *av_get_pix_fmt_string (char *buf, int buf_size, enum AVPixelFormat pix_fmt)
 {
     /* print header */
index 59fd1ff..ca0722e 100644 (file)
@@ -189,6 +189,12 @@ char *av_get_pix_fmt_string (char *buf, int buf_size, enum AVPixelFormat pix_fmt
 int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc);
 
 /**
+ * Return the number of bits per pixel for the pixel format
+ * described by pixdesc, including any padding or unused bits.
+ */
+int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc);
+
+/**
  * @return a pixel format descriptor for provided pixel format or NULL if
  * this pixel format is unknown.
  */