//--------------------------------------------------------------------------- void File_Dpx::GenericSectionHeader_Dpx_ImageElement() { Element_Begin1("image element"); int8u Descriptor, TransferCharacteristic, ColorimetricSpecification, BitDephs; Info_B4(DataSign, "Data sign");Param_Info1((DataSign==0?"unsigned":"signed")); Skip_B4( "Reference low data code value"); Skip_BF4( "Reference low quantity represented"); Skip_B4( "Reference high data code value"); Skip_BF4( "Reference high quantity represented"); Get_B1 (Descriptor, "Descriptor");Param_Info1(DPX_Descriptors(Descriptor)); Get_B1 (TransferCharacteristic, "Transfer characteristic");Param_Info1(DPX_TransferCharacteristic(TransferCharacteristic)); Get_B1 (ColorimetricSpecification, "Colorimetric specification");Param_Info1(DPX_ColorimetricSpecification(ColorimetricSpecification)); Get_B1 (BitDephs, "Bit depth");Param_Info1(DPX_ValidBitDephs(BitDephs)); Info_B2(ComponentDataPackingMethod, "Packing");Param_Info1((ComponentDataPackingMethod<8?DPX_ComponentDataPackingMethod[ComponentDataPackingMethod]:"invalid")); Info_B2(ComponentDataEncodingMethod, "Encoding");Param_Info1((ComponentDataEncodingMethod<8?DPX_ComponentDataEncodingMethod[ComponentDataEncodingMethod]:"invalid")); Skip_B4( "Offset to data"); Skip_B4( "End-of-line padding"); Skip_B4( "End-of-image padding"); Skip_UTF8(32, "Description of image element"); Element_End0(); FILLING_BEGIN(); if (Frame_Count==0) { Fill(StreamKind_Last, StreamPos_Last, "ColorSpace", DPX_Descriptors_ColorSpace(Descriptor)); Fill(StreamKind_Last, StreamPos_Last, "ChromaSubsampling", DPX_Descriptors_ChromaSubsampling(Descriptor)); Fill(StreamKind_Last, StreamPos_Last, "BitDepth", BitDephs); Fill(StreamKind_Last, StreamPos_Last, "colour_description_present", "Yes"); Fill(StreamKind_Last, StreamPos_Last, "colour_primaries", DPX_TransferCharacteristic(TransferCharacteristic)); Fill(StreamKind_Last, StreamPos_Last, "transfer_characteristics", DPX_ColorimetricSpecification(ColorimetricSpecification)); } FILLING_END(); }
//--------------------------------------------------------------------------- void File_Ibi::UInteger_Info() { switch (Element_Size) { case 1 : { Info_B1(Data, "Data"); Element_Info(Data); return; } case 2 : { Info_B2(Data, "Data"); Element_Info(Data); return; } case 3 : { Info_B3(Data, "Data"); Element_Info(Data); return; } case 4 : { Info_B4(Data, "Data"); Element_Info(Data); return; } case 5 : { Info_B5(Data, "Data"); Element_Info(Data); return; } case 6 : { Info_B6(Data, "Data"); Element_Info(Data); return; } case 7 : { Info_B7(Data, "Data"); Element_Info(Data); return; } case 8 : { Info_B8(Data, "Data"); Element_Info(Data); return; } case 16: { Info_B16(Data, "Data"); Element_Info(Data); return; } default : Skip_XX(Element_Size, "Data"); } }
//--------------------------------------------------------------------------- void File_Dpx::GenericSectionHeader_Dpx() { Element_Name("Generic section header"); //Parsing Element_Begin1("File information"); std::string Version, CreationDate, Creator, Project, Copyright; int32u Size_Header, Size_Total, Size_Generic, Size_Industry, Size_User; Skip_String(4, "Magic number"); Get_X4 (Size_Header, "Offset to image data"); Get_String(8, Version, "Version number of header format"); Get_X4 (Size_Total, "Total image file size"); Skip_B4( "Ditto Key"); Get_X4 (Size_Generic, "Generic section header length"); Get_X4 (Size_Industry, "Industry specific header length"); Get_X4 (Size_User, "User-defined header length"); Skip_UTF8 (100, "FileName"); Get_String (24, CreationDate, "Creation Date"); Get_String (100, Creator, "Creator"); Get_String (200, Project, "Project"); Get_String (200, Copyright, "Right to use or copyright statement"); Skip_B4( "Encryption key"); Skip_XX(104, "Reserved for future use"); Element_End0(); Element_Begin1("Image information"); int32u Width, Height, PAR_H, PAR_V; int16u ImageElements; Info_B2(ImageOrientation, "Image orientation");Param_Info1(DPX_Orientation[ImageOrientation]); Get_X2 (ImageElements, "Number of image elements"); if (ImageElements>8) ImageElements=8; Get_X4 (Width, "Pixels per line"); Get_X4 (Height, "Lines per image element"); for(int16u ImageElement=0; ImageElement<ImageElements; ImageElement++) GenericSectionHeader_Dpx_ImageElement(); if (ImageElements!=8) Skip_XX((8-ImageElements)*72, "Padding"); Skip_XX(52, "Reserved for future use"); Element_End0(); Element_Begin1("Image source information"); Skip_B4( "X Offset"); Skip_B4( "Y Offset"); Skip_BF4( "X center"); Skip_BF4( "Y center"); Skip_B4( "X original size"); Skip_B4( "Y original size"); Skip_UTF8(100, "Source image filename"); Skip_UTF8(24, "Source image date/time"); Skip_UTF8(32, "Input device name"); Skip_UTF8(32, "Input device serial number"); Element_Begin1("Border validity"); Skip_B2( "XL border"); Skip_B2( "XR border"); Skip_B2( "YT border"); Skip_B2( "YB border"); Element_End0(); Get_X4 (PAR_H, "Pixel ratio : horizontal"); Get_X4 (PAR_V, "Pixel ratio : vertical"); Element_Begin1("Additional source image information"); Skip_BF4( "X scanned size"); Skip_BF4( "Y scanned size"); Skip_XX(20, "Reserved for future use"); Element_End0(); FILLING_BEGIN(); //Coherency tests if (File_Offset+Buffer_Offset+Size_Total!=Config->File_Current_Size) Size_Total=(int32u)(Config->File_Current_Size-(File_Offset+Buffer_Offset)); //The total size is bigger than the real size if (Size_Generic==(int32u)-1) Size_Generic=(int32u)Element_Size; if (Size_Industry==(int32u)-1) Size_Industry=0; if (Size_User==(int32u)-1) Size_User=0; if (Size_Generic+Size_Industry+Size_User>Size_Header || Size_Header>Size_Total) { Reject(); return; } //Filling sizes Sizes.push_back(Size_Header); Sizes.push_back(Size_Industry); Sizes.push_back(Size_User); Sizes.push_back(Size_Header-(Size_Generic+Size_Industry+Size_User)); //Size of padding Sizes.push_back(Size_Total-Size_Header); //Size of image //Filling meta if (Frame_Count==0) { Fill(Stream_General, 0, General_Encoded_Date, CreationDate); //ToDo: transform it in UTC Fill(StreamKind_Last, StreamPos_Last, "Encoded_Date", CreationDate); //ToDo: transform it in UTC Fill(Stream_General, 0, General_Encoded_Library, Creator); Fill(StreamKind_Last, StreamPos_Last, "Encoded_Library", Creator); Fill(Stream_General, 0, "Project", Project); //ToDo: map to a MediaInfo field (which one?) Fill(Stream_General, 0, General_Copyright, Copyright); Fill(StreamKind_Last, StreamPos_Last, "Format", "DPX"); if (Version.size()>2 && Version[0]=='V' && Version[1]>='0' && Version[2]<='9') Version.insert(1, "ersion "); Fill(StreamKind_Last, StreamPos_Last, "Format_Version", Version); Fill(Stream_General, 0, General_Format_Version, Version); Fill(StreamKind_Last, StreamPos_Last, "Width", Width); Fill(StreamKind_Last, StreamPos_Last, "Height", Height); if (PAR_V && PAR_H!=(int32u)-1 && PAR_V!=(int32u)-1) Fill(StreamKind_Last, StreamPos_Last, "PixelAspectRatio", ((float)PAR_H)/PAR_V); else Fill(StreamKind_Last, StreamPos_Last, "PixelAspectRatio", (float)1, 3); } FILLING_END(); }