FFmpeg
stereo3d.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Vittorio Giovara <vittorio.giovara@gmail.com>
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 /**
22  * @file
23  * @ingroup lavu_video_stereo3d
24  * Stereoscopic video
25  */
26 
27 #ifndef AVUTIL_STEREO3D_H
28 #define AVUTIL_STEREO3D_H
29 
30 #include <stdint.h>
31 
32 #include "frame.h"
33 
34 /**
35  * @defgroup lavu_video_stereo3d Stereo3D types and functions
36  * @ingroup lavu_video
37  *
38  * A stereoscopic video file consists in multiple views embedded in a single
39  * frame, usually describing two views of a scene. This file describes all
40  * possible codec-independent view arrangements.
41  *
42  * @{
43  */
44 
45 /**
46  * List of possible 3D Types
47  */
49  /**
50  * Video is not stereoscopic (and metadata has to be there).
51  */
53 
54  /**
55  * Views are next to each other.
56  *
57  * @code{.unparsed}
58  * LLLLRRRR
59  * LLLLRRRR
60  * LLLLRRRR
61  * ...
62  * @endcode
63  */
65 
66  /**
67  * Views are on top of each other.
68  *
69  * @code{.unparsed}
70  * LLLLLLLL
71  * LLLLLLLL
72  * RRRRRRRR
73  * RRRRRRRR
74  * @endcode
75  */
77 
78  /**
79  * Views are alternated temporally.
80  *
81  * @code{.unparsed}
82  * frame0 frame1 frame2 ...
83  * LLLLLLLL RRRRRRRR LLLLLLLL
84  * LLLLLLLL RRRRRRRR LLLLLLLL
85  * LLLLLLLL RRRRRRRR LLLLLLLL
86  * ... ... ...
87  * @endcode
88  */
90 
91  /**
92  * Views are packed in a checkerboard-like structure per pixel.
93  *
94  * @code{.unparsed}
95  * LRLRLRLR
96  * RLRLRLRL
97  * LRLRLRLR
98  * ...
99  * @endcode
100  */
102 
103  /**
104  * Views are next to each other, but when upscaling
105  * apply a checkerboard pattern.
106  *
107  * @code{.unparsed}
108  * LLLLRRRR L L L L R R R R
109  * LLLLRRRR => L L L L R R R R
110  * LLLLRRRR L L L L R R R R
111  * LLLLRRRR L L L L R R R R
112  * @endcode
113  */
115 
116  /**
117  * Views are packed per line, as if interlaced.
118  *
119  * @code{.unparsed}
120  * LLLLLLLL
121  * RRRRRRRR
122  * LLLLLLLL
123  * ...
124  * @endcode
125  */
127 
128  /**
129  * Views are packed per column.
130  *
131  * @code{.unparsed}
132  * LRLRLRLR
133  * LRLRLRLR
134  * LRLRLRLR
135  * ...
136  * @endcode
137  */
139 };
140 
141 /**
142  * List of possible view types.
143  */
145  /**
146  * Frame contains two packed views.
147  */
149 
150  /**
151  * Frame contains only the left view.
152  */
154 
155  /**
156  * Frame contains only the right view.
157  */
159 };
160 
161 /**
162  * Inverted views, Right/Bottom represents the left view.
163  */
164 #define AV_STEREO3D_FLAG_INVERT (1 << 0)
165 
166 /**
167  * Stereo 3D type: this structure describes how two videos are packed
168  * within a single video surface, with additional information as needed.
169  *
170  * @note The struct must be allocated with av_stereo3d_alloc() and
171  * its size is not a part of the public ABI.
172  */
173 typedef struct AVStereo3D {
174  /**
175  * How views are packed within the video.
176  */
178 
179  /**
180  * Additional information about the frame packing.
181  */
182  int flags;
183 
184  /**
185  * Determines which views are packed.
186  */
188 } AVStereo3D;
189 
190 /**
191  * Allocate an AVStereo3D structure and set its fields to default values.
192  * The resulting struct can be freed using av_freep().
193  *
194  * @return An AVStereo3D filled with default values or NULL on failure.
195  */
197 
198 /**
199  * Allocate a complete AVFrameSideData and add it to the frame.
200  *
201  * @param frame The frame which side data is added to.
202  *
203  * @return The AVStereo3D structure to be filled by caller.
204  */
206 
207 /**
208  * Provide a human-readable name of a given stereo3d type.
209  *
210  * @param type The input stereo3d type value.
211  *
212  * @return The name of the stereo3d value, or "unknown".
213  */
214 const char *av_stereo3d_type_name(unsigned int type);
215 
216 /**
217  * Get the AVStereo3DType form a human-readable name.
218  *
219  * @param name The input string.
220  *
221  * @return The AVStereo3DType value, or -1 if not found.
222  */
223 int av_stereo3d_from_name(const char *name);
224 
225 /**
226  * @}
227  */
228 
229 #endif /* AVUTIL_STEREO3D_H */
name
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option name
Definition: writing_filters.txt:88
AV_STEREO3D_VIEW_LEFT
@ AV_STEREO3D_VIEW_LEFT
Frame contains only the left view.
Definition: stereo3d.h:153
AV_STEREO3D_SIDEBYSIDE_QUINCUNX
@ AV_STEREO3D_SIDEBYSIDE_QUINCUNX
Views are next to each other, but when upscaling apply a checkerboard pattern.
Definition: stereo3d.h:114
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:340
AV_STEREO3D_VIEW_RIGHT
@ AV_STEREO3D_VIEW_RIGHT
Frame contains only the right view.
Definition: stereo3d.h:158
AV_STEREO3D_SIDEBYSIDE
@ AV_STEREO3D_SIDEBYSIDE
Views are next to each other.
Definition: stereo3d.h:64
AV_STEREO3D_VIEW_PACKED
@ AV_STEREO3D_VIEW_PACKED
Frame contains two packed views.
Definition: stereo3d.h:148
AV_STEREO3D_2D
@ AV_STEREO3D_2D
Video is not stereoscopic (and metadata has to be there).
Definition: stereo3d.h:52
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
AV_STEREO3D_FRAMESEQUENCE
@ AV_STEREO3D_FRAMESEQUENCE
Views are alternated temporally.
Definition: stereo3d.h:89
AV_STEREO3D_LINES
@ AV_STEREO3D_LINES
Views are packed per line, as if interlaced.
Definition: stereo3d.h:126
frame
static AVFrame * frame
Definition: demux_decode.c:54
AVStereo3D::flags
int flags
Additional information about the frame packing.
Definition: stereo3d.h:182
AV_STEREO3D_CHECKERBOARD
@ AV_STEREO3D_CHECKERBOARD
Views are packed in a checkerboard-like structure per pixel.
Definition: stereo3d.h:101
frame.h
AV_STEREO3D_TOPBOTTOM
@ AV_STEREO3D_TOPBOTTOM
Views are on top of each other.
Definition: stereo3d.h:76
av_stereo3d_alloc
AVStereo3D * av_stereo3d_alloc(void)
Allocate an AVStereo3D structure and set its fields to default values.
Definition: stereo3d.c:29
AV_STEREO3D_COLUMNS
@ AV_STEREO3D_COLUMNS
Views are packed per column.
Definition: stereo3d.h:138
AVStereo3D::type
enum AVStereo3DType type
How views are packed within the video.
Definition: stereo3d.h:177
av_stereo3d_create_side_data
AVStereo3D * av_stereo3d_create_side_data(AVFrame *frame)
Allocate a complete AVFrameSideData and add it to the frame.
Definition: stereo3d.c:34
AVStereo3D::view
enum AVStereo3DView view
Determines which views are packed.
Definition: stereo3d.h:187
AVStereo3DView
AVStereo3DView
List of possible view types.
Definition: stereo3d.h:144
AVStereo3DType
AVStereo3DType
List of possible 3D Types.
Definition: stereo3d.h:48
av_stereo3d_type_name
const char * av_stereo3d_type_name(unsigned int type)
Provide a human-readable name of a given stereo3d type.
Definition: stereo3d.c:58
AVStereo3D
Stereo 3D type: this structure describes how two videos are packed within a single video surface,...
Definition: stereo3d.h:173
av_stereo3d_from_name
int av_stereo3d_from_name(const char *name)
Get the AVStereo3DType form a human-readable name.
Definition: stereo3d.c:66