/src/ffmpeg/libavutil/tdrdi.h
Line | Count | Source |
1 | | /* |
2 | | * This file is part of FFmpeg. |
3 | | * |
4 | | * FFmpeg is free software; you can redistribute it and/or |
5 | | * modify it under the terms of the GNU Lesser General Public |
6 | | * License as published by the Free Software Foundation; either |
7 | | * version 2.1 of the License, or (at your option) any later version. |
8 | | * |
9 | | * FFmpeg is distributed in the hope that it will be useful, |
10 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | | * Lesser General Public License for more details. |
13 | | * |
14 | | * You should have received a copy of the GNU Lesser General Public |
15 | | * License along with FFmpeg; if not, write to the Free Software |
16 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
17 | | */ |
18 | | |
19 | | /** |
20 | | * @file |
21 | | * @ingroup lavu_video_3d_reference_displays_info |
22 | | * Spherical video |
23 | | */ |
24 | | |
25 | | #ifndef AVUTIL_TDRDI_H |
26 | | #define AVUTIL_TDRDI_H |
27 | | |
28 | | #include <stddef.h> |
29 | | #include <stdint.h> |
30 | | |
31 | | #include "libavutil/avassert.h" |
32 | | |
33 | | /** |
34 | | * @defgroup lavu_video_3d_reference_displays_info 3D Reference Displays Information |
35 | | * @ingroup lavu_video |
36 | | * |
37 | | * The 3D Reference Displays Information describes information about the reference display |
38 | | * width(s) and reference viewing distance(s) as well as information about the corresponding |
39 | | * reference stereo pair(s). |
40 | | * @{ |
41 | | */ |
42 | | |
43 | | #define AV_TDRDI_MAX_NUM_REF_DISPLAY 32 |
44 | | |
45 | | /** |
46 | | * This structure describes information about the reference display width(s) and reference |
47 | | * viewing distance(s) as well as information about the corresponding reference stereo pair(s). |
48 | | * See section G.14.3.2.3 of ITU-T H.265 for more information. |
49 | | * |
50 | | * @note The struct must be allocated with av_tdrdi_alloc() and |
51 | | * its size is not a part of the public ABI. |
52 | | */ |
53 | | typedef struct AV3DReferenceDisplaysInfo { |
54 | | /** |
55 | | * The exponent of the maximum allowable truncation error for |
56 | | * {exponent,mantissa}_ref_display_width as given by 2<sup>(-prec_ref_display_width)</sup>. |
57 | | */ |
58 | | uint8_t prec_ref_display_width; |
59 | | |
60 | | /** |
61 | | * A flag to indicate the presence of reference viewing distance. |
62 | | * If false, the values of prec_ref_viewing_dist, exponent_ref_viewing_distance, |
63 | | * and mantissa_ref_viewing_distance are undefined. |
64 | | */ |
65 | | uint8_t ref_viewing_distance_flag; |
66 | | |
67 | | /** |
68 | | * The exponent of the maximum allowable truncation error for |
69 | | * {exponent,mantissa}_ref_viewing_distance as given by 2<sup>^(-prec_ref_viewing_dist)</sup>. |
70 | | * The value of prec_ref_viewing_dist shall be in the range of 0 to 31, inclusive. |
71 | | */ |
72 | | uint8_t prec_ref_viewing_dist; |
73 | | |
74 | | /** |
75 | | * The number of reference displays that are signalled in this struct. |
76 | | * Allowed range is 1 to 32, inclusive. |
77 | | */ |
78 | | uint8_t num_ref_displays; |
79 | | |
80 | | /** |
81 | | * Offset in bytes from the beginning of this structure at which the array |
82 | | * of reference displays starts. |
83 | | */ |
84 | | size_t entries_offset; |
85 | | |
86 | | /** |
87 | | * Size of each entry in bytes. May not match sizeof(AV3DReferenceDisplay). |
88 | | */ |
89 | | size_t entry_size; |
90 | | } AV3DReferenceDisplaysInfo; |
91 | | |
92 | | /** |
93 | | * Data structure for single deference display information. |
94 | | * It is allocated as a part of AV3DReferenceDisplaysInfo and should be retrieved with |
95 | | * av_tdrdi_get_display(). |
96 | | * |
97 | | * sizeof(AV3DReferenceDisplay) is not a part of the ABI and new fields may be |
98 | | * added to it. |
99 | | */ |
100 | | typedef struct AV3DReferenceDisplay { |
101 | | /** |
102 | | * The ViewId of the left view of a stereo pair corresponding to the n-th reference display. |
103 | | */ |
104 | | uint16_t left_view_id; |
105 | | |
106 | | /** |
107 | | * The ViewId of the left view of a stereo pair corresponding to the n-th reference display. |
108 | | */ |
109 | | uint16_t right_view_id; |
110 | | |
111 | | /** |
112 | | * The exponent part of the reference display width of the n-th reference display. |
113 | | */ |
114 | | uint8_t exponent_ref_display_width; |
115 | | |
116 | | /** |
117 | | * The mantissa part of the reference display width of the n-th reference display. |
118 | | */ |
119 | | uint8_t mantissa_ref_display_width; |
120 | | |
121 | | /** |
122 | | * The exponent part of the reference viewing distance of the n-th reference display. |
123 | | */ |
124 | | uint8_t exponent_ref_viewing_distance; |
125 | | |
126 | | /** |
127 | | * The mantissa part of the reference viewing distance of the n-th reference display. |
128 | | */ |
129 | | uint8_t mantissa_ref_viewing_distance; |
130 | | |
131 | | /** |
132 | | * An array of flags to indicates that the information about additional horizontal shift of |
133 | | * the left and right views for the n-th reference display is present. |
134 | | */ |
135 | | uint8_t additional_shift_present_flag; |
136 | | |
137 | | /** |
138 | | * The recommended additional horizontal shift for a stereo pair corresponding to the n-th |
139 | | * reference baseline and the n-th reference display. |
140 | | */ |
141 | | int16_t num_sample_shift; |
142 | | } AV3DReferenceDisplay; |
143 | | |
144 | | static av_always_inline AV3DReferenceDisplay* |
145 | | av_tdrdi_get_display(AV3DReferenceDisplaysInfo *tdrdi, unsigned int idx) |
146 | 89 | { |
147 | 89 | av_assert0(idx < tdrdi->num_ref_displays); |
148 | 89 | return (AV3DReferenceDisplay *)((uint8_t *)tdrdi + tdrdi->entries_offset + |
149 | 89 | idx * tdrdi->entry_size); |
150 | 89 | } Unexecuted instantiation: dump.c:av_tdrdi_get_display hevcdec.c:av_tdrdi_get_display Line | Count | Source | 146 | 89 | { | 147 | 89 | av_assert0(idx < tdrdi->num_ref_displays); | 148 | 89 | return (AV3DReferenceDisplay *)((uint8_t *)tdrdi + tdrdi->entries_offset + | 149 | 89 | idx * tdrdi->entry_size); | 150 | 89 | } |
Unexecuted instantiation: tdrdi.c:av_tdrdi_get_display |
151 | | |
152 | | /** |
153 | | * Allocate a AV3DReferenceDisplaysInfo structure and initialize its fields to default |
154 | | * values. |
155 | | * |
156 | | * @return the newly allocated struct or NULL on failure |
157 | | */ |
158 | | AV3DReferenceDisplaysInfo *av_tdrdi_alloc(unsigned int nb_displays, size_t *size); |
159 | | |
160 | | /** |
161 | | * @} |
162 | | */ |
163 | | |
164 | | #endif /* AVUTIL_TDRDI_H */ |