mirror of https://github.com/FFmpeg/FFmpeg.git
* commit '7e244c68600f479270e979258e389ed5240885fb': avframe: add codec-independent stereoscopic metadata Conflicts: Changelog libavutil/Makefile libavutil/version.h Merged-by: Michael Niedermayer <michaelni@gmx.at>pull/51/head
commit
7a60348053
7 changed files with 200 additions and 1 deletions
@ -0,0 +1,40 @@ |
||||
/*
|
||||
* Copyright (c) 2013 Vittorio Giovara <vittorio.giovara@gmail.com> |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg 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. |
||||
* |
||||
* FFmpeg 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 FFmpeg; 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; |
||||
} |
@ -0,0 +1,147 @@ |
||||
/*
|
||||
* Copyright (c) 2013 Vittorio Giovara <vittorio.giovara@gmail.com> |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg 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. |
||||
* |
||||
* FFmpeg 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 FFmpeg; 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); |
Loading…
Reference in new issue