FFmpeg
Loading...
Searching...
No Matches
stereo3d.c
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 <string.h>
22
23#include "frame.h"
24#include "macros.h"
25#include "mem.h"
26#include "stereo3d.h"
27
28static void get_defaults(AVStereo3D *stereo)
29{
31 stereo->horizontal_field_of_view = (AVRational) { 0, 1 };
32}
33
38
40{
41 AVStereo3D *stereo = av_mallocz(sizeof(AVStereo3D));
42
43 if (size)
44 *size = stereo ? sizeof(*stereo) : 0;
45
46 if (!stereo)
47 return NULL;
48
49 get_defaults(stereo);
50
51 return stereo;
52}
53
55{
58 sizeof(AVStereo3D));
59 if (!side_data)
60 return NULL;
61
62 memset(side_data->data, 0, sizeof(AVStereo3D));
63 get_defaults((AVStereo3D *)side_data->data);
64
65 return (AVStereo3D *)side_data->data;
66}
67
68static const char * const stereo3d_type_names[] = {
69 [AV_STEREO3D_2D] = "2D",
70 [AV_STEREO3D_SIDEBYSIDE] = "side by side",
71 [AV_STEREO3D_TOPBOTTOM] = "top and bottom",
72 [AV_STEREO3D_FRAMESEQUENCE] = "frame alternate",
73 [AV_STEREO3D_CHECKERBOARD] = "checkerboard",
74 [AV_STEREO3D_SIDEBYSIDE_QUINCUNX] = "side by side (quincunx subsampling)",
75 [AV_STEREO3D_LINES] = "interleaved lines",
76 [AV_STEREO3D_COLUMNS] = "interleaved columns",
77 [AV_STEREO3D_UNSPEC] = "unspecified",
78};
79
80static const char * const stereo3d_view_names[] = {
81 [AV_STEREO3D_VIEW_PACKED] = "packed",
82 [AV_STEREO3D_VIEW_LEFT] = "left",
83 [AV_STEREO3D_VIEW_RIGHT] = "right",
84 [AV_STEREO3D_VIEW_UNSPEC] = "unspecified",
85};
86
87static const char * const stereo3d_primary_eye_names[] = {
88 [AV_PRIMARY_EYE_NONE] = "none",
89 [AV_PRIMARY_EYE_LEFT] = "left",
90 [AV_PRIMARY_EYE_RIGHT] = "right",
91};
92
93const char *av_stereo3d_type_name(unsigned int type)
94{
96 return "unknown";
97
99}
100
102{
103 int i;
104
105 for (i = 0; i < FF_ARRAY_ELEMS(stereo3d_type_names); i++) {
106 if (!strcmp(name, stereo3d_type_names[i]))
107 return i;
108 }
109
110 return -1;
111}
112
113const char *av_stereo3d_view_name(unsigned int view)
114{
116 return "unknown";
117
118 return stereo3d_view_names[view];
119}
120
122{
123 int i;
124
125 for (i = 0; i < FF_ARRAY_ELEMS(stereo3d_view_names); i++) {
126 if (!strcmp(name, stereo3d_view_names[i]))
127 return i;
128 }
129
130 return -1;
131}
132
133const char *av_stereo3d_primary_eye_name(unsigned int eye)
134{
136 return "unknown";
137
138 return stereo3d_primary_eye_names[eye];
139}
140
142{
143 int i;
144
146 if (!strcmp(name, stereo3d_primary_eye_names[i]))
147 return i;
148 }
149
150 return -1;
151}
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define NULL
Definition coverity.c:32
static AVFrame * frame
reference-counted frame API
AVFrameSideData * av_frame_new_side_data(AVFrame *frame, enum AVFrameSideDataType type, size_t size)
Add a new side data to a frame.
Definition frame.c:647
@ AV_FRAME_DATA_STEREO3D
Stereoscopic 3d metadata.
Definition frame.h:64
const char * av_stereo3d_view_name(unsigned int view)
Provide a human-readable name of a given stereo3d view.
Definition stereo3d.c:113
AVStereo3D * av_stereo3d_alloc(void)
Allocate an AVStereo3D structure and set its fields to default values.
Definition stereo3d.c:34
AVStereo3D * av_stereo3d_alloc_size(size_t *size)
Allocate an AVStereo3D structure and set its fields to default values.
Definition stereo3d.c:39
int av_stereo3d_primary_eye_from_name(const char *name)
Get the AVStereo3DPrimaryEye form a human-readable name.
Definition stereo3d.c:141
const char * av_stereo3d_type_name(unsigned int type)
Provide a human-readable name of a given stereo3d type.
Definition stereo3d.c:93
int av_stereo3d_from_name(const char *name)
Get the AVStereo3DType form a human-readable name.
Definition stereo3d.c:101
AVStereo3D * av_stereo3d_create_side_data(AVFrame *frame)
Allocate a complete AVFrameSideData and add it to the frame.
Definition stereo3d.c:54
const char * av_stereo3d_primary_eye_name(unsigned int eye)
Provide a human-readable name of a given stereo3d primary eye.
Definition stereo3d.c:133
int av_stereo3d_view_from_name(const char *name)
Get the AVStereo3DView form a human-readable name.
Definition stereo3d.c:121
@ AV_STEREO3D_COLUMNS
Views are packed per column.
Definition stereo3d.h:138
@ AV_STEREO3D_LINES
Views are packed per line, as if interlaced.
Definition stereo3d.h:126
@ AV_STEREO3D_2D
Video is not stereoscopic (and metadata has to be there).
Definition stereo3d.h:52
@ AV_STEREO3D_CHECKERBOARD
Views are packed in a checkerboard-like structure per pixel.
Definition stereo3d.h:101
@ AV_STEREO3D_TOPBOTTOM
Views are on top of each other.
Definition stereo3d.h:76
@ AV_STEREO3D_SIDEBYSIDE_QUINCUNX
Views are next to each other, but when upscaling apply a checkerboard pattern.
Definition stereo3d.h:114
@ AV_STEREO3D_UNSPEC
Video is stereoscopic but the packing is unspecified.
Definition stereo3d.h:143
@ AV_STEREO3D_FRAMESEQUENCE
Views are alternated temporally.
Definition stereo3d.h:89
@ AV_STEREO3D_SIDEBYSIDE
Views are next to each other.
Definition stereo3d.h:64
@ AV_PRIMARY_EYE_NONE
Neither eye.
Definition stereo3d.h:178
@ AV_PRIMARY_EYE_LEFT
Left eye.
Definition stereo3d.h:183
@ AV_PRIMARY_EYE_RIGHT
Right eye.
Definition stereo3d.h:188
@ AV_STEREO3D_VIEW_RIGHT
Frame contains only the right view.
Definition stereo3d.h:163
@ AV_STEREO3D_VIEW_PACKED
Frame contains two packed views.
Definition stereo3d.h:153
@ AV_STEREO3D_VIEW_LEFT
Frame contains only the left view.
Definition stereo3d.h:158
@ AV_STEREO3D_VIEW_UNSPEC
Content is unspecified.
Definition stereo3d.h:168
cl_device_type type
Stereoscopic video.
Utility Preprocessor macros.
Memory handling functions.
const char * name
Definition qsvenc.c:142
#define FF_ARRAY_ELEMS(a)
static const char *const stereo3d_type_names[]
Definition stereo3d.c:68
static void get_defaults(AVStereo3D *stereo)
Definition stereo3d.c:28
static const char *const stereo3d_primary_eye_names[]
Definition stereo3d.c:87
static const char *const stereo3d_view_names[]
Definition stereo3d.c:80
Structure to hold side data for an AVFrame.
Definition frame.h:327
uint8_t * data
Definition frame.h:329
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
Rational number (pair of numerator and denominator).
Definition rational.h:58
Stereo 3D type: this structure describes how two videos are packed within a single video surface,...
Definition stereo3d.h:203
AVRational horizontal_disparity_adjustment
Relative shift of the left and right images, which changes the zero parallax plane.
Definition stereo3d.h:234
AVRational horizontal_field_of_view
Horizontal field of view, in degrees.
Definition stereo3d.h:239
#define av_mallocz(s)
int size