Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/quicktime/apple/quicktime_import.c')
-rw-r--r--source/blender/quicktime/apple/quicktime_import.c833
1 files changed, 0 insertions, 833 deletions
diff --git a/source/blender/quicktime/apple/quicktime_import.c b/source/blender/quicktime/apple/quicktime_import.c
deleted file mode 100644
index 511b62d856a..00000000000
--- a/source/blender/quicktime/apple/quicktime_import.c
+++ /dev/null
@@ -1,833 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- *
- * The Original Code is written by Rob Haarsma (phase)
- *
- * Contributor(s): Stefan Gartner (sgefant)
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/** \file blender/quicktime/apple/quicktime_import.c
- * \ingroup quicktime
- *
- * Code to use Quicktime to load images/movies as texture.
- */
-
-#ifdef WITH_QUICKTIME
-
-#if defined(_WIN32) || defined(__APPLE__)
-#ifndef USE_QTKIT
-
-#include "MEM_guardedalloc.h"
-#include "IMB_anim.h"
-#include "BLI_sys_types.h"
-#include "BKE_global.h"
-#include "BLI_dynstr.h"
-#include "BLI_path_util.h"
-
-#ifdef __APPLE__
-#include <QuickTime/Movies.h>
-#include <QuickTime/QuickTimeComponents.h>
-#endif
-
-#ifdef _WIN32
-#include <Movies.h>
-#include <QTML.h>
-#include <TextUtils.h>
-#include <QuickTimeComponents.h>
-#include <QTLoadLibraryUtils.h>
-#endif /* _WIN32 */
-
-
-#include "quicktime_import.h"
-#include "quicktime_export.h"
-
-#define RECT_WIDTH(r) (r.right - r.left)
-#define RECT_HEIGHT(r) (r.bottom - r.top)
-
-#define QTIME_DEBUG 0
-
-typedef struct _QuicktimeMovie {
-
- GWorldPtr offscreenGWorld;
- PixMapHandle offscreenPixMap;
- Movie movie;
- Rect movieBounds;
- short movieRefNum;
- short movieResId;
- int movWidth, movHeight;
-
-
- int framecount;
-
-
- ImBuf *ibuf;
-
-
- TimeValue *frameIndex;
- Media theMedia;
- Track theTrack;
- long trackIndex;
- short depth;
-
- int have_gw; /* ugly */
-} QuicktimeMovie;
-
-
-
-void quicktime_init(void)
-{
- OSErr nerr;
-#ifdef _WIN32
- QTLoadLibrary("QTCF.dll");
- nerr = InitializeQTML(0);
- if (nerr != noErr) {
- G.have_quicktime = FALSE;
- }
- else
- G.have_quicktime = TRUE;
-#endif /* _WIN32 */
-
- /* Initialize QuickTime */
-#if defined(_WIN32) || defined(__APPLE__)
- nerr = EnterMovies();
- if (nerr != noErr)
- G.have_quicktime = FALSE;
- else
-#endif /* _WIN32 || __APPLE__ */
-#ifdef __linux__
- /* inititalize quicktime codec registry */
- lqt_registry_init();
-#endif
- G.have_quicktime = TRUE;
-}
-
-
-void quicktime_exit(void)
-{
-#if defined(_WIN32) || defined(__APPLE__)
-#ifdef WITH_QUICKTIME
- if (G.have_quicktime) {
- free_qtcomponentdata();
- ExitMovies();
-#ifdef _WIN32
- TerminateQTML();
-#endif /* _WIN32 */
- }
-#endif /* WITH_QUICKTIME */
-#endif /* _WIN32 || __APPLE__ */
-}
-
-
-#ifdef _WIN32
-char *get_valid_qtname(char *name)
-{
- TCHAR Buffer[MAX_PATH];
- DWORD dwRet;
- char *qtname;
- DynStr *ds = BLI_dynstr_new();
-
- dwRet = GetCurrentDirectory(MAX_PATH, Buffer);
-
- if (name[1] != ':') {
- char drive[2];
-
- if (name[0] == '/' || name[0] == '\\') {
- drive[0] = Buffer[0];
- drive[1] = '\0';
-
- BLI_dynstr_append(ds, drive);
- BLI_dynstr_append(ds, ":");
- BLI_dynstr_append(ds, name);
- }
- else {
- BLI_dynstr_append(ds, Buffer);
- BLI_dynstr_append(ds, "/");
- BLI_dynstr_append(ds, name);
- }
- }
- else {
- BLI_dynstr_append(ds, name);
- }
-
- qtname = BLI_dynstr_get_cstring(ds);
- BLI_dynstr_free(ds);
-
- return qtname;
-}
-#endif /* _WIN32 */
-
-
-int anim_is_quicktime(const char *name)
-{
- FSSpec theFSSpec;
- char theFullPath[255];
-
- Boolean isMovieFile = false;
- AliasHandle myAlias = NULL;
- Component myImporter = NULL;
-#ifdef __APPLE__
- FInfo myFinderInfo;
- FSRef myRef;
-#else
- char *qtname;
- Str255 dst;
-#endif
- OSErr err = noErr;
-
- // don't let quicktime movie import handle these
- if (BLI_testextensie(name, ".swf") ||
- BLI_testextensie(name, ".txt") ||
- BLI_testextensie(name, ".mpg") ||
- BLI_testextensie(name, ".avi") || /* wouldn't be appropriate ;) */
- BLI_testextensie(name, ".tga") ||
- BLI_testextensie(name, ".png") ||
- BLI_testextensie(name, ".bmp") ||
- BLI_testextensie(name, ".jpg") ||
- BLI_testextensie(name, ".tif") ||
- BLI_testextensie(name, ".exr") ||
- BLI_testextensie(name, ".wav") ||
- BLI_testextensie(name, ".zip") ||
- BLI_testextensie(name, ".mp3"))
- {
- return 0;
- }
-
- if (QTIME_DEBUG) printf("qt: checking as movie: %s\n", name);
-
-#ifdef __APPLE__
- strcpy(theFullPath, name);
-
- err = FSPathMakeRef(theFullPath, &myRef, 0);
- err = FSGetCatalogInfo(&myRef, kFSCatInfoNone, NULL, NULL, &theFSSpec, NULL);
-#else
- qtname = get_valid_qtname(name);
- strcpy(theFullPath, qtname);
- MEM_freeN(qtname);
-
- CopyCStringToPascal(theFullPath, dst);
- err = FSMakeFSSpec(0, 0L, dst, &theFSSpec);
-#endif
-
-#ifdef __APPLE__
- // see whether the file type is MovieFileType; to do this, get the Finder information
- err = FSpGetFInfo(&theFSSpec, &myFinderInfo);
- if (err == noErr) {
- if (myFinderInfo.fdType == kQTFileTypeMovie) {
- return(true);
- }
- }
-#endif
-
-/* on mac os x this results in using quicktime for other formats as well
- * not sure whether this is intended
- */
- // if it isn't a movie file, see whether the file can be imported as a movie
- err = QTNewAlias(&theFSSpec, &myAlias, true);
- if (err == noErr) {
- if (myAlias != NULL) {
- err = GetMovieImporterForDataRef(rAliasType, (Handle)myAlias, kGetMovieImporterDontConsiderGraphicsImporters, &myImporter);
- DisposeHandle((Handle)myAlias);
- }
- }
-
- if ((err == noErr) && (myImporter != NULL)) { /* this file is a movie file */
- isMovieFile = true;
- }
-
- return(isMovieFile);
-}
-
-
-void free_anim_quicktime(struct anim *anim)
-{
- if (anim == NULL) return;
- if (anim->qtime == NULL) return;
-
- UnlockPixels(anim->qtime->offscreenPixMap);
-
- if (anim->qtime->have_gw)
- DisposeGWorld(anim->qtime->offscreenGWorld);
- if (anim->qtime->ibuf)
- IMB_freeImBuf(anim->qtime->ibuf);
-
- DisposeMovie(anim->qtime->movie);
- CloseMovieFile(anim->qtime->movieRefNum);
-
- if (anim->qtime->frameIndex) MEM_freeN(anim->qtime->frameIndex);
- if (anim->qtime) MEM_freeN(anim->qtime);
-
- anim->qtime = NULL;
-
- anim->duration = 0;
-}
-
-
-static OSErr QT_get_frameIndexes(struct anim *anim)
-{
- int i;
- OSErr anErr = noErr;
- OSType media = VideoMediaType;
- TimeValue nextTime = 0;
- TimeValue startPoint;
- TimeValue tmpstartPoint;
- long sampleCount = 0;
-
- startPoint = -1;
-
- GetMovieNextInterestingTime(anim->qtime->movie, nextTimeMediaSample + nextTimeEdgeOK, (TimeValue)1, &media, 0,
- 1, &startPoint, NULL);
-
- tmpstartPoint = startPoint;
-
- anim->qtime->framecount = 0;
-
- sampleCount = GetMediaSampleCount(anim->qtime->theMedia);
- anErr = GetMoviesError();
- if (anErr != noErr) return anErr;
-
- anim->qtime->framecount = sampleCount;
-
- anim->qtime->frameIndex = (TimeValue *) MEM_callocN(sizeof(TimeValue) * anim->qtime->framecount, "qtframeindex");
-
- //rewind
- GetMovieNextInterestingTime(anim->qtime->movie, nextTimeMediaSample, 1, &media, (TimeValue)1, 0, &tmpstartPoint, NULL);
-
- anim->qtime->frameIndex[0] = startPoint;
- for (i = 1; i < anim->qtime->framecount; i++) {
- nextTime = 0;
- GetMovieNextInterestingTime(anim->qtime->movie, nextTimeMediaSample, 1, &media, startPoint, 0, &nextTime, NULL);
- startPoint = nextTime;
- anim->qtime->frameIndex[i] = nextTime;
- }
-
- anErr = GetMoviesError();
- return anErr;
-}
-
-
-ImBuf *qtime_fetchibuf(struct anim *anim, int position)
-{
- PixMapHandle myPixMap = NULL;
- Ptr myPtr;
-
- register int index;
- register int boxsize;
-
- register uint32_t *readPos;
- register uint32_t *changePos;
-
- ImBuf *ibuf = NULL;
- unsigned int *rect;
-#ifdef __APPLE__
- unsigned char *from, *to;
-#endif
-#ifdef _WIN32
- unsigned char *crect;
-#endif
-
- if (anim == NULL) {
- return (NULL);
- }
-
- ibuf = IMB_allocImBuf(anim->x, anim->y, 32, IB_rect);
- rect = ibuf->rect;
-
- SetMovieTimeValue(anim->qtime->movie, anim->qtime->frameIndex[position]);
- UpdateMovie(anim->qtime->movie);
- MoviesTask(anim->qtime->movie, 0);
-
-
- myPixMap = GetGWorldPixMap(anim->qtime->offscreenGWorld);
- myPtr = GetPixBaseAddr(myPixMap);
-
- if (myPtr == NULL) {
- printf("Error reading frame from Quicktime");
- IMB_freeImBuf(ibuf);
- return NULL;
- }
-
- boxsize = anim->x * anim->y;
- readPos = (uint32_t *) myPtr;
- changePos = (uint32_t *) rect; //textureIMBuf *THE* data pointerrr
-
-#ifdef __APPLE__
- // Swap alpha byte to the end, so ARGB become RGBA;
- from = (unsigned char *)readPos;
- to = (unsigned char *)changePos;
-
- for (index = 0; index < boxsize; index++, from += 4, to += 4) {
- to[3] = from[0];
- to[0] = from[1];
- to[1] = from[2];
- to[2] = from[3];
- }
-#endif
-
-#ifdef _WIN32
- for (index = 0; index < boxsize; index++, changePos++, readPos++)
- *(changePos) = *(readPos);
-
- if (anim->qtime->depth < 32) {
- //add alpha to ibuf
- boxsize = anim->x * anim->y * 4;
- crect = (unsigned char *) rect;
- for (index = 0; index < boxsize; index += 4, crect += 4) {
- crect[3] = 0xFF;
- }
- }
-#endif
-
- IMB_flipy(ibuf);
- return ibuf;
-}
-
-
-// following two functions only here to get movie pixeldepth
-
-static int GetFirstVideoMedia(struct anim *anim)
-{
- long numTracks;
- OSType mediaType;
-
- numTracks = GetMovieTrackCount(anim->qtime->movie);
-
- for (anim->qtime->trackIndex = 1; anim->qtime->trackIndex <= numTracks; (anim->qtime->trackIndex)++) {
- anim->qtime->theTrack = GetMovieIndTrack(anim->qtime->movie, anim->qtime->trackIndex);
-
- if (anim->qtime->theTrack)
- anim->qtime->theMedia = GetTrackMedia(anim->qtime->theTrack);
-
- if (anim->qtime->theMedia)
- GetMediaHandlerDescription(anim->qtime->theMedia, &mediaType, nil, nil);
- if (mediaType == VideoMediaType) return 1;
- }
-
- anim->qtime->trackIndex = 0; // trackIndex can't be 0
- return 0; // went through all tracks and no video
-}
-
-static short GetFirstVideoTrackPixelDepth(struct anim *anim)
-{
- SampleDescriptionHandle imageDescH = (SampleDescriptionHandle)NewHandle(sizeof(Handle));
-// long trackIndex = 0; /*unused*/
-
- if (!GetFirstVideoMedia(anim))
- return -1;
-
- if (!anim->qtime->trackIndex || !anim->qtime->theMedia) return -1; // we need both
- GetMediaSampleDescription(anim->qtime->theMedia, anim->qtime->trackIndex, imageDescH);
-
- return (*(ImageDescriptionHandle)imageDescH)->depth;
-}
-
-
-int startquicktime(struct anim *anim)
-{
- FSSpec theFSSpec;
-
- OSErr err = noErr;
- char theFullPath[255];
-#ifdef __APPLE__
- FSRef myRef;
-#else
- char *qtname;
- Str255 dst;
-#endif
- short depth = 0;
-
- anim->qtime = MEM_callocN(sizeof(QuicktimeMovie), "animqt");
- anim->qtime->have_gw = FALSE;
-
- if (anim->qtime == NULL) {
- if (QTIME_DEBUG) printf("Can't alloc qtime: %s\n", anim->name);
- return -1;
- }
-
- if (QTIME_DEBUG) printf("qt: attempting to load as movie %s\n", anim->name);
-
-#ifdef __APPLE__
- strcpy(theFullPath, anim->name);
-
- err = FSPathMakeRef(theFullPath, &myRef, 0);
- err = FSGetCatalogInfo(&myRef, kFSCatInfoNone, NULL, NULL, &theFSSpec, NULL);
-#else
- qtname = get_valid_qtname(anim->name);
- strcpy(theFullPath, qtname);
- MEM_freeN(qtname);
-
- CopyCStringToPascal(theFullPath, dst);
- FSMakeFSSpec(0, 0L, dst, &theFSSpec);
-#endif
-
- err = OpenMovieFile(&theFSSpec, &anim->qtime->movieRefNum, fsRdPerm);
-
- if (err == noErr) {
- if (QTIME_DEBUG) printf("qt: movie opened\n");
- err = NewMovieFromFile(&anim->qtime->movie,
- anim->qtime->movieRefNum,
- &anim->qtime->movieResId, NULL, newMovieActive, NULL);
- }
-
- if (err) {
- if (QTIME_DEBUG) printf("qt: bad movie %s\n", anim->name);
- if (anim->qtime->movie) {
- DisposeMovie(anim->qtime->movie);
- MEM_freeN(anim->qtime);
- if (QTIME_DEBUG) printf("qt: can't load %s\n", anim->name);
- return -1;
- }
- }
-
- GetMovieBox(anim->qtime->movie, &anim->qtime->movieBounds);
- anim->x = anim->qtime->movWidth = RECT_WIDTH(anim->qtime->movieBounds);
- anim->y = anim->qtime->movHeight = RECT_HEIGHT(anim->qtime->movieBounds);
- if (QTIME_DEBUG) printf("qt: got bounds %s\n", anim->name);
-
- if (anim->x == 0 && anim->y == 0) {
- if (QTIME_DEBUG) printf("qt: error, no dimensions\n");
- free_anim_quicktime(anim);
- return -1;
- }
-
- anim->qtime->ibuf = IMB_allocImBuf(anim->x, anim->y, 32, IB_rect);
-
-#ifdef _WIN32
- err = NewGWorldFromPtr(&anim->qtime->offscreenGWorld,
- k32RGBAPixelFormat,
- &anim->qtime->movieBounds,
- NULL, NULL, 0,
- (unsigned char *)anim->qtime->ibuf->rect,
- anim->x * 4);
-#else
- err = NewGWorldFromPtr(&anim->qtime->offscreenGWorld,
- k32ARGBPixelFormat,
- &anim->qtime->movieBounds,
- NULL, NULL, 0,
- (unsigned char *)anim->qtime->ibuf->rect,
- anim->x * 4);
-#endif /* _WIN32 */
-
- if (err == noErr) {
- anim->qtime->have_gw = TRUE;
-
- SetMovieGWorld(anim->qtime->movie,
- anim->qtime->offscreenGWorld,
- GetGWorldDevice(anim->qtime->offscreenGWorld));
- SetMoviePlayHints(anim->qtime->movie, hintsHighQuality, hintsHighQuality);
-
- // sets Media and Track!
- depth = GetFirstVideoTrackPixelDepth(anim);
-
- QT_get_frameIndexes(anim);
- }
-
- anim->qtime->offscreenPixMap = GetGWorldPixMap(anim->qtime->offscreenGWorld);
- LockPixels(anim->qtime->offscreenPixMap);
-
- //fill blender's anim struct
- anim->qtime->depth = depth;
-
- anim->duration = anim->qtime->framecount;
- anim->params = 0;
-
- anim->interlacing = 0;
- anim->orientation = 0;
- anim->framesize = anim->x * anim->y * 4;
-
- anim->curposition = 0;
-
- if (QTIME_DEBUG) printf("qt: load %s %dx%dx%d frames %d\n", anim->name, anim->qtime->movWidth,
- anim->qtime->movHeight, anim->qtime->depth, anim->qtime->framecount);
-
- return 0;
-}
-
-int imb_is_a_quicktime(char *name)
-{
- GraphicsImportComponent theImporter = NULL;
-
- FSSpec theFSSpec;
-#ifdef _WIN32
- Str255 dst; /*unused*/
-#endif
- char theFullPath[255];
-
-// Boolean isMovieFile = false; /*unused*/
-// AliasHandle myAlias = NULL; /*unused*/
-// Component myImporter = NULL; /*unused*/
-#ifdef __APPLE__
-// FInfo myFinderInfo; /*unused*/
- FSRef myRef;
-#endif
- OSErr err = noErr;
-
- if (!G.have_quicktime) return 0;
-
- if (QTIME_DEBUG) printf("qt: checking as image %s\n", name);
-
- // don't let quicktime image import handle these
- if (BLI_testextensie(name, ".swf") ||
- BLI_testextensie(name, ".txt") ||
- BLI_testextensie(name, ".mpg") ||
- BLI_testextensie(name, ".wav") ||
- BLI_testextensie(name, ".mov") || // not as image, doesn't work
- BLI_testextensie(name, ".avi") ||
- BLI_testextensie(name, ".mp3"))
- {
- return 0;
- }
-
- strcpy(theFullPath, name);
-#ifdef __APPLE__
- err = FSPathMakeRef(theFullPath, &myRef, 0);
- err = FSGetCatalogInfo(&myRef, kFSCatInfoNone, NULL, NULL, &theFSSpec, NULL);
-#else
- CopyCStringToPascal(theFullPath, dst);
- err = FSMakeFSSpec(0, 0L, dst, &theFSSpec);
-#endif
-
- GetGraphicsImporterForFile(&theFSSpec, &theImporter);
-
- if (theImporter != NULL) {
- if (QTIME_DEBUG) printf("qt: %s valid\n", name);
- CloseComponent(theImporter);
- return 1;
- }
-
- return 0;
-}
-
-ImBuf *imb_quicktime_decode(unsigned char *mem, int size, int flags)
-{
- Rect myRect;
- OSErr err = noErr;
- GraphicsImportComponent gImporter = NULL;
-
- ImageDescriptionHandle desc;
-
- ComponentInstance dataHandler;
- PointerDataRef dataref;
-
- int x, y, depth;
- int have_gw = FALSE;
- ImBuf *ibuf = NULL;
-// ImBuf *imbuf = NULL; /*unused*/
- GWorldPtr offGWorld;
- PixMapHandle myPixMap = NULL;
-
-#ifdef __APPLE__
- Ptr myPtr;
-
- register int index;
- register int boxsize;
-
- register uint32_t *readPos;
- register uint32_t *changePos;
-
- ImBuf *wbuf = NULL;
- unsigned int *rect;
- unsigned char *from, *to;
-#endif
-
- if (mem == NULL || !G.have_quicktime)
- goto bail;
-
- if (QTIME_DEBUG) printf("qt: attempt to load mem as image\n");
-
- dataref = (PointerDataRef)NewHandle(sizeof(PointerDataRefRecord));
- (**dataref).data = mem;
- (**dataref).dataLength = size;
-
- err = OpenADataHandler((Handle)dataref,
- PointerDataHandlerSubType,
- nil,
- (OSType)0,
- nil,
- kDataHCanRead,
- &dataHandler);
- if (err != noErr) {
- if (QTIME_DEBUG) printf("no datahandler\n");
- goto bail;
- }
-
- err = GetGraphicsImporterForDataRef((Handle)dataref, PointerDataHandlerSubType, &gImporter);
- if (err != noErr) {
- if (QTIME_DEBUG) printf("no graphimport\n");
- goto bail;
- }
-
- err = GraphicsImportGetNaturalBounds(gImporter, &myRect);
- if (err != noErr) {
- if (QTIME_DEBUG) printf("no bounds\n");
- goto bail;
- }
-
- err = GraphicsImportGetImageDescription(gImporter, &desc);
- if (err != noErr) {
- if (QTIME_DEBUG) printf("no imagedescription\n");
- goto bail;
- }
-
- x = RECT_WIDTH(myRect);
- y = RECT_HEIGHT(myRect);
- depth = (**desc).depth;
-
- if (flags & IB_test) {
- ibuf = IMB_allocImBuf(x, y, depth, 0);
- ibuf->ftype = QUICKTIME;
- DisposeHandle((Handle)dataref);
- if (gImporter != NULL) CloseComponent(gImporter);
- return ibuf;
- }
-
-#ifdef __APPLE__
- ibuf = IMB_allocImBuf(x, y, 32, IB_rect);
- wbuf = IMB_allocImBuf(x, y, 32, IB_rect);
-
- err = NewGWorldFromPtr(&offGWorld,
- k32ARGBPixelFormat,
- &myRect, NULL, NULL, 0,
- (unsigned char *)wbuf->rect, x * 4);
-#else
-
- ibuf = IMB_allocImBuf(x, y, 32, IB_rect);
-
- err = NewGWorldFromPtr(&offGWorld,
- k32RGBAPixelFormat,
- &myRect, NULL, NULL, 0,
- (unsigned char *)ibuf->rect, x * 4);
-#endif
-
- if (err != noErr) {
- if (QTIME_DEBUG) printf("no newgworld\n");
- goto bail;
- }
- else {
- have_gw = TRUE;
- }
-
- GraphicsImportSetGWorld(gImporter, offGWorld, NULL);
- GraphicsImportDraw(gImporter);
-
-#ifdef __APPLE__
- rect = ibuf->rect;
-
- myPixMap = GetGWorldPixMap(offGWorld);
- LockPixels(myPixMap);
- myPtr = GetPixBaseAddr(myPixMap);
-
- if (myPtr == NULL) {
- printf("Error reading frame from Quicktime");
- IMB_freeImBuf(ibuf);
- return NULL;
- }
-
- boxsize = x * y;
- readPos = (uint32_t *) myPtr;
- changePos = (uint32_t *) rect;
-
- // Swap alpha byte to the end, so ARGB become RGBA;
- from = (unsigned char *)readPos;
- to = (unsigned char *)changePos;
-
- for (index = 0; index < boxsize; index++, from += 4, to += 4) {
- to[3] = from[0];
- to[0] = from[1];
- to[1] = from[2];
- to[2] = from[3];
- }
-#endif
-
-bail:
-
- DisposeHandle((Handle)dataref);
- UnlockPixels(myPixMap);
- if (have_gw) DisposeGWorld(offGWorld);
-
-#ifdef __APPLE__
- if (wbuf) {
- IMB_freeImBuf(wbuf);
- wbuf = NULL;
- }
-#endif
-
- if (gImporter != NULL) CloseComponent(gImporter);
-
- if (err != noErr) {
- if (QTIME_DEBUG) printf("quicktime import unsuccesfull\n");
- if (ibuf) {
- IMB_freeImBuf(ibuf);
- ibuf = NULL;
- }
- }
-
- if (ibuf) {
-
-#ifdef _WIN32
-// add non transparent alpha layer, so images without alpha show up in the sequence editor
-// exception for GIF images since these can be transparent without being 32 bit
-// (might also be nescessary for OSX)
- int i;
- int box = x * y;
- unsigned char *arect = (unsigned char *) ibuf->rect;
-
- if (depth < 32 && (**desc).cType != kGIFCodecType) {
- for (i = 0; i < box; i++, arect += 4)
- arect[3] = 0xFF;
- }
-#endif
-
- IMB_flipy(ibuf);
- ibuf->ftype = QUICKTIME;
- }
- return ibuf;
-}
-
-#endif /* USE_QTKIT */
-#endif /* _WIN32 || __APPLE__ */
-
-#endif /* WITH_QUICKTIME */
-
-
-#if 0
-
-struct ImageDescription {
- long idSize;
- CodecType cType;
- long resvd1;
- short resvd2;
- short dataRefIndex;
- short version;
- short revisionLevel;
- long vendor;
- CodecQ temporalQuality;
- CodecQ spatialQuality;
- short width;
- short height;
- Fixed hRes;
- Fixed vRes;
- long dataSize;
- short frameCount;
- Str31 name;
- short depth;
- short clutID;
-};
-
-#endif // 0