| @@ -2284,6 +2284,48 @@ SEI_FUNC(sei_alpha_channel_info, (CodedBitstreamContext *ctx, RWContext *rw, · 2283 unmodified lines |
| 2284 | 2284 | return 0; |
| 2285 | 2285 | } |
| 2286 | 2286 | |
| 2287 | +SEI_FUNC(sei_3d_reference_displays_info, (CodedBitstreamContext *ctx, RWContext *rw, |
| 2288 | + H265RawSEI3DReferenceDisplaysInfo *current, |
| 2289 | + SEIMessageState *sei)) |
| 2290 | +{ |
| 2291 | + int length; |
| 2292 | + int err, i; |
| 2293 | + |
| 2294 | + HEADER("Three Dimensional Reference Displays Information"); |
| 2295 | + |
| 2296 | + ue(prec_ref_display_width, 0, 31); |
| 2297 | + flag(ref_viewing_distance_flag); |
| 2298 | + if (current->ref_viewing_distance_flag) |
| 2299 | + ue(prec_ref_viewing_dist, 0, 31); |
| 2300 | + ue(num_ref_displays_minus1, 0, 31); |
| 2301 | + for (i = 0; i <= current->num_ref_displays_minus1; i++) { |
| 2302 | + ues(left_view_id[i], 0, UINT8_MAX, 1, i); |
| 2303 | + ues(right_view_id[i], 0, UINT8_MAX, 1, i); |
| 2304 | + us(6, exponent_ref_display_width[i], 0, 62, 1, i); |
| 2305 | + if (!current->exponent_ref_display_width[i]) |
| 2306 | + length = FFMAX(0, (int)current->prec_ref_display_width - 30); |
| 2307 | + else |
| 2308 | + length = FFMAX(0, (int)current->exponent_ref_display_width[i] + |
| 2309 | + (int)current->prec_ref_display_width - 31); |
| 2310 | + ubs(length, mantissa_ref_display_width[i], 1, i); |
| 2311 | + if (current->ref_viewing_distance_flag) { |
| 2312 | + us(6, exponent_ref_viewing_distance[i], 0, 62, 1, i); |
| 2313 | + if (!current->exponent_ref_viewing_distance[i]) |
| 2314 | + length = FFMAX(0, (int)current->prec_ref_viewing_dist - 30); |
| 2315 | + else |
| 2316 | + length = FFMAX(0, (int)current->exponent_ref_viewing_distance[i] + |
| 2317 | + (int)current->prec_ref_viewing_dist - 31); |
| 2318 | + ubs(length, mantissa_ref_viewing_distance[i], 1, i); |
| 2319 | + } |
| 2320 | + flags(additional_shift_present_flag[i], 1, i); |
| 2321 | + if (current->additional_shift_present_flag[i]) |
| 2322 | + us(10, num_sample_shift_plus512[i], 0, 1023, 1, i); |
| 2323 | + } |
| 2324 | + flag(three_dimensional_reference_displays_extension_flag); |
| 2325 | + |
| 2326 | + return 0; |
| 2327 | +} |
| 2328 | + |
| 2287 | 2329 | static int FUNC(sei)(CodedBitstreamContext *ctx, RWContext *rw, |
| 2288 | 2330 | H265RawSEI *current, int prefix) |
| 2289 | 2331 | { |