2 * Copyright (c) 2013 Vittorio Giovara <vittorio.giovara@gmail.com>
4 * This file is part of FFmpeg.
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.
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.
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
29 static void get_defaults(AVStereo3D
*stereo
)
31 stereo
->horizontal_disparity_adjustment
= (AVRational
) { 0, 1 };
32 stereo
->horizontal_field_of_view
= (AVRational
) { 0, 1 };
35 AVStereo3D
*av_stereo3d_alloc(void)
37 return av_stereo3d_alloc_size(NULL
);
40 AVStereo3D
*av_stereo3d_alloc_size(size_t *size
)
42 AVStereo3D
*stereo
= av_mallocz(sizeof(AVStereo3D
));
49 *size
= sizeof(*stereo
);
54 AVStereo3D
*av_stereo3d_create_side_data(AVFrame
*frame
)
56 AVFrameSideData
*side_data
= av_frame_new_side_data(frame
,
57 AV_FRAME_DATA_STEREO3D
,
62 memset(side_data
->data
, 0, sizeof(AVStereo3D
));
63 get_defaults((AVStereo3D
*)side_data
->data
);
65 return (AVStereo3D
*)side_data
->data
;
68 static 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",
80 static 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",
87 static 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",
93 const char *av_stereo3d_type_name(unsigned int type
)
95 if (type
>= FF_ARRAY_ELEMS(stereo3d_type_names
))
98 return stereo3d_type_names
[type
];
101 int av_stereo3d_from_name(const char *name
)
105 for (i
= 0; i
< FF_ARRAY_ELEMS(stereo3d_type_names
); i
++) {
106 if (av_strstart(name
, stereo3d_type_names
[i
], NULL
))
113 const char *av_stereo3d_view_name(unsigned int view
)
115 if (view
>= FF_ARRAY_ELEMS(stereo3d_view_names
))
118 return stereo3d_view_names
[view
];
121 int av_stereo3d_view_from_name(const char *name
)
125 for (i
= 0; i
< FF_ARRAY_ELEMS(stereo3d_view_names
); i
++) {
126 if (av_strstart(name
, stereo3d_view_names
[i
], NULL
))
133 const char *av_stereo3d_primary_eye_name(unsigned int eye
)
135 if (eye
>= FF_ARRAY_ELEMS(stereo3d_primary_eye_names
))
138 return stereo3d_primary_eye_names
[eye
];
141 int av_stereo3d_primary_eye_from_name(const char *name
)
145 for (i
= 0; i
< FF_ARRAY_ELEMS(stereo3d_primary_eye_names
); i
++) {
146 if (av_strstart(name
, stereo3d_primary_eye_names
[i
], NULL
))