---
 Changelog            |    1 +
 libavutil/Makefile   |    2 +
 libavutil/frame.h    |    4 ++
 libavutil/stereo3d.c |   41 ++++++++++++++
 libavutil/stereo3d.h |  154 ++++++++++++++++++++++++++++++++++++++++++++++++++
 libavutil/version.h  |    2 +-
 6 files changed, 203 insertions(+), 1 deletion(-)
 create mode 100644 libavutil/stereo3d.c
 create mode 100644 libavutil/stereo3d.h

diff --git a/Changelog b/Changelog
index 1e58a2c..b25624c 100644
--- a/Changelog
+++ b/Changelog
@@ -48,6 +48,7 @@ version 10:
 - setsar/setdar filters now support variables in ratio expressions
 - dar variable in the scale filter now returns the actual DAR (i.e. a * sar)
 - VP9 decoder
+- codec level stereoscopic metadata handling
 
 
 version 9:
diff --git a/libavutil/Makefile b/libavutil/Makefile
index 9381c77..a635725 100644
--- a/libavutil/Makefile
+++ b/libavutil/Makefile
@@ -41,6 +41,7 @@ HEADERS = adler32.h                                           
          \
           rational.h                                                    \
           samplefmt.h                                                   \
           sha.h                                                         \
+          stereo3d.h                                                    \
           time.h                                                        \
           version.h                                                     \
           xtea.h                                                        \
@@ -93,6 +94,7 @@ OBJS = adler32.o                                              
          \
        rc4.o                                                            \
        samplefmt.o                                                      \
        sha.o                                                            \
+       stereo3d.o                                                       \
        time.o                                                           \
        tree.o                                                           \
        utils.o                                                          \
diff --git a/libavutil/frame.h b/libavutil/frame.h
index 449a6b7..4f1b456 100644
--- a/libavutil/frame.h
+++ b/libavutil/frame.h
@@ -35,6 +35,10 @@ enum AVFrameSideDataType {
      * The data is the AVPanScan struct defined in libavcodec.
      */
     AV_FRAME_DATA_PANSCAN,
+    /**
+     * The data is the AVStereo3D struct defined in libavutil.
+     */
+    AV_FRAME_DATA_STEREO3D,
 };
 
 typedef struct AVFrameSideData {
diff --git a/libavutil/stereo3d.c b/libavutil/stereo3d.c
new file mode 100644
index 0000000..35e3e7e
--- /dev/null
+++ b/libavutil/stereo3d.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2013 Vittorio Giovara <[email protected]>
+ *
+ * This file is part of Libav.
+ *
+ * Libav is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * Libav is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Libav; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdint.h>
+#include "common.h"
+#include "stereo3d.h"
+
+AVStereo3D *av_stereo3d_alloc(void)
+{
+    AVStereo3D *data = av_mallocz(sizeof(*data));
+
+    if (!data)
+        return NULL;
+
+    return data;
+}
+
+void av_stereo3d_free(AVStereo3D **data)
+{
+    if (!data || !*data)
+        return;
+
+    av_freep(data);
+}
diff --git a/libavutil/stereo3d.h b/libavutil/stereo3d.h
new file mode 100644
index 0000000..3508895
--- /dev/null
+++ b/libavutil/stereo3d.h
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 2013 Vittorio Giovara <[email protected]>
+ *
+ * This file is part of Libav.
+ *
+ * Libav is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * Libav is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Libav; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdint.h>
+
+/**
+ * List of possible 3D Types
+ */
+enum AVStereo3DType {
+    /**
+     * No information about stereoscopy.
+     */
+    AV_STEREO3D_UNKNOWN,
+
+    /**
+     * Video is not stereoscopic (and metadata has to be there).
+     */
+    AV_STEREO3D_2D,
+
+    /**
+     * Views are next to each other.
+     *
+     *    LLLLRRRR
+     *    LLLLRRRR
+     *    LLLLRRRR
+     *    ...
+     */
+    AV_STEREO3D_SIDEBYSIDE,
+
+    /**
+     * Views are on top of each other.
+     *
+     *    LLLLLLLL
+     *    LLLLLLLL
+     *    RRRRRRRR
+     *    RRRRRRRR
+     */
+    AV_STEREO3D_TOPBOTTOM,
+
+    /**
+     * Views are alternated temporally.
+     *
+     *     frame0   frame1   frame2   ...
+     *    LLLLLLLL RRRRRRRR LLLLLLLL
+     *    LLLLLLLL RRRRRRRR LLLLLLLL
+     *    LLLLLLLL RRRRRRRR LLLLLLLL
+     *    ...      ...      ...
+     */
+    AV_STEREO3D_FRAMESEQUENCE,
+
+    /**
+     * Views are packed in a checkerboard-like structure per pixel.
+     *
+     *    LRLRLRLR
+     *    RLRLRLRL
+     *    LRLRLRLR
+     *    ...
+     */
+    AV_STEREO3D_CHECKERS,
+
+    /**
+     * Views are packed per line, as if interlaced.
+     *
+     *    LLLLLLLL
+     *    RRRRRRRR
+     *    LLLLLLLL
+     *    ...
+     */
+    AV_STEREO3D_LINES,
+
+    /**
+     * Views are packed per column.
+     *
+     *    LRLRLRLR
+     *    LRLRLRLR
+     *    LRLRLRLR
+     *    ...
+     */
+    AV_STEREO3D_COLUMNS,
+};
+
+enum AVStereo3DInfo {
+    /**
+     * Views are assumed to be two and completely contained within
+     * the frame with Left/Top representing the left view.
+     */
+    AV_STEREO3D_NORMAL            = 0x0000,
+
+    /**
+     * Inverted views, Right/Bottom represent the left view.
+     */
+    AV_STEREO3D_ORDER_INVERT      = 0x0001,
+
+    /**
+     * When upscaling apply a checkerboard pattern.
+     *
+     *     LLLLRRRR          L L L L    R R R R
+     *     LLLLRRRR    =>     L L L L  R R R R
+     *     LLLLRRRR          L L L L    R R R R
+     *     LLLLRRRR           L L L L  R R R R
+     *
+     * @note AV_STEREO3D_SIZE_FULL should not be set.
+     */
+    AV_STEREO3D_SAMPLE_QUINCUNX   = 0x0002,
+};
+
+/**
+ * Stereo 3D type: this specifies how a stereo pair or mulview video
+ * is packed in a frame or in a container. Usually this information
+ * is found in the container header or at every keyframe.
+ */
+typedef struct AVStereo3D {
+    /**
+     * How views are packed within the frame/container.
+     */
+    enum AVStereo3DType type;
+
+    /**
+     * Additional information about the packing.
+     */
+    enum AVStereo3DInfo info;
+} AVStereo3D;
+
+/**
+ * Allocate an AVStereo3D structure and set its fields to default values.
+ * The resulting struct must be freed using av_stereo3d_free().
+ *
+ * @return An AVStereo3D filled with default values or NULL on failure.
+ */
+AVStereo3D *av_stereo3d_alloc(void);
+
+/**
+ * Free the AVStereo3D structure.
+ *
+ * @param steero struct to be freed. The pointer will be set to NULL.
+ */
+void av_stereo3d_free(AVStereo3D **data);
diff --git a/libavutil/version.h b/libavutil/version.h
index 4f0f469..691871d 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -38,7 +38,7 @@
 
 #define LIBAVUTIL_VERSION_MAJOR 52
 #define LIBAVUTIL_VERSION_MINOR 18
-#define LIBAVUTIL_VERSION_MICRO  0
+#define LIBAVUTIL_VERSION_MICRO  1
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                LIBAVUTIL_VERSION_MINOR, \
-- 
1.7.9.5

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to