/* $Id$ 
 *
 * ***** 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 Copyright (C) 2001-2002 by NaN Holding BV.
 * All rights reserved.
 *
 * The Original Code is: all of this file.
 *
 * Contributor(s): none yet.
 *
 * ***** END GPL LICENSE BLOCK *****
 */

/** \file blender/quicktime/quicktime_export.h
 *  \ingroup quicktime
 */


#ifndef __QUICKTIME_EXPORT_H__
#define __QUICKTIME_EXPORT_H__

#if defined (_WIN32) || (__APPLE__)

#define __AIFF__


#define QTAUDIO_FLAG_RESAMPLE_NOHQ 1
#define QTAUDIO_FLAG_CODEC_ISCBR 2


/*Codec list*/
typedef struct QuicktimeCodecTypeDesc {
	int codecType;
	int rnatmpvalue;
	char * codecName;
} QuicktimeCodecTypeDesc ;

// quicktime movie output functions
struct RenderData;
struct Scene;
struct wmOperatorType;
struct ReportList;

int start_qt(struct Scene *scene, struct RenderData *rd, int rectx, int recty, struct ReportList *reports);	//for movie handle (BKE writeavi.c now)
int append_qt(struct RenderData *rd, int frame, int *pixels, int rectx, int recty, struct ReportList *reports);
void end_qt(void);
void filepath_qt(char *string, struct RenderData *rd);

/*RNA helper functions */
void quicktime_verify_image_type(struct RenderData *rd); //used by RNA for defaults values init, if needed
/*Video codec type*/
int quicktime_get_num_videocodecs(void);
QuicktimeCodecTypeDesc* quicktime_get_videocodecType_desc(int indexValue);
int quicktime_rnatmpvalue_from_videocodectype(int codecType);
int quicktime_videocodecType_from_rnatmpvalue(int rnatmpvalue);

#ifdef USE_QTKIT
/*Audio codec type*/
int quicktime_get_num_audiocodecs(void);
QuicktimeCodecTypeDesc* quicktime_get_audiocodecType_desc(int indexValue);
int quicktime_rnatmpvalue_from_audiocodectype(int codecType);
int quicktime_audiocodecType_from_rnatmpvalue(int rnatmpvalue);
#endif

#ifndef USE_QTKIT
void SCENE_OT_render_data_set_quicktime_codec(struct wmOperatorType *ot); //Operator to raise quicktime standard dialog to request codec settings
#endif


void free_qtcomponentdata(void);
void makeqtstring(struct RenderData *rd, char *string);		//for playanim.c



#if (defined(USE_QTKIT) && defined(MAC_OS_X_VERSION_10_6) && __LP64__)
//Include the quicktime codec types constants that are missing in QTKitDefines.h in 10.6 / 64bit
enum {
	kRawCodecType						= 'raw ',
	kCinepakCodecType 					= 'cvid',
	kGraphicsCodecType					= 'smc ',
	kAnimationCodecType 				= 'rle ',
	kVideoCodecType 					= 'rpza',
	kComponentVideoCodecType			= 'yuv2',
	kJPEGCodecType						= 'jpeg',
	kMotionJPEGACodecType 				= 'mjpa',
	kMotionJPEGBCodecType 				= 'mjpb',
	kSGICodecType 						= '.SGI',
	kPlanarRGBCodecType 				= '8BPS',
	kMacPaintCodecType					= 'PNTG',
	kGIFCodecType 						= 'gif ',
	kPhotoCDCodecType 					= 'kpcd',
	kQuickDrawGXCodecType 				= 'qdgx',
	kAVRJPEGCodecType 					= 'avr ',
	kOpenDMLJPEGCodecType 				= 'dmb1',
	kBMPCodecType 						= 'WRLE',
	kWindowsRawCodecType				= 'WRAW',
	kVectorCodecType					= 'path',
	kQuickDrawCodecType 				= 'qdrw',
	kWaterRippleCodecType 				= 'ripl',
	kFireCodecType						= 'fire',
	kCloudCodecType 					= 'clou',
	kH261CodecType						= 'h261',
	kH263CodecType						= 'h263',
	kDVCNTSCCodecType					= 'dvc ',	/* DV - NTSC and DVCPRO NTSC (available in QuickTime 6.0 or later)*/
	/* NOTE: kDVCProNTSCCodecType is deprecated.	*/
	/* Use kDVCNTSCCodecType instead -- as far as the codecs are concerned, */
	/* the two data formats are identical.*/
	kDVCPALCodecType					= 'dvcp',
	kDVCProPALCodecType 				= 'dvpp',	/* available in QuickTime 6.0 or later*/
	kDVCPro50NTSCCodecType				= 'dv5n',
	kDVCPro50PALCodecType 				= 'dv5p',
	kDVCPro100NTSCCodecType 			= 'dv1n',
	kDVCPro100PALCodecType				= 'dv1p',
	kDVCPROHD720pCodecType				= 'dvhp',
	kDVCPROHD1080i60CodecType			= 'dvh6',
	kDVCPROHD1080i50CodecType			= 'dvh5',
	kBaseCodecType						= 'base',
	kFLCCodecType 						= 'flic',
	kTargaCodecType 					= 'tga ',
	kPNGCodecType 						= 'png ',
	kTIFFCodecType						= 'tiff',	/* NOTE: despite what might seem obvious from the two constants*/
	/* below and their names, they really are correct. 'yuvu' really */
	/* does mean signed, and 'yuvs' really does mean unsigned. Really. */
	kComponentVideoSigned 				= 'yuvu',
	kComponentVideoUnsigned 			= 'yuvs',
	kCMYKCodecType						= 'cmyk',
	kMicrosoftVideo1CodecType			= 'msvc',
	kSorensonCodecType					= 'SVQ1',
	kSorenson3CodecType 				= 'SVQ3',	/* available in QuickTime 5 and later*/
	kIndeo4CodecType					= 'IV41',
	kMPEG4VisualCodecType 				= 'mp4v',
	k64ARGBCodecType					= 'b64a',
	k48RGBCodecType 					= 'b48r',
	k32AlphaGrayCodecType 				= 'b32a',
	k16GrayCodecType					= 'b16g',
	kMpegYUV420CodecType				= 'myuv',
	kYUV420CodecType					= 'y420',
	kSorensonYUV9CodecType				= 'syv9',
	k422YpCbCr8CodecType				= '2vuy',	/* Component Y'CbCr 8-bit 4:2:2	*/
	k444YpCbCr8CodecType				= 'v308',	/* Component Y'CbCr 8-bit 4:4:4	*/
	k4444YpCbCrA8CodecType				= 'v408',	/* Component Y'CbCrA 8-bit 4:4:4:4 */
	k422YpCbCr16CodecType 				= 'v216',	/* Component Y'CbCr 10,12,14,16-bit 4:2:2*/
	k422YpCbCr10CodecType 				= 'v210',	/* Component Y'CbCr 10-bit 4:2:2 */
	k444YpCbCr10CodecType 				= 'v410',	/* Component Y'CbCr 10-bit 4:4:4 */
	k4444YpCbCrA8RCodecType 			= 'r408',	/* Component Y'CbCrA 8-bit 4:4:4:4, rendering format. full range alpha, zero biased yuv*/
	kJPEG2000CodecType					= 'mjp2',
	kPixletCodecType					= 'pxlt',
	kH264CodecType						= 'avc1'
};
#endif

#endif //(_WIN32) || (__APPLE__)

#endif  // __QUICKTIME_IMP_H__
