diff options
-rw-r--r-- | html/en/history.html | 5 | ||||
-rw-r--r-- | mak.vc9/im.sln | 13 | ||||
-rw-r--r-- | src/im_format_avi.cpp | 30 | ||||
-rw-r--r-- | test/im_view.c | 5 | ||||
-rw-r--r-- | test/im_view.vcproj | 6 |
5 files changed, 48 insertions, 11 deletions
diff --git a/html/en/history.html b/html/en/history.html index 462cd14..4967ed2 100644 --- a/html/en/history.html +++ b/html/en/history.html @@ -11,6 +11,11 @@ <body> <h1>History of Changes</h1> +<h3 dir="ltr">Version 3.4.2 (XX/XX/2009)</h3> +<ul> + <li><span style="color: #FF0000">Fixed:</span> AVI format when reading 32 + bpp frames.</li> +</ul> <h3 dir="ltr">Version 3.4.1 (15/Dec/2008)</h3> <ul> <li><span style="color: #008000">Changed:</span> function <strong> diff --git a/mak.vc9/im.sln b/mak.vc9/im.sln index e748276..b235a45 100644 --- a/mak.vc9/im.sln +++ b/mak.vc9/im.sln @@ -26,6 +26,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "imlua_process5", "imlua_pro EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "im_ecw", "im_ecw.vcproj", "{CB86E507-6B6C-4FDF-9B6D-27AA123AE463}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "im_view", "..\test\im_view.vcproj", "{909637FA-8229-45A9-9F42-53D8ED5F91C5}" + ProjectSection(ProjectDependencies) = postProject + {CB863607-6B6C-0000-0000-000000000000} = {CB863607-6B6C-0000-0000-000000000000} + {5A761929-07C3-48BD-8E4A-B37EC5C72C42} = {5A761929-07C3-48BD-8E4A-B37EC5C72C42} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -105,6 +111,13 @@ Global {CB86E507-6B6C-4FDF-9B6D-27AA123AE463}.Release|Win32.ActiveCfg = Debug|Win32 {CB86E507-6B6C-4FDF-9B6D-27AA123AE463}.Release|Win32.Build.0 = Debug|Win32 {CB86E507-6B6C-4FDF-9B6D-27AA123AE463}.Release|x64.ActiveCfg = Debug|Win32 + {909637FA-8229-45A9-9F42-53D8ED5F91C5}.Debug|Win32.ActiveCfg = Debug|Win32 + {909637FA-8229-45A9-9F42-53D8ED5F91C5}.Debug|Win32.Build.0 = Debug|Win32 + {909637FA-8229-45A9-9F42-53D8ED5F91C5}.Debug|x64.ActiveCfg = Debug|x64 + {909637FA-8229-45A9-9F42-53D8ED5F91C5}.Debug|x64.Build.0 = Debug|x64 + {909637FA-8229-45A9-9F42-53D8ED5F91C5}.Release|Win32.ActiveCfg = Debug|x64 + {909637FA-8229-45A9-9F42-53D8ED5F91C5}.Release|x64.ActiveCfg = Debug|x64 + {909637FA-8229-45A9-9F42-53D8ED5F91C5}.Release|x64.Build.0 = Debug|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/im_format_avi.cpp b/src/im_format_avi.cpp index 632e45b..dcb4898 100644 --- a/src/im_format_avi.cpp +++ b/src/im_format_avi.cpp @@ -2,7 +2,7 @@ * \brief AVI - Windows Audio-Video Interleaved RIFF * * See Copyright Notice in im_lib.h - * $Id: im_format_avi.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $ + * $Id: im_format_avi.cpp,v 1.3 2009/06/08 20:14:53 scuri Exp $ */ #include "im_format.h" @@ -59,7 +59,7 @@ class imFileFormatAVI: public imFileFormatBase void ReadPalette(unsigned char* bmp_colors); void WritePalette(unsigned char* bmp_colors); - void FixRGB(int bpp); + void FixRGBOrder(int bpp); void InitMasks(imDib* dib); public: @@ -282,7 +282,19 @@ int imFileFormatAVI::ReadImageInfo(int index) this->line_buffer_extra = 4; // room enough for padding /* prepares to read data from the stream */ - frame = AVIStreamGetFrameOpen(stream, NULL); + if (bpp == 32) + { + BITMAPINFOHEADER info; + memset(&info, 0, sizeof(BITMAPINFOHEADER)); + info.biSize = sizeof(BITMAPINFOHEADER); + info.biWidth = width; + info.biHeight = height; + info.biPlanes = 1; + info.biBitCount = (WORD)bpp; + frame = AVIStreamGetFrameOpen(stream, &info); + } + else + frame = AVIStreamGetFrameOpen(stream, NULL); if (!frame) return IM_ERR_ACCESS; @@ -504,7 +516,7 @@ void imFileFormatAVI::InitMasks(imDib* dib) } } -void imFileFormatAVI::FixRGB(int bpp) +void imFileFormatAVI::FixRGBOrder(int bpp) { int x; @@ -532,13 +544,17 @@ void imFileFormatAVI::FixRGB(int bpp) break; case 32: { + /* inverts the DWORD values if not intel */ + if (imBinCPUByteOrder() == IM_BIGENDIAN) + imBinSwapBytes4(this->line_buffer, this->width); + unsigned int* dword_data = (unsigned int*)this->line_buffer; imbyte* byte_data = (imbyte*)this->line_buffer; for (x = 0; x < this->width; x++) { unsigned int dword_value = dword_data[x]; - int c = x*3; + int c = x*4; byte_data[c] = (imbyte)((rmask & dword_value) >> roff); byte_data[c+1] = (imbyte)((gmask & dword_value) >> goff); byte_data[c+2] = (imbyte)((bmask & dword_value) >> boff); @@ -586,7 +602,7 @@ int imFileFormatAVI::ReadImageData(void* data) bits += dib->line_size; if (dib->bmih->biBitCount > 8) - FixRGB(dib->bmih->biBitCount); + FixRGBOrder(dib->bmih->biBitCount); imFileLineBufferRead(this, data, row, 0); @@ -623,7 +639,7 @@ int imFileFormatAVI::WriteImageData(void* data) imFileLineBufferWrite(this, data, row, 0); if (dib->bmih->biBitCount > 8) - FixRGB(dib->bmih->biBitCount); + FixRGBOrder(dib->bmih->biBitCount); CopyMemory(bits, this->line_buffer, dib->line_size); bits += dib->line_size; diff --git a/test/im_view.c b/test/im_view.c index 1bfb568..2ec8fac 100644 --- a/test/im_view.c +++ b/test/im_view.c @@ -147,11 +147,14 @@ static Ihandle* CreateDialog(void) return iup_dialog; } +#include "im_format_avi.h" + int main(int argc, char* argv[]) { Ihandle* dlg; - IupOpen(); + imFormatRegisterAVI(); + IupOpen(&argc, &argv); dlg = CreateDialog(); diff --git a/test/im_view.vcproj b/test/im_view.vcproj index 26aeb22..12cd0ba 100644 --- a/test/im_view.vcproj +++ b/test/im_view.vcproj @@ -44,7 +44,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="../../../iup/include;../../../cd/include;../../include" + AdditionalIncludeDirectories="../../iup/include;../../cd/include;../include" PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE" MinimalRebuild="false" BasicRuntimeChecks="3" @@ -65,10 +65,10 @@ /> <Tool Name="VCLinkerTool" - AdditionalDependencies="comctl32.lib im.lib iup.lib cd.lib cdiup.lib" + AdditionalDependencies="comctl32.lib vfw32.lib im.lib im_avi.lib iup.lib cd.lib iupcd.lib freetype6.lib" OutputFile="$(OutDir)/im_view.exe" LinkIncremental="1" - AdditionalLibraryDirectories="../../lib;../../../iup/lib;../../../cd/lib" + AdditionalLibraryDirectories="../lib;../../iup/lib/vc9;../../cd/lib/vc9" GenerateDebugInformation="true" ProgramDatabaseFile="$(OutDir)/im_view.pdb" SubSystem="1" |