@@ -643,10 +643,8 @@ impl<R: BufRead + Seek> WebPDecoder<R> {
643643 . chunks
644644 . get ( & WebPRiffChunk :: VP8 )
645645 . ok_or ( DecodingError :: ChunkMissing ) ?;
646- // TODO: avoid cloning frame
647- let frame = Vp8Decoder :: new ( range_reader ( & mut self . r , range. start ..range. end ) ?)
648- . decode_frame ( ) ?
649- . clone ( ) ;
646+ let reader = range_reader ( & mut self . r , range. start ..range. end ) ?;
647+ let frame = Vp8Decoder :: decode_frame ( reader) ?;
650648 if u32:: from ( frame. width ) != self . width || u32:: from ( frame. height ) != self . height {
651649 return Err ( DecodingError :: InconsistentImageSizes ) ;
652650 }
@@ -750,8 +748,7 @@ impl<R: BufRead + Seek> WebPDecoder<R> {
750748 let ( frame, frame_has_alpha) : ( Vec < u8 > , bool ) = match chunk {
751749 WebPRiffChunk :: VP8 => {
752750 let reader = ( & mut self . r ) . take ( chunk_size) ;
753- let mut vp8_decoder = Vp8Decoder :: new ( reader) ;
754- let raw_frame = vp8_decoder. decode_frame ( ) ?;
751+ let raw_frame = Vp8Decoder :: decode_frame ( reader) ?;
755752 if u32:: from ( raw_frame. width ) != frame_width
756753 || u32:: from ( raw_frame. height ) != frame_height
757754 {
@@ -786,8 +783,7 @@ impl<R: BufRead + Seek> WebPDecoder<R> {
786783 return Err ( DecodingError :: ChunkHeaderInvalid ( next_chunk. to_fourcc ( ) ) ) ;
787784 }
788785
789- let mut vp8_decoder = Vp8Decoder :: new ( ( & mut self . r ) . take ( next_chunk_size) ) ;
790- let frame = vp8_decoder. decode_frame ( ) ?;
786+ let frame = Vp8Decoder :: decode_frame ( ( & mut self . r ) . take ( next_chunk_size) ) ?;
791787
792788 let mut rgba_frame = vec ! [ 0 ; frame_width as usize * frame_height as usize * 4 ] ;
793789 frame. fill_rgba ( & mut rgba_frame) ;
0 commit comments