Commit 7e244c68 authored by Vittorio Giovara's avatar Vittorio Giovara

avframe: add codec-independent stereoscopic metadata

parent d64341e4
...@@ -50,6 +50,7 @@ version 10: ...@@ -50,6 +50,7 @@ version 10:
- VP9 decoder - VP9 decoder
- support for decoding through VDPAU in avconv (the -hwaccel option) - support for decoding through VDPAU in avconv (the -hwaccel option)
- remove mp3_header_(de)compress bitstream filters - remove mp3_header_(de)compress bitstream filters
- stereoscopic 3d metadata handling
version 9: version 9:
......
...@@ -13,6 +13,10 @@ libavutil: 2012-10-22 ...@@ -13,6 +13,10 @@ libavutil: 2012-10-22
API changes, most recent first: API changes, most recent first:
2013-11-xx - xxxxxxx- - lavu 52.20.0 - frame.h
Add AV_FRAME_DATA_STEREO3D value to the AVFrameSideDataType enum and
stereo3d.h API, that identify codec-independent stereo3d information.
2013-11-xx - xxxxxxx- - lavu 52.19.0 - frame.h 2013-11-xx - xxxxxxx- - lavu 52.19.0 - frame.h
Add AV_FRAME_DATA_A53_CC value to the AVFrameSideDataType enum, which Add AV_FRAME_DATA_A53_CC value to the AVFrameSideDataType enum, which
identifies ATSC A53 Part 4 Closed Captions data. identifies ATSC A53 Part 4 Closed Captions data.
......
...@@ -41,6 +41,7 @@ HEADERS = adler32.h \ ...@@ -41,6 +41,7 @@ HEADERS = adler32.h \
rational.h \ rational.h \
samplefmt.h \ samplefmt.h \
sha.h \ sha.h \
stereo3d.h \
time.h \ time.h \
version.h \ version.h \
xtea.h \ xtea.h \
...@@ -93,6 +94,7 @@ OBJS = adler32.o \ ...@@ -93,6 +94,7 @@ OBJS = adler32.o \
rc4.o \ rc4.o \
samplefmt.o \ samplefmt.o \
sha.o \ sha.o \
stereo3d.o \
time.o \ time.o \
tree.o \ tree.o \
utils.o \ utils.o \
......
...@@ -41,6 +41,11 @@ enum AVFrameSideDataType { ...@@ -41,6 +41,11 @@ enum AVFrameSideDataType {
* The number of bytes of CC data is AVFrameSideData.size. * The number of bytes of CC data is AVFrameSideData.size.
*/ */
AV_FRAME_DATA_A53_CC, AV_FRAME_DATA_A53_CC,
/**
* Stereoscopic 3d metadata.
* The data is the AVStereo3D struct defined in libavutil/stereo3d.h.
*/
AV_FRAME_DATA_STEREO3D,
}; };
typedef struct AVFrameSideData { typedef struct AVFrameSideData {
......
/*
* Copyright (c) 2013 Vittorio Giovara <vittorio.giovara@gmail.com>
*
* 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 "mem.h"
#include "stereo3d.h"
AVStereo3D *av_stereo3d_alloc(void)
{
return av_mallocz(sizeof(AVStereo3D));
}
AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame)
{
AVFrameSideData *side_data = av_frame_new_side_data(frame,
AV_FRAME_DATA_STEREO3D,
sizeof(AVStereo3D));
if (!side_data)
return NULL;
return (AVStereo3D *)side_data->data;
}
/*
* Copyright (c) 2013 Vittorio Giovara <vittorio.giovara@gmail.com>
*
* 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 "frame.h"
/**
* List of possible 3D Types
*/
enum AVStereo3DType {
/**
* 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_CHECKERBOARD,
/**
* Views are next to each other, but 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
*/
AV_STEREO3D_SIDEBYSIDE_QUINCUNX,
/**
* 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,
};
/**
* Inverted views, Right/Bottom represents the left view.
*/
#define AV_STEREO3D_FLAG_INVERT (1 << 0)
/**
* Stereo 3D type: this structure describes how two videos are packed
* within a single video surface, with additional information as needed.
*
* @note The struct must be allocated with av_stereo3d_alloc() and
* its size is not a part of the public ABI.
*/
typedef struct AVStereo3D {
/**
* How views are packed within the video.
*/
enum AVStereo3DType type;
/**
* Additional information about the frame packing.
*/
int flags;
} AVStereo3D;
/**
* Allocate an AVStereo3D structure and set its fields to default values.
* The resulting struct can be freed using av_freep().
*
* @return An AVStereo3D filled with default values or NULL on failure.
*/
AVStereo3D *av_stereo3d_alloc(void);
/**
* Allocate a complete AVFrameSideData and add it to the frame.
*
* @param The frame on which the side data is added to.
*
* @return The AVStereo3D structure to be filled by caller.
*/
AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame);
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
*/ */
#define LIBAVUTIL_VERSION_MAJOR 52 #define LIBAVUTIL_VERSION_MAJOR 52
#define LIBAVUTIL_VERSION_MINOR 19 #define LIBAVUTIL_VERSION_MINOR 20
#define LIBAVUTIL_VERSION_MICRO 0 #define LIBAVUTIL_VERSION_MICRO 0
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment