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 ;
@@ -110,7 +110,7 @@ fn read_length<R: Read>(reader: &mut R, marker: Marker) -> Result<usize> {
110
110
assert ! ( marker. has_length( ) ) ;
111
111
112
112
// length is including itself.
113
- let length = reader . read_u16 :: < BigEndian > ( ) ? as usize ;
113
+ let length = usize :: from ( read_u16_from_be ( reader ) ? ) ;
114
114
115
115
if length < 2 {
116
116
return Err ( Error :: Format ( format ! ( "encountered {:?} with invalid length {}" , marker, length) ) ) ;
@@ -156,7 +156,7 @@ pub fn parse_sof<R: Read>(reader: &mut R, marker: Marker) -> Result<FrameInfo> {
156
156
_ => panic ! ( ) ,
157
157
} ;
158
158
159
- let precision = reader . read_u8 ( ) ?;
159
+ let precision = read_u8 ( reader ) ?;
160
160
161
161
match precision {
162
162
8 => { } ,
@@ -172,8 +172,8 @@ pub fn parse_sof<R: Read>(reader: &mut R, marker: Marker) -> Result<FrameInfo> {
172
172
} ,
173
173
}
174
174
175
- let height = reader . read_u16 :: < BigEndian > ( ) ?;
176
- let width = reader . read_u16 :: < BigEndian > ( ) ?;
175
+ let height = read_u16_from_be ( reader ) ?;
176
+ let width = read_u16_from_be ( reader ) ?;
177
177
178
178
// height:
179
179
// "Value 0 indicates that the number of lines shall be defined by the DNL marker and
@@ -186,7 +186,7 @@ pub fn parse_sof<R: Read>(reader: &mut R, marker: Marker) -> Result<FrameInfo> {
186
186
return Err ( Error :: Format ( "zero width in frame header" . to_owned ( ) ) ) ;
187
187
}
188
188
189
- let component_count = reader . read_u8 ( ) ?;
189
+ let component_count = read_u8 ( reader ) ?;
190
190
191
191
if component_count == 0 {
192
192
return Err ( Error :: Format ( "zero component count in frame header" . to_owned ( ) ) ) ;
@@ -202,14 +202,14 @@ pub fn parse_sof<R: Read>(reader: &mut R, marker: Marker) -> Result<FrameInfo> {
202
202
let mut components: Vec < Component > = Vec :: with_capacity ( component_count as usize ) ;
203
203
204
204
for _ in 0 .. component_count {
205
- let identifier = reader . read_u8 ( ) ?;
205
+ let identifier = read_u8 ( reader ) ?;
206
206
207
207
// Each component's identifier must be unique.
208
208
if components. iter ( ) . any ( |c| c. identifier == identifier) {
209
209
return Err ( Error :: Format ( format ! ( "duplicate frame component identifier {}" , identifier) ) ) ;
210
210
}
211
211
212
- let byte = reader . read_u8 ( ) ?;
212
+ let byte = read_u8 ( reader ) ?;
213
213
let horizontal_sampling_factor = byte >> 4 ;
214
214
let vertical_sampling_factor = byte & 0x0f ;
215
215
@@ -220,7 +220,7 @@ pub fn parse_sof<R: Read>(reader: &mut R, marker: Marker) -> Result<FrameInfo> {
220
220
return Err ( Error :: Format ( format ! ( "invalid vertical sampling factor {}" , vertical_sampling_factor) ) ) ;
221
221
}
222
222
223
- let quantization_table_index = reader . read_u8 ( ) ?;
223
+ let quantization_table_index = read_u8 ( reader ) ?;
224
224
225
225
if quantization_table_index > 3 || ( coding_process == CodingProcess :: Lossless && quantization_table_index != 0 ) {
226
226
return Err ( Error :: Format ( format ! ( "invalid quantization table index {}" , quantization_table_index) ) ) ;
@@ -308,7 +308,7 @@ pub fn parse_sos<R: Read>(reader: &mut R, frame: &FrameInfo) -> Result<ScanInfo>
308
308
return Err ( Error :: Format ( "zero length in SOS" . to_owned ( ) ) ) ;
309
309
}
310
310
311
- let component_count = reader . read_u8 ( ) ?;
311
+ let component_count = read_u8 ( reader ) ?;
312
312
313
313
if component_count == 0 || component_count > 4 {
314
314
return Err ( Error :: Format ( format ! ( "invalid component count {} in scan header" , component_count) ) ) ;
@@ -323,7 +323,7 @@ pub fn parse_sos<R: Read>(reader: &mut R, frame: &FrameInfo) -> Result<ScanInfo>
323
323
let mut ac_table_indices = Vec :: with_capacity ( component_count as usize ) ;
324
324
325
325
for _ in 0 .. component_count {
326
- let identifier = reader . read_u8 ( ) ?;
326
+ let identifier = read_u8 ( reader ) ?;
327
327
328
328
let component_index = match frame. components . iter ( ) . position ( |c| c. identifier == identifier) {
329
329
Some ( value) => value,
@@ -340,7 +340,7 @@ pub fn parse_sos<R: Read>(reader: &mut R, frame: &FrameInfo) -> Result<ScanInfo>
340
340
return Err ( Error :: Format ( "the scan component order does not follow the order in the frame header" . to_owned ( ) ) ) ;
341
341
}
342
342
343
- let byte = reader . read_u8 ( ) ?;
343
+ let byte = read_u8 ( reader ) ?;
344
344
let dc_table_index = byte >> 4 ;
345
345
let ac_table_index = byte & 0x0f ;
346
346
@@ -364,10 +364,10 @@ pub fn parse_sos<R: Read>(reader: &mut R, frame: &FrameInfo) -> Result<ScanInfo>
364
364
return Err ( Error :: Format ( "scan with more than one component and more than 10 blocks per MCU" . to_owned ( ) ) ) ;
365
365
}
366
366
367
- let spectral_selection_start = reader . read_u8 ( ) ?;
368
- let spectral_selection_end = reader . read_u8 ( ) ?;
367
+ let spectral_selection_start = read_u8 ( reader ) ?;
368
+ let spectral_selection_end = read_u8 ( reader ) ?;
369
369
370
- let byte = reader . read_u8 ( ) ?;
370
+ let byte = read_u8 ( reader ) ?;
371
371
let successive_approximation_high = byte >> 4 ;
372
372
let successive_approximation_low = byte & 0x0f ;
373
373
@@ -420,7 +420,7 @@ pub fn parse_dqt<R: Read>(reader: &mut R) -> Result<[Option<[u16; 64]>; 4]> {
420
420
421
421
// Each DQT segment may contain multiple quantization tables.
422
422
while length > 0 {
423
- let byte = reader . read_u8 ( ) ?;
423
+ let byte = read_u8 ( reader ) ?;
424
424
let precision = ( byte >> 4 ) as usize ;
425
425
let index = ( byte & 0x0f ) as usize ;
426
426
@@ -446,8 +446,8 @@ pub fn parse_dqt<R: Read>(reader: &mut R) -> Result<[Option<[u16; 64]>; 4]> {
446
446
447
447
for item in table. iter_mut ( ) {
448
448
* item = match precision {
449
- 0 => reader . read_u8 ( ) ? as u16 ,
450
- 1 => reader . read_u16 :: < BigEndian > ( ) ?,
449
+ 0 => u16 :: from ( read_u8 ( reader ) ? ) ,
450
+ 1 => read_u16_from_be ( reader ) ?,
451
451
_ => unreachable ! ( ) ,
452
452
} ;
453
453
}
@@ -471,7 +471,7 @@ pub fn parse_dht<R: Read>(reader: &mut R, is_baseline: Option<bool>) -> Result<(
471
471
472
472
// Each DHT segment may contain multiple huffman tables.
473
473
while length > 17 {
474
- let byte = reader . read_u8 ( ) ?;
474
+ let byte = read_u8 ( reader ) ?;
475
475
let class = byte >> 4 ;
476
476
let index = ( byte & 0x0f ) as usize ;
477
477
@@ -527,7 +527,7 @@ pub fn parse_dri<R: Read>(reader: &mut R) -> Result<u16> {
527
527
return Err ( Error :: Format ( "DRI with invalid length" . to_owned ( ) ) ) ;
528
528
}
529
529
530
- Ok ( reader . read_u16 :: < BigEndian > ( ) ?)
530
+ Ok ( read_u16_from_be ( reader ) ?)
531
531
}
532
532
533
533
// Section B.2.4.5
0 commit comments