From aec485248f427803d7d13315e203d4894c0e369d Mon Sep 17 00:00:00 2001 From: Carlos Bentzen Date: Sun, 16 Jul 2023 15:55:33 +0200 Subject: [PATCH] vvdec: add more tests --- tests/basic.rs | 72 ++++++++++++++++++++++++++++++++++++++++++----- tests/short2.vvc | Bin 0 -> 1909 bytes 2 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 tests/short2.vvc diff --git a/tests/basic.rs b/tests/basic.rs index a219155..cf2fcb2 100644 --- a/tests/basic.rs +++ b/tests/basic.rs @@ -40,10 +40,7 @@ fn basic() -> Result<(), Error> { Ok(()) } -#[test] -fn split_data() -> Result<(), Error> { - let mut decoder = Decoder::new().unwrap(); - +fn split_data(data: &[u8]) -> Vec<&[u8]> { const ANNEX_B_START_CODE: &[u8] = &[0, 0, 0, 1]; let mut indices: Vec<_> = DATA .windows(4) @@ -52,9 +49,19 @@ fn split_data() -> Result<(), Error> { .map(|(i, _)| i) .collect(); indices.push(DATA.len()); - for pair in indices.windows(2) { - let sub_slice = &DATA[pair[0]..pair[1]]; - let _ = decoder.decode(sub_slice, Some(0), Some(0), false); + + indices + .windows(2) + .map(|pair| &data[pair[0]..pair[1]]) + .collect() +} + +#[test] +fn test_split_data() -> Result<(), Error> { + let mut decoder = Decoder::new().unwrap(); + + for slice in split_data(DATA) { + let _ = decoder.decode(slice, Some(0), Some(0), false); } let frame1 = decoder.flush()?; @@ -77,3 +84,54 @@ fn split_data() -> Result<(), Error> { Ok(()) } + +#[test] +fn test_decode_after_flush() -> Result<(), Error> { + let mut decoder = Decoder::new().unwrap(); + + let mut slices = split_data(DATA).into_iter(); + let sps = slices.next().unwrap(); + let pps = slices.next().unwrap(); + let frame1 = slices.next().unwrap(); + let frame2 = slices.next().unwrap(); + let frame3 = slices.next().unwrap(); + + let _ = decoder.decode(sps, None, None, false); + let _ = decoder.decode(pps, None, None, false); + let _ = decoder.decode(frame1, None, None, false); + let _ = decoder.decode(frame2, None, None, false); + + assert!(decoder.flush().is_ok()); + assert!(decoder.flush().is_ok()); + assert_eq!(decoder.flush().unwrap_err(), Error::Eof); + + let _ = decoder.decode(sps, None, None, false); + let _ = decoder.decode(pps, None, None, false); + let _ = decoder.decode(frame1, None, None, false); + let _ = decoder.decode(frame2, None, None, false); + let _ = decoder.decode(frame3, None, None, false); + assert!(decoder.flush().is_ok()); + assert!(decoder.flush().is_ok()); + assert!(decoder.flush().is_ok()); + assert_eq!(decoder.flush().unwrap_err(), Error::Eof); + + Ok(()) +} + +#[test] +fn test_change_resolution() -> Result<(), Error> { + let mut decoder = Decoder::new().unwrap(); + + let _ = decoder.decode(DATA, None, None, false); + let first_frame = decoder.flush().unwrap(); + assert_eq!(first_frame.width(), 320); + assert_eq!(first_frame.height(), 240); + + const SECOND_DATA: &[u8] = include_bytes!("../tests/short2.vvc"); + let _ = decoder.decode(SECOND_DATA, None, None, false); + let first_frame = decoder.flush().unwrap(); + assert_eq!(first_frame.width(), 160); + assert_eq!(first_frame.height(), 120); + + Ok(()) +} diff --git a/tests/short2.vvc b/tests/short2.vvc new file mode 100644 index 0000000000000000000000000000000000000000..12c50b341992d1c4f594140fb4818df75830f1d8 GIT binary patch literal 1909 zcmV-*2a5Or00031c>t{f5P$#xfKY+tY5;R|+onc{Qg1j-m5dM|o&ZchK?D$igdqzN z2w5QuP=)CAYD>u`q_RX>h`dCah>=MVCP;}j8Db#|Bq3@Lydfr`2^5fonIQ>vBq1Rp zAqf;jAtoXamr)ReiZT$B83;?L$U=bygdl*#LIy~KQUNmr5J6!8Ah7^|ga`x$LIeT> zNI-x&b|fI!Fy2!sR$kbr=Z0RupQk^~M27=S{^5F!vDSqKm$K!ZU7 zNFd<`K#M{NAr2v-E=MW^77zjp5C{lBfIw6rKp=njWqv%6000935C8xJ0g;FR00031 zfdBv~K=L9$Gwuig0096&!~k$ALKDEK>WMg3cm36xk7CELqC+NC)&YnnoNw=*JMoEE z)Z`)UlqCkKqnC!};x$XMi0hDnAkj;e74zw>s2sKf;8ZaE&QrqbK=Da}q;=wFRYB3} z?Ye^AaS&=wS%RHxc$$ku{;;^=D!gFsvSs2&P6o>>?D@fR3`+`Qej0=&#Zw zWN8LrhRQuUzw3ZoKP4VP2=Q=E)E4zF_9LD{zhumh1B7*(o;7+P+B?|sj@2xCDYzRO%u$>f+diMpbRZ7q zgUjdkhhOZT0^+a7cN_e?la>vg_nK!@r7;#6bu!~Gf>jS%;$iM_`OahE1-e`wAZsxU zDDKxTaU_D#Y^WB?%1w)jZ0ejSwe4rpL>`xyUksb;AixO>D4nKU&J={2$KLjA zDnDBniz`mi=bo1J99%`{4@814JrQQhkt?nKE(M~(gEwwRJbbTm!j;CHtC_a6HJ}_F zk#fZlV@?_L^9qL@-T~(%v(ke6GFb?Uo0kGE@AH)e{@O~7YSVR)ji1i7<(qs}NBDci zitAfG(I&|2S~$g#Jk?vX*tdHU(+-(GQ^I0{)M^w6A3oeDUd2s`U>CaRDcn3W9R1fv z8i`g~HS1)-RhelN(0oRClJZF_xP)ZL+Yikx;z;MS7W%1(1VQtGc9eJcg*|{FXowJn zI*}*hm26LPcuca5Y`9dZgR;t#QErU2vi)fygNh1ua0<>@i@~~wT5kQ%xZ1A)6!*SV zj%JFgLFeX8^>ky;fy6`je~ovkaE8Zd7#V<#n2|_>)<8+xZS;>u8fSH1<`9|)iXWgKrjKt z7eWaF*l^*8)AJ;y&Hey=pL{5_$aFA#Bt}Q4s#3ePJYwafl&s5FkDO zd}Rx8$r4V);s7jP9Hi;u@R=ka2zF8*#wG_p!T=y`SatOBK_MM{)Tx?pQ>Vv17cpt6 zReIn08VHdDmbqlpm|f000314U`E;q|u2|h(Z&<`uftydH#TY zG7q&UALPmP7WrHRZ|hTrPh(}7(%|~g%1uyHD*EE%e1L&mip+VVx%m&9(AXdW1}u>^M3mf8XGHv%S$DguCwynyo}nH_zU^i zWk-rsiYZgZ69rO+WSM&K@k2$*aumqZS(+qSL<)sG){ucbfTto1&9w_r(x`YgV+7I- zq^d~2CNxT_p<7TqT*yXGu%o5!GrD^mmU~3V#Mc>&bYmz@gm1wa