//--------------------------------------------------------------------------- bool File_DolbyE::Descramble_20bit () { int32u ScrambleMask; Get_S3 (20, ScrambleMask, "Scramble mask"); int16u Size=((BigEndian2int16u(Buffer+Buffer_Offset+(size_t)Element_Size-Data_BS_Remain()/8)^(ScrambleMask>>4))>>2)&0x3FF; if (Data_BS_Remain()<(size_t)((Size+1)*BitDepth)) //+1 for additional unknown word return false; //There is a problem int8u* Temp=Descrambled_Buffer+(size_t)Element_Size-Data_BS_Remain()/8; int64u ScrambleMasks=(((int64u)ScrambleMask)<<20)|ScrambleMask; bool Half; if (Data_BS_Remain()%8) { Temp--; int24u2BigEndian(Temp, BigEndian2int24u(Temp)^(ScrambleMask)); Half=true; } else Half=false; for (int16u Pos=0; Pos<Size-(Half?1:0); Pos+=2) int40u2BigEndian(Temp+(Half?3:0)+Pos*5/2, BigEndian2int40u(Temp+(Half?3:0)+Pos*5/2)^ScrambleMasks); if ((Size-((Size && Half)?1:0))%2==0) int24u2BigEndian(Temp+(Half?3:0)+(Size-((Size && Half)?1:0))*5/2, BigEndian2int24u(Temp+(Half?3:0)+(Size-((Size && Half)?1:0))*5/2)^(((int32u)ScrambleMasks)<<4)); return true; }
//--------------------------------------------------------------------------- bool File_Vc3::FileHeader_Begin() { //Element_Size if (Buffer_Size<5) return false; //Must wait for more data if (BigEndian2int40u(Buffer)!=0x0000028001LL) { Reject("VC-3"); return false; } //All should be OK... return true; }