aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorStefano Sabatini <stefano.sabatini-lala@poste.it>2009-04-27 23:20:30 +0000
committerStefano Sabatini <stefano.sabatini-lala@poste.it>2009-04-27 23:20:30 +0000
commit5efccce2a9191ded328233ab68a0767661a26679 (patch)
tree07b028878e03463cc5b0806cd5efec25a846ff66 /libavcodec
parent859471565a2356a6e8b58879f73e84b229bfdc40 (diff)
downloadffmpeg-5efccce2a9191ded328233ab68a0767661a26679.tar.gz
Implement av_get_bits_per_pixel().
Originally committed as revision 18709 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/pixdesc.c13
-rw-r--r--libavcodec/pixdesc.h10
2 files changed, 23 insertions, 0 deletions
diff --git a/libavcodec/pixdesc.c b/libavcodec/pixdesc.c
index 162b5826d2..a313c95cf1 100644
--- a/libavcodec/pixdesc.c
+++ b/libavcodec/pixdesc.c
@@ -581,3 +581,16 @@ const AVPixFmtDescriptor av_pix_fmt_descriptors[PIX_FMT_NB] = {
.flags = PIX_FMT_BE,
},
};
+
+int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
+{
+ int c, bits = 0;
+ int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
+
+ for (c = 0; c < pixdesc->nb_channels; c++) {
+ int s = c==1 || c==2 ? 0 : log2_pixels;
+ bits += (pixdesc->comp[c].depth_minus1+1) << s;
+ }
+
+ return bits >> log2_pixels;
+}
diff --git a/libavcodec/pixdesc.h b/libavcodec/pixdesc.h
index 6660ea1710..0a2acab719 100644
--- a/libavcodec/pixdesc.h
+++ b/libavcodec/pixdesc.h
@@ -193,4 +193,14 @@ static inline void write_line(const uint16_t *src, uint8_t *data[4], const int l
}
}
+/**
+ * Returns the number of bits per pixel used by the pixel format
+ * described by pixdesc.
+ *
+ * The returned number of bits refers to the number of bits actually
+ * used for storing the pixel information, that is padding bits are
+ * not counted.
+ */
+int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc);
+
#endif /* AVCODEC_PIXDESC_H */