@@ -176,6 +176,9 @@ pub trait UncompressedHeader {
176
176
fn write_render_size < T : Pixel > (
177
177
& mut self , fi : & FrameInvariants < T > ,
178
178
) -> io:: Result < ( ) > ;
179
+ fn write_frame_size_with_refs < T : Pixel > (
180
+ & mut self , fi : & FrameInvariants < T > ,
181
+ ) -> io:: Result < ( ) > ;
179
182
fn write_deblock_filter_a < T : Pixel > (
180
183
& mut self , fi : & FrameInvariants < T > , deblock : & DeblockState ,
181
184
) -> io:: Result < ( ) > ;
@@ -629,7 +632,7 @@ impl<W: io::Write> UncompressedHeader for BitWriter<W, BigEndian> {
629
632
}
630
633
631
634
if !fi. error_resilient && fi. frame_size_override_flag {
632
- unimplemented ! ( ) ;
635
+ self . write_frame_size_with_refs ( fi ) ? ;
633
636
} else {
634
637
self . write_frame_size ( fi) ?;
635
638
self . write_render_size ( fi) ?;
@@ -897,6 +900,36 @@ impl<W: io::Write> UncompressedHeader for BitWriter<W, BigEndian> {
897
900
Ok ( ( ) )
898
901
}
899
902
903
+ fn write_frame_size_with_refs < T : Pixel > (
904
+ & mut self , fi : & FrameInvariants < T > ,
905
+ ) -> io:: Result < ( ) > {
906
+ let mut found_ref = false ;
907
+ for i in 0 ..INTER_REFS_PER_FRAME {
908
+ if let Some ( ref rec) = fi. rec_buffer . frames [ fi. ref_frames [ i] as usize ] {
909
+ if rec. width == fi. width as u32
910
+ && rec. height == fi. height as u32
911
+ && rec. render_width == fi. render_width
912
+ && rec. render_height == fi. render_height
913
+ {
914
+ self . write_bit ( true ) ?;
915
+ found_ref = true ;
916
+ break ;
917
+ } else {
918
+ self . write_bit ( false ) ?;
919
+ }
920
+ } else {
921
+ self . write_bit ( false ) ?;
922
+ }
923
+ }
924
+ if !found_ref {
925
+ self . write_frame_size ( fi) ?;
926
+ self . write_render_size ( fi) ?;
927
+ } else if fi. sequence . enable_superres {
928
+ unimplemented ! ( ) ;
929
+ }
930
+ Ok ( ( ) )
931
+ }
932
+
900
933
fn write_deblock_filter_a < T : Pixel > (
901
934
& mut self , fi : & FrameInvariants < T > , deblock : & DeblockState ,
902
935
) -> io:: Result < ( ) > {
0 commit comments