History

avcodec/cbs_h265: add support for 3D Reference Displays Information SEI

James Almer committed 2 years ago

Commit 27eb55a1 parent 64807cc3 files · +64 −0Browse files

Showing the changes to libavcodec (3 of 3 files). Show all

Unified · Split

3 files
  1. libavcodec/cbs_h2645.c +6 −0
  2. libavcodec/cbs_h265.h +16 −0
  3. libavcodec/cbs_h265_syntax_template.c +42 −0
libavcodec/cbs_h2645.c+6−0
@@ -2275,6 +2275,12 @@ static const SEIMessageTypeDescriptor cbs_sei_h265_types[] = { · 2274 unmodified lines
2275 sizeof(H265RawSEIAlphaChannelInfo),2275 sizeof(H265RawSEIAlphaChannelInfo),
2276 SEI_MESSAGE_RW(h265, sei_alpha_channel_info),2276 SEI_MESSAGE_RW(h265, sei_alpha_channel_info),
2277 },2277 },
2278 {
2279 SEI_TYPE_THREE_DIMENSIONAL_REFERENCE_DISPLAYS_INFO,
2280 1, 0,
2281 sizeof(H265RawSEI3DReferenceDisplaysInfo),
2282 SEI_MESSAGE_RW(h265, sei_3d_reference_displays_info),
2283 },
2278 SEI_MESSAGE_TYPE_END2284 SEI_MESSAGE_TYPE_END
2279};2285};
2280 2286
libavcodec/cbs_h265.h+16−0
@@ -720,6 +720,22 @@ typedef struct H265RawSEIAlphaChannelInfo { · 719 unmodified lines
720 uint8_t alpha_channel_clip_type_flag;720 uint8_t alpha_channel_clip_type_flag;
721} H265RawSEIAlphaChannelInfo;721} H265RawSEIAlphaChannelInfo;
722 722
723typedef struct H265RawSEI3DReferenceDisplaysInfo {
724 uint8_t prec_ref_display_width;
725 uint8_t ref_viewing_distance_flag;
726 uint8_t prec_ref_viewing_dist;
727 uint8_t num_ref_displays_minus1;
728 uint8_t left_view_id[31];
729 uint8_t right_view_id[31];
730 uint8_t exponent_ref_display_width[31];
731 uint8_t mantissa_ref_display_width[31];
732 uint8_t exponent_ref_viewing_distance[31];
733 uint8_t mantissa_ref_viewing_distance[31];
734 uint8_t additional_shift_present_flag[31];
735 uint16_t num_sample_shift_plus512[31];
736 uint8_t three_dimensional_reference_displays_extension_flag;
737} H265RawSEI3DReferenceDisplaysInfo;
738
723typedef struct H265RawSEI {739typedef struct H265RawSEI {
724 H265RawNALUnitHeader nal_unit_header;740 H265RawNALUnitHeader nal_unit_header;
725 SEIRawMessageList message_list;741 SEIRawMessageList message_list;
libavcodec/cbs_h265_syntax_template.c+42−0
@@ -2284,6 +2284,48 @@ SEI_FUNC(sei_alpha_channel_info, (CodedBitstreamContext *ctx, RWContext *rw, · 2283 unmodified lines
2284 return 0;2284 return 0;
2285}2285}
2286 2286
2287SEI_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
2287static int FUNC(sei)(CodedBitstreamContext *ctx, RWContext *rw,2329static int FUNC(sei)(CodedBitstreamContext *ctx, RWContext *rw,
2288 H265RawSEI *current, int prefix)2330 H265RawSEI *current, int prefix)
2289{2331{

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t