@@ -8,8 +8,6 @@ use serde::{Deserialize, Serialize};
88
99use super :: { ExtMetadataBlock , ExtMetadataBlockInfo } ;
1010
11- const MAX_WHITEPOINT_VALUE : u8 = 15 ;
12-
1311/// Content type metadata level
1412#[ repr( C ) ]
1513#[ derive( Debug , Default , Clone ) ]
@@ -29,31 +27,21 @@ impl ExtMetadataBlockLevel11 {
2927 pub ( crate ) fn parse ( reader : & mut BsIoSliceReader ) -> Result < ExtMetadataBlock > {
3028 let mut l11 = Self {
3129 content_type : reader. read :: < 8 , u8 > ( ) ?,
32- whitepoint : reader. read :: < 8 , u8 > ( ) ?,
33- reserved_byte2 : reader. read :: < 8 , u8 > ( ) ?,
34- reserved_byte3 : reader. read :: < 8 , u8 > ( ) ?,
3530 ..Default :: default ( )
3631 } ;
3732
38- if l11. whitepoint > MAX_WHITEPOINT_VALUE {
39- l11. reference_mode_flag = true ;
40- l11. whitepoint -= MAX_WHITEPOINT_VALUE + 1 ;
41- }
33+ l11. decode_byte1 ( reader. read :: < 8 , u8 > ( ) ?) ;
34+ l11. reserved_byte2 = reader. read :: < 8 , u8 > ( ) ?;
35+ l11. reserved_byte3 = reader. read :: < 8 , u8 > ( ) ?;
4236
4337 Ok ( ExtMetadataBlock :: Level11 ( l11) )
4438 }
4539
4640 pub fn write ( & self , writer : & mut BitstreamIoWriter ) -> Result < ( ) > {
4741 self . validate ( ) ?;
4842
49- let mut wp = self . whitepoint ;
50-
51- if self . reference_mode_flag {
52- wp += MAX_WHITEPOINT_VALUE + 1
53- }
54-
5543 writer. write :: < 8 , u8 > ( self . content_type ) ?;
56- writer. write :: < 8 , u8 > ( wp ) ?;
44+ writer. write :: < 8 , u8 > ( self . encode_byte1 ( ) ) ?;
5745 writer. write :: < 8 , u8 > ( self . reserved_byte2 ) ?;
5846 writer. write :: < 8 , u8 > ( self . reserved_byte3 ) ?;
5947
@@ -63,7 +51,6 @@ impl ExtMetadataBlockLevel11 {
6351 pub fn validate ( & self ) -> Result < ( ) > {
6452 ensure ! ( self . content_type <= 15 ) ;
6553 ensure ! ( self . whitepoint <= 15 ) ;
66- ensure ! ( self . reserved_byte2 == 0 ) ;
6754 ensure ! ( self . reserved_byte3 == 0 ) ;
6855
6956 Ok ( ( ) )
@@ -79,6 +66,16 @@ impl ExtMetadataBlockLevel11 {
7966 reserved_byte3 : 0 ,
8067 }
8168 }
69+
70+ const fn decode_byte1 ( & mut self , v : u8 ) {
71+ self . whitepoint = v & 0x0F ;
72+ self . reference_mode_flag = ( ( v >> 4 ) & 0x01 ) == 1 ;
73+ }
74+
75+ const fn encode_byte1 ( & self ) -> u8 {
76+ let reference_mode_flag = self . reference_mode_flag as u8 ;
77+ reference_mode_flag << 4 | self . whitepoint
78+ }
8279}
8380
8481impl ExtMetadataBlockInfo for ExtMetadataBlockLevel11 {
0 commit comments