/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license that can
* be found in the License.html file in the root of the source tree.
*/
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// From : http://www.compuphase.com/flic.htm
//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//---------------------------------------------------------------------------
// Pre-compilation
#include "MediaInfo/PreComp.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include "MediaInfo/Setup.h"
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#if defined(MEDIAINFO_FLIC_YES)
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include "MediaInfo/Video/File_Flic.h"
//---------------------------------------------------------------------------
namespace MediaInfoLib
{
//***************************************************************************
// Format
//***************************************************************************
//---------------------------------------------------------------------------
void File_Flic::FileHeader_Parse()
{
//Parsing
int32u DelayBetweenFrames;
int16u Type, Frames, Width, Height, BitsPerPixel, AspectX=0, AspectY=0;
Skip_L4( "Size of FLIC including this header");
Get_L2 (Type, "File type");
Get_L2 (Frames, "Number of frames in first segment");
Get_L2 (Width, "Width");
Get_L2 (Height, "Height");
Get_L2 (BitsPerPixel, "Bits per pixel");
Skip_L2( "Flags");
Get_L4 (DelayBetweenFrames, "Delay between frames");
if (Type!=0xAF11)
{
Skip_L2( "Reserved");
Skip_L4( "Date of Creation)");
Skip_L4( "Serial number or compiler id");
Skip_L4( "Date of FLIC update");
Skip_L4( "Serial number");
Get_L2 (AspectX, "Width of square rectangle");
Get_L2 (AspectY, "Height of square rectangle");
}
else
Skip_XX(22, "Reserved");
Skip_L2( "EGI: flags for specific EGI extensions");
Skip_L2( "EGI: key-image frequency");
Skip_L2( "EGI: total number of frames (segments)");
Skip_L4( "EGI: maximum chunk size (uncompressed)");
Skip_L2( "EGI: max. number of regions in a CHK_REGION chunk");
Skip_L2( "EGI: number of transparent levels");
if (Type!=0xAF11)
{
Skip_XX(24, "Reserved");
Skip_L4( "Offset to frame 1");
Skip_L4( "Offset to frame 2");
Skip_XX(40, "Reserved");
}
else
Skip_XX(72, "Reserved");
//Filling
FILLING_BEGIN();
switch (Type)
{
case 0xAF11 :
case 0xAF12 :
case 0xAF30 :
case 0xAF31 :
case 0xAF44 :
break;
default :
Reject("FLIC");
return;
}
//Filling
Accept("FLIC");
Fill(Stream_General, 0, General_Format, "FLIC");
Stream_Prepare(Stream_Video);
if (Type==0xAF11)
{
Fill(Stream_Video, 0, Video_Format, "FLI");
Fill(Stream_Video, 0, Video_Codec, "FLI");
if (DelayBetweenFrames)
{
Fill(Stream_Video, StreamPos_Last, Video_FrameRate, 1000.0/(DelayBetweenFrames*70)); //multiple of 1/70 per frame
Fill(Stream_Video, 0, Video_Duration, Frames*DelayBetweenFrames*70);
}
}
else
{
Fill(Stream_Video, 0, Video_Format, "FLC");
Fill(Stream_Video, 0, Video_Codec, "FLC");
if (DelayBetweenFrames)
{
Fill(Stream_Video, StreamPos_Last, Video_FrameRate, 1000.0/DelayBetweenFrames); //ms per frame
Fill(Stream_Video, 0, Video_Duration, Frames*DelayBetweenFrames);
}
if (AspectY>0)
Fill(Stream_Video, StreamPos_Last, Video_DisplayAspectRatio, AspectX/AspectY, 3, true);
}
Fill(Stream_Video, 0, Video_FrameCount, Frames);
Fill(Stream_Video, StreamPos_Last, Video_Width, Width);
Fill(Stream_Video, StreamPos_Last, Video_Height, Height);
Fill(Stream_Video, 0, Video_BitDepth, (BitsPerPixel%3)?BitsPerPixel:(BitsPerPixel/3), 10, true); //If not a multiple of 3, the total resolution is filled
//No more need data
Finish("FLIC");
FILLING_END();
}
} //NameSpace
#endif //MEDIAINFO_FLIC_*
↑ V525 The code contains the collection of similar blocks. Check items '2', '2', '2', '4', '2', '2' in lines 66, 67, 68, 69, 70, 71.