blob: a53836424df32177dd4002fec955575e6aad3f47
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 | #include <string.h> |
23 | |
24 | #include "common.h" |
25 | #include "mem.h" |
26 | #include "stereo3d.h" |
27 | |
28 | AVStereo3D *av_stereo3d_alloc(void) |
29 | { |
30 | return av_mallocz(sizeof(AVStereo3D)); |
31 | } |
32 | |
33 | AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame) |
34 | { |
35 | AVFrameSideData *side_data = av_frame_new_side_data(frame, |
36 | AV_FRAME_DATA_STEREO3D, |
37 | sizeof(AVStereo3D)); |
38 | if (!side_data) |
39 | return NULL; |
40 | |
41 | memset(side_data->data, 0, sizeof(AVStereo3D)); |
42 | |
43 | return (AVStereo3D *)side_data->data; |
44 | } |
45 | |
46 | static const char *stereo3d_type_names[] = { |
47 | [AV_STEREO3D_2D] = "2D", |
48 | [AV_STEREO3D_SIDEBYSIDE] = "side by side", |
49 | [AV_STEREO3D_TOPBOTTOM] = "top and bottom", |
50 | [AV_STEREO3D_FRAMESEQUENCE] = "frame alternate", |
51 | [AV_STEREO3D_CHECKERBOARD] = "checkerboard", |
52 | [AV_STEREO3D_SIDEBYSIDE_QUINCUNX] = "side by side (quincunx subsampling)", |
53 | [AV_STEREO3D_LINES] = "interleaved lines", |
54 | [AV_STEREO3D_COLUMNS] = "interleaved columns", |
55 | }; |
56 | |
57 | const char *av_stereo3d_type_name(unsigned int type) |
58 | { |
59 | if (type >= FF_ARRAY_ELEMS(stereo3d_type_names)) |
60 | return "unknown"; |
61 | |
62 | return stereo3d_type_names[type]; |
63 | } |
64 | |
65 | int av_stereo3d_from_name(const char *name) |
66 | { |
67 | int i; |
68 | |
69 | for (i = 0; i < FF_ARRAY_ELEMS(stereo3d_type_names); i++) { |
70 | size_t len = strlen(stereo3d_type_names[i]); |
71 | if (!strncmp(stereo3d_type_names[i], name, len)) |
72 | return i; |
73 | } |
74 | |
75 | return -1; |
76 | } |
77 |