1
- use byteorder :: { BigEndian , ReadBytesExt } ;
1
+ use crate :: { read_u16_from_be , read_u8 } ;
2
2
use error:: { Error , Result , UnsupportedFeature } ;
3
3
use huffman:: { HuffmanTable , HuffmanTableClass } ;
4
4
use marker:: Marker ;
@@ -103,7 +103,7 @@ fn read_length<R: Read>(reader: &mut R, marker: Marker) -> Result<usize> {
103
103
assert ! ( marker. has_length( ) ) ;
104
104
105
105
// length is including itself.
106
- let length = reader . read_u16 :: < BigEndian > ( ) ? as usize ;
106
+ let length = usize :: from ( read_u16_from_be ( reader ) ? ) ;
107
107
108
108
if length < 2 {
109
109
return Err ( Error :: Format ( format ! ( "encountered {:?} with invalid length {}" , marker, length) ) ) ;
@@ -149,7 +149,7 @@ pub fn parse_sof<R: Read>(reader: &mut R, marker: Marker) -> Result<FrameInfo> {
149
149
_ => panic ! ( ) ,
150
150
} ;
151
151
152
- let precision = reader . read_u8 ( ) ?;
152
+ let precision = read_u8 ( reader ) ?;
153
153
154
154
match precision {
155
155
8 => { } ,
@@ -165,8 +165,8 @@ pub fn parse_sof<R: Read>(reader: &mut R, marker: Marker) -> Result<FrameInfo> {
165
165
} ,
166
166
}
167
167
168
- let height = reader . read_u16 :: < BigEndian > ( ) ?;
169
- let width = reader . read_u16 :: < BigEndian > ( ) ?;
168
+ let height = read_u16_from_be ( reader ) ?;
169
+ let width = read_u16_from_be ( reader ) ?;
170
170
171
171
// height:
172
172
// "Value 0 indicates that the number of lines shall be defined by the DNL marker and
@@ -179,7 +179,7 @@ pub fn parse_sof<R: Read>(reader: &mut R, marker: Marker) -> Result<FrameInfo> {
179
179
return Err ( Error :: Format ( "zero width in frame header" . to_owned ( ) ) ) ;
180
180
}
181
181
182
- let component_count = reader . read_u8 ( ) ?;
182
+ let component_count = read_u8 ( reader ) ?;
183
183
184
184
if component_count == 0 {
185
185
return Err ( Error :: Format ( "zero component count in frame header" . to_owned ( ) ) ) ;
@@ -195,14 +195,14 @@ pub fn parse_sof<R: Read>(reader: &mut R, marker: Marker) -> Result<FrameInfo> {
195
195
let mut components: Vec < Component > = Vec :: with_capacity ( component_count as usize ) ;
196
196
197
197
for _ in 0 .. component_count {
198
- let identifier = reader . read_u8 ( ) ?;
198
+ let identifier = read_u8 ( reader ) ?;
199
199
200
200
// Each component's identifier must be unique.
201
201
if components. iter ( ) . any ( |c| c. identifier == identifier) {
202
202
return Err ( Error :: Format ( format ! ( "duplicate frame component identifier {}" , identifier) ) ) ;
203
203
}
204
204
205
- let byte = reader . read_u8 ( ) ?;
205
+ let byte = read_u8 ( reader ) ?;
206
206
let horizontal_sampling_factor = byte >> 4 ;
207
207
let vertical_sampling_factor = byte & 0x0f ;
208
208
@@ -213,7 +213,7 @@ pub fn parse_sof<R: Read>(reader: &mut R, marker: Marker) -> Result<FrameInfo> {
213
213
return Err ( Error :: Format ( format ! ( "invalid vertical sampling factor {}" , vertical_sampling_factor) ) ) ;
214
214
}
215
215
216
- let quantization_table_index = reader . read_u8 ( ) ?;
216
+ let quantization_table_index = read_u8 ( reader ) ?;
217
217
218
218
if quantization_table_index > 3 || ( coding_process == CodingProcess :: Lossless && quantization_table_index != 0 ) {
219
219
return Err ( Error :: Format ( format ! ( "invalid quantization table index {}" , quantization_table_index) ) ) ;
@@ -301,7 +301,7 @@ pub fn parse_sos<R: Read>(reader: &mut R, frame: &FrameInfo) -> Result<ScanInfo>
301
301
return Err ( Error :: Format ( "zero length in SOS" . to_owned ( ) ) ) ;
302
302
}
303
303
304
- let component_count = reader . read_u8 ( ) ?;
304
+ let component_count = read_u8 ( reader ) ?;
305
305
306
306
if component_count == 0 || component_count > 4 {
307
307
return Err ( Error :: Format ( format ! ( "invalid component count {} in scan header" , component_count) ) ) ;
@@ -316,7 +316,7 @@ pub fn parse_sos<R: Read>(reader: &mut R, frame: &FrameInfo) -> Result<ScanInfo>
316
316
let mut ac_table_indices = Vec :: with_capacity ( component_count as usize ) ;
317
317
318
318
for _ in 0 .. component_count {
319
- let identifier = reader . read_u8 ( ) ?;
319
+ let identifier = read_u8 ( reader ) ?;
320
320
321
321
let component_index = match frame. components . iter ( ) . position ( |c| c. identifier == identifier) {
322
322
Some ( value) => value,
@@ -333,7 +333,7 @@ pub fn parse_sos<R: Read>(reader: &mut R, frame: &FrameInfo) -> Result<ScanInfo>
333
333
return Err ( Error :: Format ( "the scan component order does not follow the order in the frame header" . to_owned ( ) ) ) ;
334
334
}
335
335
336
- let byte = reader . read_u8 ( ) ?;
336
+ let byte = read_u8 ( reader ) ?;
337
337
let dc_table_index = byte >> 4 ;
338
338
let ac_table_index = byte & 0x0f ;
339
339
@@ -357,10 +357,10 @@ pub fn parse_sos<R: Read>(reader: &mut R, frame: &FrameInfo) -> Result<ScanInfo>
357
357
return Err ( Error :: Format ( "scan with more than one component and more than 10 blocks per MCU" . to_owned ( ) ) ) ;
358
358
}
359
359
360
- let spectral_selection_start = reader . read_u8 ( ) ?;
361
- let spectral_selection_end = reader . read_u8 ( ) ?;
360
+ let spectral_selection_start = read_u8 ( reader ) ?;
361
+ let spectral_selection_end = read_u8 ( reader ) ?;
362
362
363
- let byte = reader . read_u8 ( ) ?;
363
+ let byte = read_u8 ( reader ) ?;
364
364
let successive_approximation_high = byte >> 4 ;
365
365
let successive_approximation_low = byte & 0x0f ;
366
366
@@ -413,7 +413,7 @@ pub fn parse_dqt<R: Read>(reader: &mut R) -> Result<[Option<[u16; 64]>; 4]> {
413
413
414
414
// Each DQT segment may contain multiple quantization tables.
415
415
while length > 0 {
416
- let byte = reader . read_u8 ( ) ?;
416
+ let byte = read_u8 ( reader ) ?;
417
417
let precision = ( byte >> 4 ) as usize ;
418
418
let index = ( byte & 0x0f ) as usize ;
419
419
@@ -439,8 +439,8 @@ pub fn parse_dqt<R: Read>(reader: &mut R) -> Result<[Option<[u16; 64]>; 4]> {
439
439
440
440
for item in table. iter_mut ( ) {
441
441
* item = match precision {
442
- 0 => reader . read_u8 ( ) ? as u16 ,
443
- 1 => reader . read_u16 :: < BigEndian > ( ) ?,
442
+ 0 => u16 :: from ( read_u8 ( reader ) ? ) ,
443
+ 1 => read_u16_from_be ( reader ) ?,
444
444
_ => unreachable ! ( ) ,
445
445
} ;
446
446
}
@@ -464,7 +464,7 @@ pub fn parse_dht<R: Read>(reader: &mut R, is_baseline: Option<bool>) -> Result<(
464
464
465
465
// Each DHT segment may contain multiple huffman tables.
466
466
while length > 17 {
467
- let byte = reader . read_u8 ( ) ?;
467
+ let byte = read_u8 ( reader ) ?;
468
468
let class = byte >> 4 ;
469
469
let index = ( byte & 0x0f ) as usize ;
470
470
@@ -520,7 +520,7 @@ pub fn parse_dri<R: Read>(reader: &mut R) -> Result<u16> {
520
520
return Err ( Error :: Format ( "DRI with invalid length" . to_owned ( ) ) ) ;
521
521
}
522
522
523
- Ok ( reader . read_u16 :: < BigEndian > ( ) ?)
523
+ Ok ( read_u16_from_be ( reader ) ?)
524
524
}
525
525
526
526
// Section B.2.4.5
0 commit comments