[libav-devel] [PATCH 02/10] libavutil: add planar sample formats and av_sample_fmt_is_planar()

Justin Ruggles justin.ruggles at gmail.com
Tue Nov 22 01:52:31 CET 2011


---
 doc/APIchanges        |    3 +++
 libavutil/avutil.h    |    2 +-
 libavutil/samplefmt.c |   23 ++++++++++++++++++-----
 libavutil/samplefmt.h |   15 +++++++++++++++
 4 files changed, 37 insertions(+), 6 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index 80d51aa..0211683 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -13,6 +13,9 @@ libavutil:   2011-04-18
 
 API changes, most recent first:
 
+2011-xx-xx - xxxxxxx - lavu 51.17.0
+  Add planar sample formats and av_sample_fmt_is_planar() to samplefmt.h.
+
 2011-xx-xx - xxxxxxx - lavc 53.22.0
   Change AVFrame.data[4]/base[4] to [8] at next major bump.
   Add AV_NUM_DATA_POINTERS to simplify the bump transition.
diff --git a/libavutil/avutil.h b/libavutil/avutil.h
index 436f79b..9112044 100644
--- a/libavutil/avutil.h
+++ b/libavutil/avutil.h
@@ -40,7 +40,7 @@
 #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
 
 #define LIBAVUTIL_VERSION_MAJOR 51
-#define LIBAVUTIL_VERSION_MINOR 16
+#define LIBAVUTIL_VERSION_MINOR 17
 #define LIBAVUTIL_VERSION_MICRO  0
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
diff --git a/libavutil/samplefmt.c b/libavutil/samplefmt.c
index 5b0bfa0..6fc3b7e 100644
--- a/libavutil/samplefmt.c
+++ b/libavutil/samplefmt.c
@@ -25,15 +25,21 @@
 typedef struct SampleFmtInfo {
     const char *name;
     int bits;
+    int planar;
 } SampleFmtInfo;
 
 /** this table gives more information about formats */
 static const SampleFmtInfo sample_fmt_info[AV_SAMPLE_FMT_NB] = {
-    [AV_SAMPLE_FMT_U8]  = { .name = "u8",  .bits = 8 },
-    [AV_SAMPLE_FMT_S16] = { .name = "s16", .bits = 16 },
-    [AV_SAMPLE_FMT_S32] = { .name = "s32", .bits = 32 },
-    [AV_SAMPLE_FMT_FLT] = { .name = "flt", .bits = 32 },
-    [AV_SAMPLE_FMT_DBL] = { .name = "dbl", .bits = 64 },
+    [AV_SAMPLE_FMT_U8]   = { .name =   "u8", .bits =  8, .planar = 0 },
+    [AV_SAMPLE_FMT_S16]  = { .name =  "s16", .bits = 16, .planar = 0 },
+    [AV_SAMPLE_FMT_S32]  = { .name =  "s32", .bits = 32, .planar = 0 },
+    [AV_SAMPLE_FMT_FLT]  = { .name =  "flt", .bits = 32, .planar = 0 },
+    [AV_SAMPLE_FMT_DBL]  = { .name =  "dbl", .bits = 64, .planar = 0 },
+    [AV_SAMPLE_FMT_U8P]  = { .name =  "u8p", .bits =  8, .planar = 1 },
+    [AV_SAMPLE_FMT_S16P] = { .name = "s16p", .bits = 16, .planar = 1 },
+    [AV_SAMPLE_FMT_S32P] = { .name = "s32p", .bits = 32, .planar = 1 },
+    [AV_SAMPLE_FMT_FLTP] = { .name = "fltp", .bits = 32, .planar = 1 },
+    [AV_SAMPLE_FMT_DBLP] = { .name = "dblp", .bits = 64, .planar = 1 },
 };
 
 const char *av_get_sample_fmt_name(enum AVSampleFormat sample_fmt)
@@ -79,3 +85,10 @@ int av_get_bits_per_sample_fmt(enum AVSampleFormat sample_fmt)
         0 : sample_fmt_info[sample_fmt].bits;
 }
 #endif
+
+int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt)
+{
+     if (sample_fmt < 0 || sample_fmt >= AV_SAMPLE_FMT_NB)
+         return 0;
+     return sample_fmt_info[sample_fmt].planar;
+}
diff --git a/libavutil/samplefmt.h b/libavutil/samplefmt.h
index e382149..ce7ffc7 100644
--- a/libavutil/samplefmt.h
+++ b/libavutil/samplefmt.h
@@ -31,6 +31,13 @@ enum AVSampleFormat {
     AV_SAMPLE_FMT_S32,         ///< signed 32 bits
     AV_SAMPLE_FMT_FLT,         ///< float
     AV_SAMPLE_FMT_DBL,         ///< double
+
+    AV_SAMPLE_FMT_U8P,         ///< unsigned 8 bits, planar
+    AV_SAMPLE_FMT_S16P,        ///< signed 16 bits, planar
+    AV_SAMPLE_FMT_S32P,        ///< signed 32 bits, planar
+    AV_SAMPLE_FMT_FLTP,        ///< float, planar
+    AV_SAMPLE_FMT_DBLP,        ///< double, planar
+
     AV_SAMPLE_FMT_NB           ///< Number of sample formats. DO NOT USE if linking dynamically
 };
 
@@ -77,4 +84,12 @@ int av_get_bits_per_sample_fmt(enum AVSampleFormat sample_fmt);
  */
 int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt);
 
+/**
+ * Check if the sample format is planar.
+ *
+ * @param sample_fmt the sample format to inspect
+ * @return 1 if the sample format is planar, 0 if it is interleaved
+ */
+int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt);
+
 #endif /* AVUTIL_SAMPLEFMT_H */
-- 
1.7.1



More information about the libav-devel mailing list