diff options
Diffstat (limited to 'video/quicktime_common.h')
| -rw-r--r-- | video/quicktime_common.h | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/video/quicktime_common.h b/video/quicktime_common.h new file mode 100644 index 0000000..d6fefff --- /dev/null +++ b/video/quicktime_common.h @@ -0,0 +1,100 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// File: quicktime_common.h +// +// QuickTime limits and constants shared among all QuickTime functions +// +//============================================================================= + + +#ifndef QUICKTIME_COMMON_H +#define QUICKTIME_COMMON_H + +#ifdef _WIN32 +#pragma once +#endif + +#ifdef OSX +// The OSX 10.7 SDK dropped support for the functions below, so we manually pull them in +#include <dlfcn.h> +typedef PixMapHandle +(*PFNGetGWorldPixMap)(GWorldPtr offscreenGWorld); +typedef Ptr +(*PFNGetPixBaseAddr)(PixMapHandle pm); +typedef Boolean +(*PFNLockPixels)(PixMapHandle pm); +typedef void +(*PFNUnlockPixels)(PixMapHandle pm); +typedef void +(*PFNDisposeGWorld)(GWorldPtr offscreenGWorld); +typedef void +(*PFNSetGWorld)(CGrafPtr port,GDHandle gdh); +typedef SInt32 +(*PFNGetPixRowBytes)(PixMapHandle pm); + + +extern PFNGetGWorldPixMap GetGWorldPixMap; +extern PFNGetPixBaseAddr GetPixBaseAddr; +extern PFNLockPixels LockPixels; +extern PFNUnlockPixels UnlockPixels; +extern PFNDisposeGWorld DisposeGWorld; +extern PFNSetGWorld SetGWorld; +extern PFNGetPixRowBytes GetPixRowBytes; +#endif + + +// constant that define the bounds of various inputs +static const int cMinVideoFrameWidth = 16; +static const int cMinVideoFrameHeight = 16; +static const int cMaxVideoFrameWidth = 2 * 2048; +static const int cMaxVideoFrameHeight = 2 * 2048; + +static const int cMinFPS = 1; +static const int cMaxFPS = 600; + +static const float cMinDuration = 0.016666666f; // 1/60th second +static const float cMaxDuration = 3600.0f; // 1 Hour + +static const int cMinSampleRate = 11025; // 1/4 CD sample rate +static const int cMaxSampleRate = 88200; // 2x CD rate + +#define NO_MORE_INTERESTING_TIMES -2 +#define END_OF_QUICKTIME_MOVIE -1 + +// =========================================================================== +// Macros & Utility functions +// =========================================================================== + +#define SAFE_DISPOSE_HANDLE( _handle ) if ( _handle != nullptr ) { DisposeHandle( (Handle) _handle ); _handle = nullptr; } +#define SAFE_DISPOSE_GWORLD( _gworld ) if ( _gworld != nullptr ) { DisposeGWorld( _gworld ); _gworld = nullptr; } +#define SAFE_DISPOSE_MOVIE( _movie ) if ( _movie != nullptr ) { DisposeMovie( _movie ); ThreadSleep(10); Assert( GetMoviesError() == noErr ); _movie = nullptr; } +#define SAFE_RELEASE_AUDIOCONTEXT( _cxt ) if ( _cxt != nullptr ) { QTAudioContextRelease( _cxt ); _cxt = nullptr; } +#define SAFE_RELEASE_CFREF( _ref ) if ( _ref != nullptr ) { CFRelease( _ref ); _ref = nullptr; } +// Utility functions + +extern char *COPY_STRING( const char *pString ); + +bool MovieGetStaticFrameRate( Movie inMovie, VideoFrameRate_t &theFrameRate ); + +bool SetGWorldDecodeGamma( CGrafPtr theGWorld, VideoPlaybackGamma_t gamma ); + +bool CreateMovieAudioContext( bool enableAudio, Movie inMovie, QTAudioContextRef *pAudioConectext, bool setVolume = false, float *pCurrentVolume = nullptr ); + +VideoPlaybackGamma_t GetSystemPlaybackGamma(); + + +//----------------------------------------------------------------------------- +// Computes a power of two at least as big as the passed-in number +//----------------------------------------------------------------------------- +static inline int ComputeGreaterPowerOfTwo( int n ) +{ + int i = 1; + while ( i < n ) + { + i <<= 1; + } + return i; +} + + +#endif // QUICKTIME_COMMON_H |