Skip to content

Commit 0d4fe96

Browse files
committed
test(h265): vui parameters
1 parent 10f643c commit 0d4fe96

File tree

1 file changed

+110
-0
lines changed
  • crates/h265/src/sps/vui_parameters

1 file changed

+110
-0
lines changed

crates/h265/src/sps/vui_parameters/mod.rs

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,3 +375,113 @@ impl BitStreamRestriction {
375375
self.min_spatial_segmentation_idc + 4
376376
}
377377
}
378+
379+
#[cfg(test)]
380+
#[cfg_attr(all(test, coverage_nightly), coverage(off))]
381+
mod tests {
382+
use std::io::{Read, Write};
383+
use std::num::NonZero;
384+
385+
use byteorder::{BigEndian, WriteBytesExt};
386+
use scuffle_bytes_util::{BitReader, BitWriter};
387+
use scuffle_expgolomb::BitWriterExpGolombExt;
388+
389+
use crate::sps::vui_parameters::{BitStreamRestriction, DefaultDisplayWindow};
390+
use crate::{AspectRatioIdc, ConformanceWindow, VideoFormat, VuiParameters};
391+
392+
#[test]
393+
fn vui_parameters() {
394+
let mut data = Vec::new();
395+
let mut writer = BitWriter::new(&mut data);
396+
397+
writer.write_bit(true).unwrap(); // aspect_ratio_info_present_flag
398+
writer.write_u8(AspectRatioIdc::ExtendedSar.0).unwrap(); // aspect_ratio_idc
399+
writer.write_u16::<BigEndian>(1).unwrap(); // sar_width
400+
writer.write_u16::<BigEndian>(1).unwrap(); // sar_height
401+
402+
writer.write_bit(true).unwrap(); // overscan_info_present_flag
403+
writer.write_bit(true).unwrap(); // overscan_appropriate_flag
404+
405+
writer.write_bit(false).unwrap(); // video_signal_type_present_flag
406+
writer.write_bit(false).unwrap(); // chroma_loc_info_present_flag
407+
writer.write_bit(false).unwrap(); // neutral_chroma_indication_flag
408+
writer.write_bit(false).unwrap(); // field_seq_flag
409+
writer.write_bit(false).unwrap(); // frame_field_info_present_flag
410+
411+
writer.write_bit(true).unwrap(); // default_display_window_flag
412+
writer.write_exp_golomb(0).unwrap(); // def_disp_win_left_offset
413+
writer.write_exp_golomb(10).unwrap(); // def_disp_win_right_offset
414+
writer.write_exp_golomb(0).unwrap(); // def_disp_win_top_offset
415+
writer.write_exp_golomb(10).unwrap(); // def_disp_win_bottom_offset
416+
417+
writer.write_bit(false).unwrap(); // vui_timing_info_present_flag
418+
writer.write_bit(false).unwrap(); // bitstream_restriction_flag
419+
420+
writer.write_bits(0, 5).unwrap(); // fill the byte
421+
writer.flush().unwrap();
422+
423+
for b in data.bytes() {
424+
print!("{:08b} ", b.unwrap());
425+
}
426+
427+
let vui_parameters = VuiParameters::parse(
428+
&mut BitReader::new(data.as_slice()),
429+
0,
430+
8,
431+
8,
432+
1,
433+
false,
434+
false,
435+
false,
436+
&ConformanceWindow {
437+
conf_win_left_offset: 2,
438+
conf_win_right_offset: 2,
439+
conf_win_top_offset: 2,
440+
conf_win_bottom_offset: 2,
441+
},
442+
1,
443+
NonZero::new(1920).unwrap(),
444+
1,
445+
NonZero::new(1080).unwrap(),
446+
)
447+
.unwrap();
448+
449+
assert_eq!(
450+
vui_parameters.aspect_ratio_info,
451+
super::AspectRatioInfo::ExtendedSar {
452+
sar_width: 1,
453+
sar_height: 1
454+
}
455+
);
456+
assert_eq!(vui_parameters.overscan_appropriate_flag, Some(true));
457+
assert_eq!(vui_parameters.video_signal_type.video_format, VideoFormat::Unspecified);
458+
assert!(!vui_parameters.video_signal_type.video_full_range_flag);
459+
assert_eq!(vui_parameters.video_signal_type.color_primaries, 2);
460+
assert_eq!(vui_parameters.video_signal_type.transfer_characteristics, 2);
461+
assert_eq!(vui_parameters.video_signal_type.matrix_coeffs, 2);
462+
assert_eq!(vui_parameters.chroma_loc_info, None);
463+
assert!(!vui_parameters.neutral_chroma_indication_flag);
464+
assert!(!vui_parameters.field_seq_flag);
465+
assert!(!vui_parameters.frame_field_info_present_flag);
466+
assert_eq!(
467+
vui_parameters.default_display_window,
468+
DefaultDisplayWindow {
469+
def_disp_win_left_offset: 0,
470+
def_disp_win_right_offset: 10,
471+
def_disp_win_top_offset: 0,
472+
def_disp_win_bottom_offset: 10,
473+
left_offset: 2,
474+
right_offset: 12,
475+
top_offset: 2,
476+
bottom_offset: 12
477+
}
478+
);
479+
assert_eq!(vui_parameters.default_display_window.left_offset(), 2);
480+
assert_eq!(vui_parameters.default_display_window.right_offset(), 12);
481+
assert_eq!(vui_parameters.default_display_window.top_offset(), 2);
482+
assert_eq!(vui_parameters.default_display_window.bottom_offset(), 12);
483+
assert_eq!(vui_parameters.vui_timing_info, None);
484+
assert_eq!(vui_parameters.bitstream_restriction, BitStreamRestriction::default());
485+
assert_eq!(vui_parameters.bitstream_restriction.min_spatial_segmentation_times4(), 4);
486+
}
487+
}

0 commit comments

Comments
 (0)