FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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 #include <stdint.h>
22 
23 #include "frame.h"
24 
25 /**
26  * List of possible 3D Types
27  */
29  /**
30  * Video is not stereoscopic (and metadata has to be there).
31  */
33 
34  /**
35  * Views are next to each other.
36  *
37  * LLLLRRRR
38  * LLLLRRRR
39  * LLLLRRRR
40  * ...
41  */
43 
44  /**
45  * Views are on top of each other.
46  *
47  * LLLLLLLL
48  * LLLLLLLL
49  * RRRRRRRR
50  * RRRRRRRR
51  */
53 
54  /**
55  * Views are alternated temporally.
56  *
57  * frame0 frame1 frame2 ...
58  * LLLLLLLL RRRRRRRR LLLLLLLL
59  * LLLLLLLL RRRRRRRR LLLLLLLL
60  * LLLLLLLL RRRRRRRR LLLLLLLL
61  * ... ... ...
62  */
64 
65  /**
66  * Views are packed in a checkerboard-like structure per pixel.
67  *
68  * LRLRLRLR
69  * RLRLRLRL
70  * LRLRLRLR
71  * ...
72  */
74 
75  /**
76  * Views are next to each other, but when upscaling
77  * apply a checkerboard pattern.
78  *
79  * LLLLRRRR L L L L R R R R
80  * LLLLRRRR => L L L L R R R R
81  * LLLLRRRR L L L L R R R R
82  * LLLLRRRR L L L L R R R R
83  */
85 
86  /**
87  * Views are packed per line, as if interlaced.
88  *
89  * LLLLLLLL
90  * RRRRRRRR
91  * LLLLLLLL
92  * ...
93  */
95 
96  /**
97  * Views are packed per column.
98  *
99  * LRLRLRLR
100  * LRLRLRLR
101  * LRLRLRLR
102  * ...
103  */
105 };
106 
107 
108 /**
109  * Inverted views, Right/Bottom represents the left view.
110  */
111 #define AV_STEREO3D_FLAG_INVERT (1 << 0)
112 
113 /**
114  * Stereo 3D type: this structure describes how two videos are packed
115  * within a single video surface, with additional information as needed.
116  *
117  * @note The struct must be allocated with av_stereo3d_alloc() and
118  * its size is not a part of the public ABI.
119  */
120 typedef struct AVStereo3D {
121  /**
122  * How views are packed within the video.
123  */
125 
126  /**
127  * Additional information about the frame packing.
128  */
129  int flags;
130 } AVStereo3D;
131 
132 /**
133  * Allocate an AVStereo3D structure and set its fields to default values.
134  * The resulting struct can be freed using av_freep().
135  *
136  * @return An AVStereo3D filled with default values or NULL on failure.
137  */
139 
140 /**
141  * Allocate a complete AVFrameSideData and add it to the frame.
142  *
143  * @param frame The frame which side data is added to.
144  *
145  * @return The AVStereo3D structure to be filled by caller.
146  */