//--------------------------------------------------------------------------- void File_N19::FileHeader_Parse() { //Parsing Skip_B3( "Code Page Number"); Skip_B8( "Disk Format Code"); FILLING_BEGIN(); Accept("N19"); Fill(Stream_General, 0, General_Format, "N19"); Stream_Prepare(Stream_Text); Fill(Stream_Text, 0, Text_Format, "N19"); FILLING_END(); }
//--------------------------------------------------------------------------- void File_AvsV::Header_Parse() { //Parsing int8u start_code; Skip_B3( "synchro"); Get_B1 (start_code, "start_code"); if (!Header_Parser_Fill_Size()) { Element_WaitForMoreData(); return; } //Filling Header_Fill_Code(start_code, Ztring().From_CC1(start_code)); }
//--------------------------------------------------------------------------- void File_Skm::Header_Parse() { //Parsing int32u BodyLength; int8u Type; Skip_B4( "PreviousTagSize"); if (File_Offset+Buffer_Offset+4<File_Size) { Get_B1 (Type, "Type"); //Param_Info1(Type<19?Flv_Type[Type]:__T("Unknown")); Get_B3 (BodyLength, "BodyLength"); Skip_B3( "Timestamp_Base"); //in ms Skip_B1( "Timestamp_Extended"); //TimeStamp = Timestamp_Extended*0x01000000+Timestamp_Base Skip_B3( "StreamID"); } else { Type=0; BodyLength=0; } //Filling Header_Fill_Code(Type, Ztring().From_Number(Type, 16)); Header_Fill_Size(Element_Offset+BodyLength); }
//--------------------------------------------------------------------------- void File_Vc1::Header_Parse() { //Specific if (From_WMV3 || Only_0D) { Header_Fill_Size(Buffer_Size); Header_Fill_Code(From_WMV3?0x0F:0x0D, Ztring().From_CC1(From_WMV3?0x0F:0x0D)); return; } //Parsing int8u start_code; Skip_B3( "synchro"); Get_B1 (start_code, "start_code"); if (!Header_Parser_Fill_Size()) { Element_WaitForMoreData(); return; } //Filling Header_Fill_Code(start_code, Ztring().From_CC1(start_code)); }
//--------------------------------------------------------------------------- void File_Vp8::Read_Buffer_Continue() { Accept(); BS_Begin_LE(); //VP8 bitstream is Little Endian bool frame_type; Get_TB ( frame_type, "frame type"); Skip_T1( 3, "version number"); Skip_TB( "show_frame flag"); Skip_T4(19, "size of the first data partition"); BS_End(); if (!frame_type) //I-Frame { Skip_B3( "0x9D012A"); Skip_L2( "Width"); Skip_L2( "Height"); } Skip_XX(Element_Size-Element_Offset, "Other data"); Frame_Count++; if (Frame_Count>=Frame_Count_Valid) Finish(); }
//--------------------------------------------------------------------------- void File_Eia708::Data_Parse() { //Parsing int8u block_size, service_number; BS_Begin(); Get_S1(3, service_number, "service_number"); Get_S1(5, block_size, "block_size"); if (service_number==7) { Mark_0_NoTrustError(); Mark_0_NoTrustError(); Get_S1(6, service_number, "extended_service_number"); } BS_End(); if (service_number>=Captions.size()) Captions.resize(service_number+1); if (block_size) { Element_Begin("Service Block Packet", block_size); for (int8u Pos=0; Pos<block_size; Pos++) { int8u cc_data_1; Get_B1(cc_data_1, "cc_data"); switch (cc_data_1) { case 0x08 : if (!Captions[service_number].empty()) Captions[service_number].resize(Captions[service_number].size()-1); break; case 0x10 : //EXT1 { Get_B1 (cc_data_1, "EXT1"); Pos++; if (cc_data_1>=0x08 && cc_data_1<0x10) { Skip_B1( "EXT1 1 byte"); Pos++; } if (cc_data_1>=0x10 && cc_data_1<0x18) { Skip_B2( "EXT1 2 byte"); Pos+=2; } if (cc_data_1>=0x18 && cc_data_1<0x20) { Skip_B3( "EXT1 3 byte"); Pos+=3; } if (cc_data_1>=0x80 && cc_data_1<0x88) { Skip_B4( "EXT1 4 byte"); Pos+=4; } if (cc_data_1>=0x88 && cc_data_1<0x90) { Skip_B5( "EXT1 5 byte"); Pos+=5; } } break; case 0x18 : //P16 { Skip_B2( "P16"); Pos+=2; } break; case 0x20 : Captions[service_number]+=L' ' ; break; case 0x21 : Captions[service_number]+=L'!' ; break; case 0x22 : Captions[service_number]+=L'"' ; break; case 0x23 : Captions[service_number]+=L'#' ; break; case 0x24 : Captions[service_number]+=L'$' ; break; case 0x25 : Captions[service_number]+=L'%' ; break; case 0x26 : Captions[service_number]+=L'&' ; break; case 0x27 : Captions[service_number]+=L'\'' ; break; case 0x28 : Captions[service_number]+=L'(' ; break; case 0x29 : Captions[service_number]+=L')' ; break; case 0x2A : Captions[service_number]+=L'*' ; break; case 0x2B : Captions[service_number]+=L'+' ; break; case 0x2C : Captions[service_number]+=L',' ; break; case 0x2D : Captions[service_number]+=L'-' ; break; case 0x2E : Captions[service_number]+=L'.' ; break; case 0x2F : Captions[service_number]+=L'/' ; break; case 0x30 : Captions[service_number]+=L'0' ; break; case 0x31 : Captions[service_number]+=L'1' ; break; case 0x32 : Captions[service_number]+=L'2' ; break; case 0x33 : Captions[service_number]+=L'3' ; break; case 0x34 : Captions[service_number]+=L'4' ; break; case 0x35 : Captions[service_number]+=L'5' ; break; case 0x36 : Captions[service_number]+=L'6' ; break; case 0x37 : Captions[service_number]+=L'7' ; break; case 0x38 : Captions[service_number]+=L'8' ; break; case 0x39 : Captions[service_number]+=L'9' ; break; case 0x3A : Captions[service_number]+=L':' ; break; case 0x3B : Captions[service_number]+=L';' ; break; case 0x3C : Captions[service_number]+=L'<' ; break; case 0x3E : Captions[service_number]+=L'>' ; break; case 0x3F : Captions[service_number]+=L'?' ; break; case 0x40 : Captions[service_number]+=L'@' ; break; case 0x41 : Captions[service_number]+=L'A' ; break; case 0x42 : Captions[service_number]+=L'B' ; break; case 0x43 : Captions[service_number]+=L'C' ; break; case 0x44 : Captions[service_number]+=L'D' ; break; case 0x45 : Captions[service_number]+=L'E' ; break; case 0x46 : Captions[service_number]+=L'F' ; break; case 0x47 : Captions[service_number]+=L'G' ; break; case 0x48 : Captions[service_number]+=L'H' ; break; case 0x49 : Captions[service_number]+=L'I' ; break; case 0x4A : Captions[service_number]+=L'J' ; break; case 0x4B : Captions[service_number]+=L'K' ; break; case 0x4C : Captions[service_number]+=L'L' ; break; case 0x4D : Captions[service_number]+=L'M' ; break; case 0x4E : Captions[service_number]+=L'N' ; break; case 0x4F : Captions[service_number]+=L'O' ; break; case 0x50 : Captions[service_number]+=L'P' ; break; case 0x51 : Captions[service_number]+=L'Q' ; break; case 0x52 : Captions[service_number]+=L'R' ; break; case 0x53 : Captions[service_number]+=L'S' ; break; case 0x54 : Captions[service_number]+=L'T' ; break; case 0x55 : Captions[service_number]+=L'U' ; break; case 0x56 : Captions[service_number]+=L'V' ; break; case 0x57 : Captions[service_number]+=L'W' ; break; case 0x58 : Captions[service_number]+=L'X' ; break; case 0x59 : Captions[service_number]+=L'Y' ; break; case 0x5A : Captions[service_number]+=L'Z' ; break; case 0x5B : Captions[service_number]+=L'[' ; break; case 0x5C : Captions[service_number]+=L'\\' ; break; case 0x5D : Captions[service_number]+=L']' ; break; case 0x5E : Captions[service_number]+=L'^' ; break; case 0x5F : Captions[service_number]+=L'_' ; break; case 0x60 : Captions[service_number]+=L'`' ; break; case 0x61 : Captions[service_number]+=L'a' ; break; case 0x62 : Captions[service_number]+=L'b' ; break; case 0x63 : Captions[service_number]+=L'c' ; break; case 0x64 : Captions[service_number]+=L'd' ; break; case 0x65 : Captions[service_number]+=L'e' ; break; case 0x66 : Captions[service_number]+=L'f' ; break; case 0x67 : Captions[service_number]+=L'g' ; break; case 0x68 : Captions[service_number]+=L'h' ; break; case 0x69 : Captions[service_number]+=L'i' ; break; case 0x6A : Captions[service_number]+=L'j' ; break; case 0x6B : Captions[service_number]+=L'k' ; break; case 0x6C : Captions[service_number]+=L'l' ; break; case 0x6D : Captions[service_number]+=L'm' ; break; case 0x6E : Captions[service_number]+=L'n' ; break; case 0x6F : Captions[service_number]+=L'o' ; break; case 0x70 : Captions[service_number]+=L'p' ; break; case 0x71 : Captions[service_number]+=L'q' ; break; case 0x72 : Captions[service_number]+=L'r' ; break; case 0x73 : Captions[service_number]+=L's' ; break; case 0x74 : Captions[service_number]+=L't' ; break; case 0x75 : Captions[service_number]+=L'u' ; break; case 0x76 : Captions[service_number]+=L'v' ; break; case 0x77 : Captions[service_number]+=L'w' ; break; case 0x78 : Captions[service_number]+=L'x' ; break; case 0x79 : Captions[service_number]+=L'y' ; break; case 0x7A : Captions[service_number]+=L'z' ; break; case 0x7B : Captions[service_number]+=L'{' ; break; case 0x7C : Captions[service_number]+=L'|' ; break; case 0x7D : Captions[service_number]+=L'}' ; break; case 0x7E : Captions[service_number]+=L'~' ; break; case 0x7F : Captions[service_number]+=L'\x266A'; break; case 0x88 : //CLW { Skip_B1( "CLW"); Pos+=1; } break; case 0x89 : //DSW { Skip_B1( "DSW"); Pos+=1; } break; case 0x8A : //HDW { Skip_B1( "HDW"); Pos+=1; } break; case 0x8B : //TGW { Skip_B1( "TGW"); Pos+=1; } break; case 0x8C : //DLW { Skip_B1( "DLW"); Pos+=1; } break; case 0x8D : //DLY { Skip_B1( "DLY"); Pos+=1; } break; case 0x90 : //SPA { Skip_B2( "SPA"); Pos+=2; } break; case 0x91 : //SPC { Skip_B3( "SPC"); Pos+=3; } break; case 0x92 : //SPL { Skip_B2( "SPL"); Pos+=2; } break; case 0x97 : //SWA { Skip_B4( "SWA"); Pos+=4; } break; case 0x98 : // { Skip_B6( "DF0"); Pos+=6; } break; case 0x99 : // { Skip_B6( "DF1"); Pos+=6; } break; case 0x9A : // { Skip_B6( "DF2"); Pos+=6; } break; case 0x9B : // { Skip_B6( "DF3"); Pos+=6; } break; case 0x9C : // { Skip_B6( "DF4"); Pos+=6; } break; case 0x9D : // { Skip_B6( "DF5"); Pos+=6; } break; case 0x9E : // { Skip_B6( "DF6"); Pos+=6; } break; case 0x9F : // { Skip_B6( "DF7"); Pos+=6; } break; default : ; } } Element_End(); } }
void File_Exr::channels() { //Parsing std::vector<Exr_channel> ChannelList; while (Element_Offset+1<Element_Size) { Element_Begin1("channel"); //Name size_t name_Size=0; while (Element_Offset+name_Size<Element_Size) { if (!Buffer[Buffer_Offset+(size_t)Element_Offset+name_Size]) break; name_Size++; } name_End++; Exr_channel Channel; Get_String(name_Size, Channel.name, "name"); Element_Info1(Channel.name); Element_Offset++; //Null byte Skip_L4( "pixel type"); Skip_L1( "pLinear"); Skip_B3( "reserved"); Get_L4 (Channel.xSampling, "xSampling"); Get_L4 (Channel.ySampling, "ySampling"); ChannelList.push_back(Channel); Element_End0(); } //Color space /* TODO: not finished bool HasAlpha=false; string ColorSpace, ChromaSubsampling; if (!ChannelList.empty() && ChannelList[0].name=="A") { HasAlpha=true; ChannelList.erase(ChannelList.begin()); } if (ChannelList.size()==1 && ChannelList[0].name=="Y") { ColorSpace="Y"; } else if (ChannelList.size()==3 && ChannelList[0].name=="V" && ChannelList[1].name=="U" && ChannelList[2].name=="Y") { ColorSpace="YUV"; //Chroma subsampling if (ChannelList[2].xSampling==1 && ChannelList[2].xSampling==1 && ChannelList[0].xSampling==ChannelList[1].xSampling && ChannelList[0].ySampling==ChannelList[1].ySampling) { switch (ChannelList[0].xSampling) { case 1 : switch (ChannelList[0].ySampling) { case 1 : ChromaSubsampling="4:4:4"; break; default: ; } break; case 2 : switch (ChannelList[0].ySampling) { case 1 : ChromaSubsampling="4:2:2"; break; case 2 : ChromaSubsampling="4:2:0"; break; default: ; } break; case 4 : switch (ChannelList[0].ySampling) { case 1 : ChromaSubsampling="4:1:1"; break; case 2 : ChromaSubsampling="4:1:0"; break; default: ; } break; default: ; } } } else if (ChannelList.size()==3 && ChannelList[0].name=="B" && ChannelList[1].name=="G" && ChannelList[2].name=="R") { ColorSpace="RGB"; } else { //TODO } if (!ColorSpace.empty()) { if (HasAlpha) ColorSpace+='A'; Fill(StreamKind_Last, 0, "ColorSpace", ColorSpace); } if (!ChromaSubsampling.empty()) Fill(StreamKind_Last, 0, "ChromaSubsampling", ChromaSubsampling); */ }