File tree Expand file tree Collapse file tree 4 files changed +28
-5
lines changed Expand file tree Collapse file tree 4 files changed +28
-5
lines changed Original file line number Diff line number Diff line change @@ -338,6 +338,24 @@ impl Frame<'static> {
338
338
}
339
339
Frame :: from_rgba_speed ( width, height, & mut vec, speed)
340
340
}
341
+
342
+ /// Leaves empty buffer and empty palette behind
343
+ #[ inline]
344
+ pub ( crate ) fn take ( & mut self ) -> Self {
345
+ Frame {
346
+ delay : self . delay ,
347
+ dispose : self . dispose ,
348
+ transparent : self . transparent ,
349
+ needs_user_input : self . needs_user_input ,
350
+ top : self . top ,
351
+ left : self . left ,
352
+ width : self . width ,
353
+ height : self . height ,
354
+ interlaced : self . interlaced ,
355
+ palette : std:: mem:: take ( & mut self . palette ) ,
356
+ buffer : std:: mem:: replace ( & mut self . buffer , Cow :: Borrowed ( & [ ] ) ) ,
357
+ }
358
+ }
341
359
}
342
360
343
361
#[ test]
Original file line number Diff line number Diff line change @@ -141,7 +141,7 @@ pub enum Decoded<'a> {
141
141
/// Decoded all information of the next frame, except the image data.
142
142
///
143
143
/// The returned frame does **not** contain any owned image data.
144
- FrameMetadata ( & ' a Frame < ' static > , FrameDataType ) ,
144
+ FrameMetadata ( & ' a mut Frame < ' static > , FrameDataType ) ,
145
145
/// Decoded some data of the current frame.
146
146
BytesDecoded ( usize ) ,
147
147
/// Copied (or consumed and discarded) compressed data of the current frame. In bytes.
Original file line number Diff line number Diff line change @@ -308,9 +308,9 @@ impl<R> Decoder<R> where R: Read {
308
308
loop {
309
309
match self . decoder . decode_next ( & mut OutputBuffer :: None ) ? {
310
310
Some ( Decoded :: FrameMetadata ( frame, frame_data_type) ) => {
311
- self . current_frame = frame. clone ( ) ;
311
+ self . current_frame = frame. take ( ) ;
312
312
self . current_frame_data_type = frame_data_type;
313
- if frame . palette . is_none ( ) && self . global_palette . is_none ( ) {
313
+ if self . current_frame . palette . is_none ( ) && self . global_palette . is_none ( ) {
314
314
return Err ( DecodingError :: format (
315
315
"no color table available for current frame" ,
316
316
) ) ;
Original file line number Diff line number Diff line change @@ -107,8 +107,13 @@ fn check_skip_frame_data_decode_frame_error() {
107
107
let mut skipping_decoder = options. read_info ( image) . unwrap ( ) ;
108
108
let mut normal_decoder = DecodeOptions :: new ( ) . read_info ( image) . unwrap ( ) ;
109
109
110
- while let Ok ( Some ( _normal_frame) ) = normal_decoder. read_next_frame ( ) {
111
- let _compressed_frame = skipping_decoder. read_next_frame ( ) . unwrap ( ) . unwrap ( ) ;
110
+ while let Ok ( Some ( normal_frame) ) = normal_decoder. read_next_frame ( ) {
111
+ let compressed_frame = skipping_decoder. read_next_frame ( ) . unwrap ( ) . unwrap ( ) ;
112
+ assert_eq ! ( normal_frame. width, compressed_frame. width) ;
113
+ assert_eq ! ( normal_frame. height, compressed_frame. height) ;
114
+ assert_eq ! ( normal_frame. delay, compressed_frame. delay) ;
115
+ assert ! ( !normal_frame. buffer. is_empty( ) ) ;
116
+ assert ! ( !compressed_frame. buffer. is_empty( ) ) ;
112
117
}
113
118
assert ! ( skipping_decoder. read_next_frame( ) . unwrap( ) . is_none( ) ) ;
114
119
You can’t perform that action at this time.
0 commit comments