On Mon, 30 Sep 2013 15:14:39 +0200, Vittorio Giovara
<[email protected]> wrote:
> ---
> Changelog | 1 +
> libavutil/Makefile | 1 +
> libavutil/frame.h | 4 ++
> libavutil/stereo3d.h | 160
> ++++++++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 166 insertions(+)
> create mode 100644 libavutil/stereo3d.h
>
> diff --git a/Changelog b/Changelog
> index b0ff897..9dee989 100644
> --- a/Changelog
> +++ b/Changelog
> @@ -37,6 +37,7 @@ version 10:
> - Error Resilient AAC syntax (ER AAC LC) decoding
> - Low Delay AAC (ER AAC LD) decoding
> - mux chapters in ASF files
> +- codec level stereoscopic metadata handling
>
>
> version 9:
> diff --git a/libavutil/Makefile b/libavutil/Makefile
> index 9381c77..44f7681 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 \
> diff --git a/libavutil/frame.h b/libavutil/frame.h
> index b0676e7..5217b60 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 libavcodec.
^^^^^^^^^^^^^^^^^^^^^
not true anymore
> +
> +/* How views are packed within the frame or container*/
> +enum AVStereo3DType {
> + /**
> + * Video is not stereoscopic
> + */
> + AV_STEREO3D_NONE,
> +
> + /**
> + * Video is not stereoscopic but metadata has to be there
> + */
> + AV_STEREO3D_NOT_REALLY,
Can't say I like the name. Does this thing even have to exist? Can't we use
AV_STEREO3D_NONE for this?
> +
> + /**
> + * Views are colored funny
> + */
> + AV_STEREO3D_ANAGLYPH,
> +
> + /**
> + * Views are in two different streams
> + * could be per container (like Matroska)
> + * or per frame (like MVC Stereo profile)
> + */
> + AV_STEREO3D_MULTISTREAM,
> +
> + /**
> + * 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,
> +
> + /**
> + * 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,
> +};
> +
> +
> +enum AVStereo3DInfo {
> + /**
> + * Views are assumed to be at full resolution and is
> + * "Left is Left" mode, with no other fancy stuff
> + */
> + AV_STEREO3D_NORMAL = 0x00000000,
> +
> + /**
> + * View are at half resolution
> + */
> + AV_STEREO3D_SIZE_HALF = 0x00000001,
> +
> + /**
> + * Inverted views, L becomes R and R becomes L
> + */
> + AV_STEREO3D_ORDER_INVERT = 0x00000002,
> +
> + /**
> + * When upscaling apply a checkerboard pattern, like
> + *
> + * 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_SIZE_HALF is implied
> + */
> + AV_STEREO3D_QUINCUNX = 0x00000004,
> +};
> +
> +/**
> + * Stereo 3D type.
> + * This specifies how a stereo pair is packed in a video.
> + * Normally you get this information either in the transport header
> + * or at every keyframe
> + */
> +typedef struct AVStereo3D {
> + /**
> + * type
> + * - encoding: Set by libavcodec.
> + * - decoding: Set by libavcodec.
It's really not. Just drop those two entries.
Same below.
> + */
> + enum AVStereo3DType type;
> +
> + /**
> + * additional data
> + * - encoding: Set by libavcodec.
> + * - decoding: Set by libavcodec.
> + */
> + enum AVStereo3DInfo info;
> +} AVStereo3D;
I think I said this before, if you want to extend this struct in the future
without breaking ABI, then you need a constructor function, like
av_stereo3d_alloc().
--
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel