[MPlayer-dev-eng] [PATCH] Fix demux_mov on 64-bit platforms
Timo Teräs
timo.teras at iki.fi
Mon Oct 11 16:01:34 CEST 2004
Hi,
I recently reported a but on advusers lists [1], but got no responses. Now I
managed to get a memory debugger working on my AMD64 boxen so I was able to
analyze the problem. The demux_mov.c crashed in operations to a
ImageDescription structure. Then I realized that structure defination is
complitely broken on 64-bit boxes as sizeof(long) == 8.
Please review and commit attached patch (it is mostly a search/replace of long
to int with few exceptions on loader/qtx/qtxsdk/components.h). It has also
minor fix for vd_ffmpeg.
After this fix the .MOVs play ok on my AMD64.
Cheers,
Timo
[1] http://mplayerhq.hu/pipermail/mplayer-advusers/2004-September/001019.html
-------------- next part --------------
? .inslog2
? amd64-sorenson-fix.diff
? typescript
Index: libmpcodecs/vd_ffmpeg.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpcodecs/vd_ffmpeg.c,v
retrieving revision 1.135
diff -u -r1.135 vd_ffmpeg.c
--- libmpcodecs/vd_ffmpeg.c 27 Sep 2004 10:08:57 -0000 1.135
+++ libmpcodecs/vd_ffmpeg.c 11 Oct 2004 13:32:56 -0000
@@ -349,7 +349,7 @@
sh->format == mmioFOURCC('S','V','Q','3')){
avctx->extradata_size = *(int*)sh->ImageDesc;
avctx->extradata = malloc(avctx->extradata_size);
- memcpy(avctx->extradata, ((int*)sh->ImageDesc)+1, avctx->extradata_size);
+ memcpy(avctx->extradata, ((int*)sh->ImageDesc)+1, avctx->extradata_size-sizeof(int));
}
if(sh->bih)
Index: loader/qtx/qtxsdk/components.h
===================================================================
RCS file: /cvsroot/mplayer/main/loader/qtx/qtxsdk/components.h,v
retrieving revision 1.9
diff -u -r1.9 components.h
--- loader/qtx/qtxsdk/components.h 8 Nov 2003 00:26:51 -0000 1.9
+++ loader/qtx/qtxsdk/components.h 11 Oct 2004 13:32:56 -0000
@@ -2,23 +2,23 @@
typedef char * Ptr;
typedef Ptr * Handle;
-typedef long Size;
+typedef int Size;
typedef unsigned char Boolean;
typedef unsigned char Str31[32];
-typedef long Fixed;
+typedef int Fixed;
-typedef long OSErr;
+typedef int OSErr;
typedef int OSType;
-typedef long ComponentResult;
+typedef int ComponentResult;
typedef unsigned char UInt8;
typedef signed char SInt8;
typedef unsigned short UInt16;
typedef signed short SInt16;
-typedef unsigned long UInt32;
-typedef signed long SInt32;
+typedef unsigned int UInt32;
+typedef signed int SInt32;
-#define FOUR_CHAR_CODE(a,b,c,d) ((unsigned long)(a)<<24 | (unsigned long)(b)<<16 | (unsigned long)(c)<<8 | (unsigned long)(d)) /* otherwise compiler will complain about values with high bit set */
+#define FOUR_CHAR_CODE(a,b,c,d) ((unsigned int)(a)<<24 | (unsigned int)(b)<<16 | (unsigned int)(c)<<8 | (unsigned int)(d)) /* otherwise compiler will complain about values with high bit set */
// codec private shit:
typedef void *GlobalsPtr;
@@ -30,7 +30,7 @@
UInt8 flags; /* call modifiers: sync/async, deferred, immed, etc */
UInt8 paramSize; /* size in bytes of actual parameters passed to this call */
short what; /* routine selector, negative for Component management calls */
- long params[1]; /* actual parameters for the indicated routine */
+ int params[1]; /* actual parameters for the indicated routine */
};
typedef struct ComponentParameters ComponentParameters;
@@ -39,8 +39,8 @@
OSType componentType; /* A unique 4-byte code indentifying the command set */
OSType componentSubType; /* Particular flavor of this instance */
OSType componentManufacturer; /* Vendor indentification */
- unsigned long componentFlags; /* 8 each for Component,Type,SubType,Manuf/revision */
- unsigned long componentFlagsMask; /* Mask for specifying which flags to consider in search, zero during registration */
+ unsigned int componentFlags; /* 8 each for Component,Type,SubType,Manuf/revision */
+ unsigned int componentFlagsMask; /* Mask for specifying which flags to consider in search, zero during registration */
};
typedef struct ComponentDescription ComponentDescription;
@@ -65,14 +65,14 @@
struct __attribute__((__packed__)) ComponentRecord {
- long data[1];
+ int data[1];
};
typedef struct ComponentRecord ComponentRecord;
typedef ComponentRecord * Component;
struct __attribute__((__packed__)) ComponentInstanceRecord {
- long data[1];
+ int data[1];
};
typedef struct ComponentInstanceRecord ComponentInstanceRecord;
@@ -107,7 +107,7 @@
typedef ColorSpec CSpecArray[1];
struct __attribute__((__packed__)) ColorTable {
- long ctSeed; /*unique identifier for table*/
+ int ctSeed; /*unique identifier for table*/
short ctFlags; /*high bit: 0 = PixMap; 1 = device*/
short ctSize; /*number of entries in CTTable*/
CSpecArray ctTable; /*array [0..0] of ColorSpec*/
@@ -122,27 +122,27 @@
typedef struct MatrixRecord MatrixRecord;
typedef MatrixRecord * MatrixRecordPtr;
-typedef long ImageSequence;
+typedef int ImageSequence;
typedef OSType CodecType;
typedef unsigned short CodecFlags;
-typedef unsigned long CodecQ;
+typedef unsigned int CodecQ;
struct __attribute__((__packed__)) ImageDescription {
- long idSize; /* total size of ImageDescription including extra data ( CLUTs and other per sequence data ) */
+ int idSize; /* total size of ImageDescription including extra data ( CLUTs and other per sequence data ) */
CodecType cType; /* what kind of codec compressed this data */
- long resvd1; /* reserved for Apple use */
+ int resvd1; /* reserved for Apple use */
short resvd2; /* reserved for Apple use */
short dataRefIndex; /* set to zero */
short version; /* which version is this data */
short revisionLevel; /* what version of that codec did this */
- long vendor; /* whose codec compressed this data */
+ int vendor; /* whose codec compressed this data */
CodecQ temporalQuality; /* what was the temporal quality factor */
CodecQ spatialQuality; /* what was the spatial quality factor */
short width; /* how many pixels wide is this data */
short height; /* how many pixels high is this data */
Fixed hRes; /* horizontal resolution */
Fixed vRes; /* vertical resolution */
- long dataSize; /* if known, the size of data for this image descriptor */
+ int dataSize; /* if known, the size of data for this image descriptor */
short frameCount; /* number of frames this description applies to */
Str31 name; /* name of codec ( in case not installed ) */
short depth; /* what depth is this data (1-32) or ( 33-40 grayscale ) */
@@ -173,15 +173,15 @@
};
struct __attribute__((__packed__)) PixMapExtension {
- long extSize; /*size of struct, duh!*/
- unsigned long pmBits; /*pixmap attributes bitfield*/
+ int extSize; /*size of struct, duh!*/
+ unsigned int pmBits; /*pixmap attributes bitfield*/
void * pmGD; /*this is a GDHandle*/
- long pmSeed;
+ int pmSeed;
Fixed gammaLevel; /*pixmap gammalevel*/
Fixed requestedGammaLevel;
- unsigned long reserved2;
- long longRowBytes; /*used when rowBytes > 16382*/
- unsigned long signature;
+ unsigned int reserved2;
+ int intRowBytes; /*used when rowBytes > 16382*/
+ unsigned int signature;
Handle baseAddrHandle;
};
typedef struct PixMapExtension PixMapExtension;
@@ -196,7 +196,7 @@
Rect bounds; /*encloses bitmap*/
short pmVersion; /*pixMap version number*/
short packType; /*defines packing format*/
- long packSize; /*length of pixel data*/
+ int packSize; /*length of pixel data*/
Fixed hRes; /*horiz. resolution (ppi)*/
Fixed vRes; /*vert. resolution (ppi)*/
short pixelType; /*defines pixel type*/
@@ -252,8 +252,8 @@
short txMode;
short txSize;
Fixed spExtra;
- long fgColor;
- long bkColor;
+ int fgColor;
+ int bkColor;
short colrBit;
short patStretch;
Handle picSave;
@@ -298,7 +298,7 @@
transparent = 36
};
-typedef unsigned long GWorldFlags;
+typedef unsigned int GWorldFlags;
@@ -405,15 +405,15 @@
struct __attribute__((__packed__)) CodecCapabilities {
- long flags;
+ int flags;
short wantedPixelSize;
short extendWidth;
short extendHeight;
short bandMin;
short bandInc;
short pad;
- unsigned long time;
- long flags2; /* field new in QuickTime 4.0 */
+ unsigned int time;
+ int flags2; /* field new in QuickTime 4.0 */
};
typedef struct CodecCapabilities CodecCapabilities;
@@ -421,12 +421,12 @@
ImageSequence sequenceID; /* predecompress,banddecompress */
ImageDescriptionHandle imageDescription; /* predecompress,banddecompress */
Ptr data;
- long bufferSize;
+ int bufferSize;
- long frameNumber;
- long startLine;
- long stopLine;
- long conditionFlags;
+ int frameNumber;
+ int startLine;
+ int stopLine;
+ int conditionFlags;
CodecFlags callerFlags; // short
CodecCapabilities * capabilities; /* predecompress,banddecompress */
@@ -443,7 +443,7 @@
CodecQ accuracy; /* predecompress,banddecompress */
short transferMode; /* predecompress,banddecompress */
ICMFrameTimePtr frameTime; /* banddecompress */
- long reserved[1];
+ int reserved[1];
/* The following fields only exist for QuickTime 2.0 and greater */
SInt8 matrixFlags; /* high bit set if 2x resize */
@@ -460,8 +460,8 @@
/* The following fields only exist for QuickTime 2.5 and greater */
OSType ** wantedDestinationPixelTypes; /* Handle to 0-terminated list of OSTypes */
- long screenFloodMethod;
- long screenFloodValue;
+ int screenFloodMethod;
+ int screenFloodValue;
short preferredOffscreenPixelSize;
/* The following fields only exist for QuickTime 3.0 and greater */
@@ -471,12 +471,12 @@
Boolean needUpdateOnSourceChange; /* band decompress */
Boolean pad;
- long unused;
+ int unused;
CGrafPtr finalDestinationPort;
- long requestedBufferWidth; /* must set codecWantsSpecialScaling to indicate this field is valid*/
- long requestedBufferHeight; /* must set codecWantsSpecialScaling to indicate this field is valid*/
+ int requestedBufferWidth; /* must set codecWantsSpecialScaling to indicate this field is valid*/
+ int requestedBufferHeight; /* must set codecWantsSpecialScaling to indicate this field is valid*/
/* The following fields only exist for QuickTime 4.0 and greater */
Rect displayableAreaOfRequestedBuffer; /* set in predecompress*/
@@ -494,8 +494,8 @@
struct __attribute__((__packed__)) ImageSubCodecDecompressCapabilities {
- long recordSize; /* sizeof(ImageSubCodecDecompressCapabilities)*/
- long decompressRecordSize; /* size of your codec's decompress record*/
+ int recordSize; /* sizeof(ImageSubCodecDecompressCapabilities)*/
+ int decompressRecordSize; /* size of your codec's decompress record*/
Boolean canAsync; /* default true*/
UInt8 pad0;
@@ -517,7 +517,7 @@
struct __attribute__((__packed__)) ImageSubCodecDecompressRecord {
Ptr baseAddr;
- long rowBytes;
+ int rowBytes;
Ptr codecData;
ICMProgressProcRecord progressProcRecord;
ICMDataProcRecord dataProcRecord;
@@ -525,7 +525,7 @@
UInt8 frameType;
Boolean inhibitMP; /* set this in BeginBand to tell the base decompressor not to call DrawBand from an MP task for this frame. (Only has any effect for MP-capable subcodecs. New in QuickTime 5.0.)*/
UInt8 pad[2];
- long priv[2];
+ int priv[2];
/* The following fields only exist for QuickTime 5.0 and greater */
ImageCodecDrawBandCompleteUPP drawBandCompleteUPP; /* only used if subcodec set subCodecCallsDrawBandComplete; if drawBandCompleteUPP is non-nil, codec must call it when a frame is finished, but may return from DrawBand before the frame is finished. */
@@ -584,10 +584,10 @@
Str31 typeName; /* name of the codec type i.e.: 'Apple Image Compression' */
short version; /* version of the codec data that this codec knows about */
short revisionLevel; /* revision level of this codec i.e: 0x00010001 (1.0.1) */
- long vendor; /* Maker of this codec i.e: 'appl' */
- long decompressFlags; /* codecInfo flags for decompression capabilities */
- long compressFlags; /* codecInfo flags for compression capabilities */
- long formatFlags; /* codecInfo flags for compression format details */
+ int vendor; /* Maker of this codec i.e: 'appl' */
+ int decompressFlags; /* codecInfo flags for decompression capabilities */
+ int compressFlags; /* codecInfo flags for compression capabilities */
+ int formatFlags; /* codecInfo flags for compression format details */
UInt8 compressionAccuracy; /* measure (1-255) of accuracy of this codec for compress (0 if unknown) */
UInt8 decompressionAccuracy; /* measure (1-255) of accuracy of this codec for decompress (0 if unknown) */
unsigned short compressionSpeed; /* ( millisecs for compressing 320x240 on base mac II) (0 if unknown) */
@@ -598,7 +598,7 @@
short minimumWidth; /* minimum width of image (block size) */
short decompressPipelineLatency; /* in milliseconds ( for asynchronous codecs ) */
short compressPipelineLatency; /* in milliseconds ( for asynchronous codecs ) */
- long privateData;
+ int privateData;
};
typedef struct CodecInfo CodecInfo;
More information about the MPlayer-dev-eng
mailing list