예제 #1
0
//---------------------------------------------------------------------------
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;
}
예제 #2
0
//---------------------------------------------------------------------------
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;
}