iccvid: Use a separate argument for inverted decompressing.
Signed-off-by: Bruno Jesus <00cpxxx@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
1193a1ba7f
commit
ddb47a13a0
|
@ -403,9 +403,10 @@ typedef void (*fn_cvid_v4)(unsigned char *frm, unsigned char *limit,
|
||||||
* out_height - the height of the output frame
|
* out_height - the height of the output frame
|
||||||
* bit_per_pixel - the number of bits per pixel allocated to the output
|
* bit_per_pixel - the number of bits per pixel allocated to the output
|
||||||
* frame (only 24 or 32 bpp are supported)
|
* frame (only 24 or 32 bpp are supported)
|
||||||
|
* inverted - if true the output frame is written top-down
|
||||||
*/
|
*/
|
||||||
static void decode_cinepak(cinepak_info *cvinfo, unsigned char *buf, int size,
|
static void decode_cinepak(cinepak_info *cvinfo, unsigned char *buf, int size,
|
||||||
unsigned char *output, unsigned int out_width, unsigned int out_height, int bit_per_pixel)
|
unsigned char *output, unsigned int out_width, unsigned int out_height, int bit_per_pixel, BOOL inverted)
|
||||||
{
|
{
|
||||||
cvid_codebook *v4_codebook, *v1_codebook, *codebook = NULL;
|
cvid_codebook *v4_codebook, *v1_codebook, *codebook = NULL;
|
||||||
unsigned long x, y, y_bottom, cnum, strip_id, chunk_id,
|
unsigned long x, y, y_bottom, cnum, strip_id, chunk_id,
|
||||||
|
@ -424,13 +425,10 @@ static void decode_cinepak(cinepak_info *cvinfo, unsigned char *buf, int size,
|
||||||
unsigned short height;
|
unsigned short height;
|
||||||
unsigned short strips;
|
unsigned short strips;
|
||||||
} frame;
|
} frame;
|
||||||
BOOL inverted;
|
|
||||||
|
|
||||||
y = 0;
|
y = 0;
|
||||||
y_bottom = 0;
|
y_bottom = 0;
|
||||||
in_buffer = buf;
|
in_buffer = buf;
|
||||||
inverted = (int) out_height < 0;
|
|
||||||
if (inverted) out_height = -out_height;
|
|
||||||
|
|
||||||
frame.flags = get_byte();
|
frame.flags = get_byte();
|
||||||
frame.length = get_byte() << 16;
|
frame.length = get_byte() << 16;
|
||||||
|
@ -893,6 +891,7 @@ static LRESULT ICCVID_DecompressBegin( ICCVID_Info *info, LPBITMAPINFO in, LPBIT
|
||||||
static LRESULT ICCVID_Decompress( ICCVID_Info *info, ICDECOMPRESS *icd, DWORD size )
|
static LRESULT ICCVID_Decompress( ICCVID_Info *info, ICDECOMPRESS *icd, DWORD size )
|
||||||
{
|
{
|
||||||
LONG width, height;
|
LONG width, height;
|
||||||
|
BOOL inverted;
|
||||||
|
|
||||||
TRACE("ICM_DECOMPRESS %p %p %d\n", info, icd, size);
|
TRACE("ICM_DECOMPRESS %p %p %d\n", info, icd, size);
|
||||||
|
|
||||||
|
@ -906,10 +905,10 @@ static LRESULT ICCVID_Decompress( ICCVID_Info *info, ICDECOMPRESS *icd, DWORD si
|
||||||
|
|
||||||
width = icd->lpbiInput->biWidth;
|
width = icd->lpbiInput->biWidth;
|
||||||
height = icd->lpbiInput->biHeight;
|
height = icd->lpbiInput->biHeight;
|
||||||
if (-icd->lpbiOutput->biHeight == height) height = -height;
|
inverted = -icd->lpbiOutput->biHeight == height;
|
||||||
|
|
||||||
decode_cinepak(info->cvinfo, icd->lpInput, icd->lpbiInput->biSizeImage,
|
decode_cinepak(info->cvinfo, icd->lpInput, icd->lpbiInput->biSizeImage,
|
||||||
icd->lpOutput, width, height, info->bits_per_pixel);
|
icd->lpOutput, width, height, info->bits_per_pixel, inverted);
|
||||||
|
|
||||||
return ICERR_OK;
|
return ICERR_OK;
|
||||||
}
|
}
|
||||||
|
@ -917,6 +916,7 @@ static LRESULT ICCVID_Decompress( ICCVID_Info *info, ICDECOMPRESS *icd, DWORD si
|
||||||
static LRESULT ICCVID_DecompressEx( ICCVID_Info *info, ICDECOMPRESSEX *icd, DWORD size )
|
static LRESULT ICCVID_DecompressEx( ICCVID_Info *info, ICDECOMPRESSEX *icd, DWORD size )
|
||||||
{
|
{
|
||||||
LONG width, height;
|
LONG width, height;
|
||||||
|
BOOL inverted;
|
||||||
|
|
||||||
TRACE("ICM_DECOMPRESSEX %p %p %d\n", info, icd, size);
|
TRACE("ICM_DECOMPRESSEX %p %p %d\n", info, icd, size);
|
||||||
|
|
||||||
|
@ -932,10 +932,10 @@ static LRESULT ICCVID_DecompressEx( ICCVID_Info *info, ICDECOMPRESSEX *icd, DWOR
|
||||||
|
|
||||||
width = icd->lpbiSrc->biWidth;
|
width = icd->lpbiSrc->biWidth;
|
||||||
height = icd->lpbiSrc->biHeight;
|
height = icd->lpbiSrc->biHeight;
|
||||||
if (-icd->lpbiDst->biHeight == height) height = -height;
|
inverted = -icd->lpbiDst->biHeight == height;
|
||||||
|
|
||||||
decode_cinepak(info->cvinfo, icd->lpSrc, icd->lpbiSrc->biSizeImage,
|
decode_cinepak(info->cvinfo, icd->lpSrc, icd->lpbiSrc->biSizeImage,
|
||||||
icd->lpDst, width, height, info->bits_per_pixel);
|
icd->lpDst, width, height, info->bits_per_pixel, inverted);
|
||||||
|
|
||||||
return ICERR_OK;
|
return ICERR_OK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue