|
|
/**************************************************************************\
* * Copyright (c) 1999 Microsoft Corporation * * Module Name: * * imaging.h * * Abstract: * * Public SDK header file for the imaging library * * Notes: * * This is hand-coded for now. Eventually it'll be automatically * generated from an IDL file. * * Revision History: * * 05/10/1999 davidx * Created it. * \**************************************************************************/
#ifndef _IMAGING_H
#define _IMAGING_H
#include "GdiplusPixelFormats.h"
//
// Imaging library GUIDS:
// image file format identifiers
// interface and class identifers
//
#include "imgguids.h"
//
// Image property ID tags (PROPID's from the EXIF tags)
//
#define TAG_EXIF_IFD 0x8769
#define TAG_GPS_IFD 0x8825
#define TAG_IMAGE_WIDTH 0x0100
#define TAG_IMAGE_HEIGHT 0x0101
#define TAG_BITS_PER_SAMPLE 0x0102
#define TAG_COMPRESSION 0x0103
#define TAG_PHOTOMETRIC_INTERP 0x0106
#define TAG_IMAGE_DESCRIPTION 0x010E
#define TAG_EQUIP_MAKE 0x010F
#define TAG_EQUIP_MODEL 0x0110
#define TAG_STRIP_OFFSETS 0x0111
#define TAG_ORIENTATION 0x0112
#define TAG_SAMPLES_PER_PIXEL 0x0115
#define TAG_ROWS_PER_STRIP 0x0116
#define TAG_STRIP_BYTES_COUNT 0x0117
#define TAG_X_RESOLUTION 0x011A
#define TAG_Y_RESOLUTION 0x011B
#define TAG_PLANAR_CONFIG 0x011C
#define TAG_RESOLUTION_UNIT 0x0128
#define TAG_TRANSFER_FUNCTION 0x012D
#define TAG_SOFTWARE_USED 0x0131
#define TAG_DATE_TIME 0x0132
#define TAG_ARTIST 0x013B
#define TAG_WHITE_POINT 0x013E
#define TAG_PRIMAY_CHROMATICS 0x013F
#define TAG_JPEG_INTER_FORMAT 0x0201
#define TAG_JPEG_INTER_LENGTH 0x0202
#define TAG_YCbCr_COEFFICIENTS 0x0211
#define TAG_YCbCr_SUBSAMPLING 0x0212
#define TAG_YCbCr_POSITIONING 0x0213
#define TAG_REF_BLACK_WHITE 0x0214
#define TAG_COPYRIGHT 0x8298
// Extra TAGs (Like Adobe Image Information tags etc.)
#define TAG_RESOLUTION_X_UNIT 0x5001
#define TAG_RESOLUTION_Y_UNIT 0x5002
#define TAG_RESOLUTION_X_LENGTH_UNIT 0x5003
#define TAG_RESOLUTION_Y_LENGTH_UNIT 0x5004
#define TAG_PRINT_FLAGS 0x5005
#define TAG_HALFTONE_LPI 0x5006
#define TAG_HALFTONE_LPI_UNIT 0x5007
#define TAG_HALFTONE_DEGREE 0x5008
#define TAG_HALFTONE_SHAPE 0x5009
#define TAG_HALFTONE_MISC 0x5010
#define TAG_HALFTONE_SCREEN 0x5011
#define TAG_JPEG_QUALITY 0x5012
#define TAG_GRID_SIZE 0x5013
#define TAG_THUMBNAIL_FORMAT 0x5014
#define TAG_THUMBNAIL_WIDTH 0x5015
#define TAG_THUMBNAIL_HEIGHT 0x5016
#define TAG_THUMBNAIL_COLORDEPTH 0x5017
#define TAG_THUMBNAIL_PLANES 0x5018
#define TAG_THUMBNAIL_RAWBYTES 0x5019
#define TAG_THUMBNAIL_SIZE 0x5020
#define TAG_THUMBNAIL_COMPRESSED_SIZE 0x5021
// EXIF specific tag
#define EXIF_TAG_EXPOSURE_TIME 0x829A
#define EXIF_TAG_F_NUMBER 0x829D
#define EXIF_TAG_EXPOSURE_PROG 0x8822
#define EXIF_TAG_SPECTRAL_SENSE 0x8824
#define EXIF_TAG_ISO_SPEED 0x8827
#define EXIF_TAG_OECF 0x8828
#define EXIF_TAG_VER 0x9000
#define EXIF_TAG_D_T_ORIG 0x9003 // Date & time of original
#define EXIF_TAG_D_T_DIGITIZED 0x9004 // Date & time of digital data generation
#define EXIF_TAG_COMP_CONFIG 0x9101
#define EXIF_TAG_COMP_BPP 0x9102
#define EXIF_TAG_SHUTTER_SPEED 0x9201
#define EXIF_TAG_APERATURE 0x9202
#define EXIF_TAG_BRIGHTNESS 0x9203
#define EXIF_TAG_EXPOSURE_BIAS 0x9204
#define EXIF_TAG_MAX_APERATURE 0x9205
#define EXIF_TAG_SUBJECT_DIST 0x9206
#define EXIF_TAG_METERING_MODE 0x9207
#define EXIF_TAG_LIGHT_SOURCE 0x9208
#define EXIF_TAG_FLASH 0x9209
#define EXIF_TAG_FOCAL_LENGTH 0x920A
#define EXIF_TAG_MAKER_NOTE 0x927C
#define EXIF_TAG_USER_COMMENT 0x9286
#define EXIF_TAG_D_T_SUBSEC 0x9290 // Date & Time subseconds
#define EXIF_TAG_D_T_ORIG_SS 0x9291 // Date & Time original subseconds
#define EXIF_TAG_D_T_DIG_SS 0x9292 // Date & TIme digitized subseconds
#define EXIF_TAG_FPX_VER 0xA000
#define EXIF_TAG_COLOR_SPACE 0xA001
#define EXIF_TAG_PIX_X_DIM 0xA002
#define EXIF_TAG_PIX_Y_DIM 0xA003
#define EXIF_TAG_RELATED_WAV 0xA004 // related sound file
#define EXIF_TAG_INTEROP 0xA005
#define EXIF_TAG_FLASH_ENERGY 0xA20B
#define EXIF_TAG_SPATIAL_FR 0xA20C // Spatial Frequency Response
#define EXIF_TAG_FOCAL_X_RES 0xA20E // Focal Plane X Resolution
#define EXIF_TAG_FOCAL_Y_RES 0xA20F // Focal Plane Y Resolution
#define EXIF_TAG_FOCAL_RES_UNIT 0xA210 // Focal Plane Resolution Unit
#define EXIF_TAG_SUBJECT_LOC 0xA214
#define EXIF_TAG_EXPOSURE_INDEX 0xA215
#define EXIF_TAG_SENSING_METHOD 0xA217
#define EXIF_TAG_FILE_SOURCE 0xA300
#define EXIF_TAG_SCENE_TYPE 0xA301
#define EXIF_TAG_CFA_PATTERN 0xA302
#define GPS_TAG_VER 0x0000
#define GPS_TAG_LATTITUDE_REF 0x0001
#define GPS_TAG_LATTITUDE 0x0002
#define GPS_TAG_LONGITUDE_REF 0x0003
#define GPS_TAG_LONGITUDE 0x0004
#define GPS_TAG_ALTITUDE_REF 0x0005
#define GPS_TAG_ALTITUDE 0x0006
#define GPS_TAG_GPS_TIME 0x0007
#define GPS_TAG_GPS_SATELLITES 0x0008
#define GPS_TAG_GPS_STATUS 0x0009
#define GPS_TAG_GPS_MEASURE_MODE 0x00A
#define GPS_TAG_GPS_DOP 0x000B // Measurement precision
#define GPS_TAG_SPEED_REF 0x000C
#define GPS_TAG_SPEED 0x000D
#define GPS_TAG_TRACK_REF 0x000E
#define GPS_TAG_TRACK 0x000F
#define GPS_TAG_IMG_DIR_REF 0x0010
#define GPS_TAG_IMG_DIR 0x0011
#define GPS_TAG_MAP_DATUM 0x0012
#define GPS_TAG_DEST_LAT_REF 0x0013
#define GPS_TAG_DEST_LAT 0x0014
#define GPS_TAG_DEST_LONG_REF 0x0015
#define GPS_TAG_DEST_LONG 0x0016
#define GPS_TAG_DEST_BEAR_REF 0x0017
#define GPS_TAG_DEST_BEAR 0x0018
#define GPS_TAG_DEST_DIST_REF 0x0019
#define GPS_TAG_DEST_DIST 0x001A
//
// Information about image pixel data
//
typedef struct tagBitmapData { UINT Width; UINT Height; INT Stride; PixelFormatID PixelFormat; VOID* Scan0; UINT_PTR Reserved; } BitmapData;
//
// Access modes used when calling IImage::LockBits
//
typedef enum ImageLockMode { IMGLOCK_READ = 0x0001, IMGLOCK_WRITE = 0x0002, IMGLOCK_USERINPUTBUF= 0x0004 } ImageLockMode;
//
// Image flags
//
typedef enum ImageFlag { IMGFLAG_NONE = 0,
// Low-word: shared with SINKFLAG_x
IMGFLAG_SCALABLE = 0x0001, IMGFLAG_HASALPHA = 0x0002, IMGFLAG_HASTRANSLUCENT = 0x0004, IMGFLAG_PARTIALLY_SCALABLE = 0x0008,
// Low-word: color space definition
IMGFLAG_COLORSPACE_RGB = 0x0010, IMGFLAG_COLORSPACE_CMYK = 0x0020, IMGFLAG_COLORSPACE_GRAY = 0x0040, IMGFLAG_COLORSPACE_YCBCR = 0x0080, IMGFLAG_COLORSPACE_YCCK = 0x0100,
// Low-word: image size info
IMGFLAG_HASREALDPI = 0x1000, IMGFLAG_HASREALPIXELSIZE = 0x2000,
// High-word
IMGFLAG_READONLY = 0x00010000, IMGFLAG_CACHING = 0x00020000 } ImageFlag;
//
// Decoder flags
//
typedef enum DecoderInitFlag { DECODERINIT_NONE = 0,
// DECODERINIT_NOBLOCK indicates that the caller requires non-blocking
// behavior. This will be honored only by non-blocking decoders, that
// is, decoders that don't have the IMGCODEC_BLOCKING_DECODE flag.
DECODERINIT_NOBLOCK = 0x0001,
// Choose built-in decoders first before looking at any
// installed plugin decoders.
DECODERINIT_BUILTIN1ST = 0x0002 } DecoderInitFlag;
//
// Flag to indicate how the memory buffer passed to
// IImagingFactory::CreateImageFromBuffer should be disposed.
//
typedef enum BufferDisposalFlag { DISPOSAL_NONE, DISPOSAL_GLOBALFREE, DISPOSAL_COTASKMEMFREE, DISPOSAL_UNMAPVIEW } BufferDisposalFlag;
//
// Quality hints used by resize/rotation operations
//
typedef enum InterpolationHint { INTERP_DEFAULT, INTERP_NEAREST_NEIGHBOR, INTERP_BILINEAR, INTERP_AVERAGING, INTERP_BICUBIC } InterpolationHint;
//
// Information about image codecs
//
enum { IMGCODEC_ENCODER = 0x00000001, IMGCODEC_DECODER = 0x00000002, IMGCODEC_SUPPORT_BITMAP = 0x00000004, IMGCODEC_SUPPORT_VECTOR = 0x00000008, IMGCODEC_SEEKABLE_ENCODE = 0x00000010, IMGCODEC_BLOCKING_DECODE = 0x00000020,
IMGCODEC_BUILTIN = 0x00010000, IMGCODEC_SYSTEM = 0x00020000, IMGCODEC_USER = 0x00040000 };
typedef struct tagImageCodecInfo { CLSID Clsid; GUID FormatID; const WCHAR* CodecName; const WCHAR* FormatDescription; const WCHAR* FilenameExtension; const WCHAR* MimeType; DWORD Flags; DWORD SigCount; DWORD SigSize; const BYTE* SigPattern; const BYTE* SigMask; } ImageCodecInfo;
//
// Identifier for channel(s) in a pixel
//
typedef enum ChannelID { ALPHA_CHANNEL = 0x00000001, RED_CHANNEL = 0x00000002, GREEN_CHANNEL = 0x00000004, BLUE_CHANNEL = 0x00000008, COLOR_CHANNELS = RED_CHANNEL|GREEN_CHANNEL|BLUE_CHANNEL, ALL_CHANNELS = COLOR_CHANNELS|ALPHA_CHANNEL,
INTENSITY_CHANNEL = 0x00010000 } ChannelID;
//
// Data structure for communicating to an image sink
//
enum { // Low-word: shared with IMGFLAG_x
SINKFLAG_SCALABLE = IMGFLAG_SCALABLE, SINKFLAG_HASALPHA = IMGFLAG_HASALPHA, SINKFLAG_PARTIALLY_SCALABLE = IMGFLAG_PARTIALLY_SCALABLE,
// High-word
SINKFLAG_TOPDOWN = 0x00010000, SINKFLAG_BOTTOMUP = 0x00020000, SINKFLAG_FULLWIDTH = 0x00040000, SINKFLAG_MULTIPASS = 0x00080000, SINKFLAG_COMPOSITE = 0x00100000, SINKFLAG_WANTPROPS = 0x00200000 };
typedef struct tagImageInfo { GUID RawDataFormat; PixelFormatID PixelFormat; UINT Width, Height; UINT TileWidth, TileHeight; double Xdpi, Ydpi; UINT Flags; } ImageInfo;
//
// Data structure for passing encoder paramaters
//
// NOTE:
// Should this be in GdiplusTypes.h instead? Leave imaging.h for stuff
// shared between the internal stuff and the API?
typedef struct tagEncoderParam { GUID paramGuid; char* Value; } EncoderParam;
typedef struct tagEncoderParams { UINT Count; EncoderParam Params[1]; } EncoderParams;
//
// Interface and class identifiers
//
interface IImagingFactory; interface IImage; interface IBitmapImage; interface IImageDecoder; interface IImageEncoder; interface IImageSink; interface IBasicBitmapOps;
//--------------------------------------------------------------------------
// Imaging utility factory object
// This is a CoCreate-able object.
//--------------------------------------------------------------------------
MIDL_INTERFACE("327ABDA7-072B-11D3-9D7B-0000F81EF32E") IImagingFactory : public IUnknown { public:
// Create an image object from an input stream
// stream doesn't have to seekable
// caller should Release the stream if call is successful
STDMETHOD(CreateImageFromStream)( IN IStream* stream, OUT IImage** image ) = 0;
// Create an image object from a file
STDMETHOD(CreateImageFromFile)( IN const WCHAR* filename, OUT IImage** image ) = 0; // Create an image object from a memory buffer
STDMETHOD(CreateImageFromBuffer)( IN const VOID* buf, IN UINT size, IN BufferDisposalFlag disposalFlag, OUT IImage** image ) = 0;
// Create a new bitmap image object
STDMETHOD(CreateNewBitmap)( IN UINT width, IN UINT height, IN PixelFormatID pixelFormat, OUT IBitmapImage** bitmap ) = 0;
// Create a bitmap image from an IImage object
STDMETHOD(CreateBitmapFromImage)( IN IImage* image, IN OPTIONAL UINT width, IN OPTIONAL UINT height, IN OPTIONAL PixelFormatID pixelFormat, IN InterpolationHint hints, OUT IBitmapImage** bitmap ) = 0;
// Create a new bitmap image object on user-supplied memory buffer
STDMETHOD(CreateBitmapFromBuffer)( IN BitmapData* bitmapData, OUT IBitmapImage** bitmap ) = 0;
// Create an image decoder object to process the given input stream
STDMETHOD(CreateImageDecoder)( IN IStream* stream, IN DecoderInitFlag flags, OUT IImageDecoder** decoder ) = 0;
// Create an image encoder object that can output data in the
// specified image file format.
STDMETHOD(CreateImageEncoderToStream)( IN const CLSID* clsid, IN IStream* stream, OUT IImageEncoder** encoder ) = 0;
STDMETHOD(CreateImageEncoderToFile)( IN const CLSID* clsid, IN const WCHAR* filename, OUT IImageEncoder** encoder ) = 0;
// Get a list of all currently installed image decoders
STDMETHOD(GetInstalledDecoders)( OUT UINT* count, OUT ImageCodecInfo** decoders ) = 0;
// Get a list of all currently installed image decoders
STDMETHOD(GetInstalledEncoders)( OUT UINT* count, OUT ImageCodecInfo** encoders ) = 0;
// Install an image encoder / decoder
// caller should do the regular COM component
// installation before calling this method
STDMETHOD(InstallImageCodec)( IN const ImageCodecInfo* codecInfo ) = 0;
// Uninstall an image encoder / decoder
STDMETHOD(UninstallImageCodec)( IN const WCHAR* codecName, IN UINT flags ) = 0;
// Create an in-memory IPropertySetStorage object
STDMETHOD(CreateMemoryPropertyStore)( IN OPTIONAL HGLOBAL hmem, OUT IPropertySetStorage** propSet ) = 0; };
//--------------------------------------------------------------------------
// Image interface
// bitmap image
// vector image
// procedural image
//--------------------------------------------------------------------------
MIDL_INTERFACE("327ABDA9-072B-11D3-9D7B-0000F81EF32E") IImage : public IUnknown { public:
// Get the device-independent physical dimension of the image
// in unit of 0.01mm
STDMETHOD(GetPhysicalDimension)( OUT SIZE* size ) = 0;
// Get basic image info
STDMETHOD(GetImageInfo)( OUT ImageInfo* imageInfo ) = 0;
// Set image flags
STDMETHOD(SetImageFlags)( IN UINT flags ) = 0;
// Display the image in a GDI device context
STDMETHOD(Draw)( IN HDC hdc, IN const RECT* dstRect, IN OPTIONAL const RECT* srcRect ) = 0;
// Push image data into an IImageSink
STDMETHOD(PushIntoSink)( IN IImageSink* sink ) = 0;
// Get a thumbnail representation for the image object
STDMETHOD(GetThumbnail)( IN OPTIONAL UINT thumbWidth, IN OPTIONAL UINT thumbHeight, OUT IImage** thumbImage ) = 0;
// Get/set the properties in the standard property set
// x-res
// y-res
// gamma
// ICC profile
// thumbnail
// tile width
// tile height
//
// Property-related methods
STDMETHOD(GetProperties)( IN DWORD mode, OUT IPropertySetStorage** propSet ) = 0; };
//--------------------------------------------------------------------------
// Bitmap interface
//--------------------------------------------------------------------------
MIDL_INTERFACE("327ABDAA-072B-11D3-9D7B-0000F81EF32E") IBitmapImage : public IUnknown { public:
// Get bitmap dimensions in pixels
STDMETHOD(GetSize)( OUT SIZE* size ) = 0;
// Get bitmap pixel format
STDMETHOD(GetPixelFormatID)( OUT PixelFormatID* pixelFormat ) = 0;
// Access bitmap data in the specified pixel format
// must support at least PIXFMT_DONTCARE and
// the caninocal formats.
STDMETHOD(LockBits)( IN const RECT* rect, IN UINT flags, IN PixelFormatID pixelFormat, IN OUT BitmapData* lockedBitmapData ) = 0;
STDMETHOD(UnlockBits)( IN const BitmapData* lockedBitmapData ) = 0;
// Set/get palette associated with the bitmap image
STDMETHOD(GetPalette)( OUT ColorPalette** palette ) = 0;
STDMETHOD(SetPalette)( IN const ColorPalette* palette ) = 0; };
//--------------------------------------------------------------------------
// Interface for performing basic operations on a bitmap image
// This can be QI'ed from an IBitmapImage object.
//--------------------------------------------------------------------------
MIDL_INTERFACE("327ABDAF-072B-11D3-9D7B-0000F81EF32E") IBasicBitmapOps : public IUnknown { public:
// Clone an area of the bitmap image
STDMETHOD(Clone)( IN OPTIONAL const RECT* rect, OUT IBitmapImage** outbmp );
// Flip the bitmap image in x- and/or y-direction
STDMETHOD(Flip)( IN BOOL flipX, IN BOOL flipY, OUT IBitmapImage** outbmp ) = 0;
// Resize the bitmap image
STDMETHOD(Resize)( IN UINT newWidth, IN UINT newHeight, IN PixelFormatID pixelFormat, IN InterpolationHint hints, OUT IBitmapImage** outbmp ) = 0;
// Rotate the bitmap image by the specified angle
STDMETHOD(Rotate)( IN FLOAT angle, IN InterpolationHint hints, OUT IBitmapImage** outbmp ) = 0;
// Adjust the brightness of the bitmap image
STDMETHOD(AdjustBrightness)( IN FLOAT percent ) = 0; // Adjust the contrast of the bitmap image
STDMETHOD(AdjustContrast)( IN FLOAT shadow, IN FLOAT highlight ) = 0; // Adjust the gamma of the bitmap image
STDMETHOD(AdjustGamma)( IN FLOAT gamma ) = 0; };
//--------------------------------------------------------------------------
// Image decoder interface
//--------------------------------------------------------------------------
MIDL_INTERFACE("327ABDAB-072B-11D3-9D7B-0000F81EF32E") IImageDecoder : public IUnknown { public:
// Initialize the image decoder object
STDMETHOD(InitDecoder)( IN IStream* stream, IN DecoderInitFlag flags ) = 0;
// Clean up the image decoder object
STDMETHOD(TerminateDecoder)() = 0;
// Start decoding the current frame
STDMETHOD(BeginDecode)( IN IImageSink* sink, IN OPTIONAL IPropertySetStorage* newPropSet ) = 0;
// Continue decoding
STDMETHOD(Decode)() = 0;
// Stop decoding the current frame
STDMETHOD(EndDecode)( IN HRESULT statusCode ) = 0;
// Query multi-frame dimensions
STDMETHOD(QueryFrameDimensions)( OUT UINT* count, OUT GUID** dimensionIDs ) = 0;
// Get number of frames for the specified dimension
STDMETHOD(GetFrameCount)( IN const GUID* dimensionID, OUT UINT* count ) = 0;
// Select currently active frame
STDMETHOD(SelectActiveFrame)( IN const GUID* dimensionID, IN UINT frameIndex ) = 0;
// Get basic information about the image
STDMETHOD(GetImageInfo)( OUT ImageInfo* imageInfo ) = 0;
// Get image thumbnail
STDMETHOD(GetThumbnail)( IN OPTIONAL UINT thumbWidth, IN OPTIONAL UINT thumbHeight, OUT IImage** thumbImage ) = 0;
// Property/metadata related methods
STDMETHOD(GetProperties)( OUT IPropertySetStorage** propSet ) = 0;
// Query decoder parameters
STDMETHOD(QueryDecoderParam)( IN GUID Guid ) = 0;
// Set decoder parameters
STDMETHOD(SetDecoderParam)( IN GUID Guid, IN UINT Length, IN PVOID Value ) = 0; };
//--------------------------------------------------------------------------
// Image decode sink interface
//--------------------------------------------------------------------------
MIDL_INTERFACE("327ABDAE-072B-11D3-9D7B-0000F81EF32E") IImageSink : public IUnknown { public:
// Begin the sink process
STDMETHOD(BeginSink)( IN OUT ImageInfo* imageInfo, OUT OPTIONAL RECT* subarea ) = 0;
// End the sink process
STDMETHOD(EndSink)( IN HRESULT statusCode ) = 0;
// Pass the color palette to the image sink
STDMETHOD(SetPalette)( IN const ColorPalette* palette ) = 0;
// Ask the sink to allocate pixel data buffer
STDMETHOD(GetPixelDataBuffer)( IN const RECT* rect, IN PixelFormatID pixelFormat, IN BOOL lastPass, OUT BitmapData* bitmapData ) = 0;
// Give the sink pixel data and release data buffer
STDMETHOD(ReleasePixelDataBuffer)( IN const BitmapData* bitmapData ) = 0;
// Push pixel data
STDMETHOD(PushPixelData)( IN const RECT* rect, IN const BitmapData* bitmapData, IN BOOL lastPass ) = 0;
// Push raw image data
STDMETHOD(PushRawData)( IN const VOID* buffer, IN UINT bufsize ) = 0;
// Methods for passing metadata / properties
STDMETHOD(PushProperties)( IN IPropertySetStorage* propSet ) = 0; STDMETHOD(NeedTransform)( OUT UINT* rotation ) = 0;
STDMETHOD(PushRawInfo)( IN OUT void* info ) = 0;
};
//--------------------------------------------------------------------------
// Image encoder interface
//--------------------------------------------------------------------------
MIDL_INTERFACE("327ABDAC-072B-11D3-9D7B-0000F81EF32E") IImageEncoder : public IUnknown { public:
// Initialize the image encoder object
STDMETHOD(InitEncoder)( IN IStream* stream ) = 0; // Clean up the image encoder object
STDMETHOD(TerminateEncoder)() = 0;
// Get an IImageSink interface for encoding the next frame
STDMETHOD(GetEncodeSink)( OUT IImageSink** sink ) = 0; // Set active frame dimension
STDMETHOD(SetFrameDimension)( IN const GUID* dimensionID ) = 0; // Query encoder parameters
STDMETHOD(QueryEncoderParam)( OUT EncoderParams** Params ) = 0;
// Set encoder parameters
STDMETHOD(SetEncoderParam)( IN EncoderParams* Param ) = 0; };
//--------------------------------------------------------------------------
// Imaging library error codes
//
// !!! TODO
// How does one pick a facility code?
//
// Standard error code used:
// E_INVALIDARG
// E_OUTOFMEMORY
// E_NOTIMPL
// E_ACCESSDENIED
// E_PENDING
//--------------------------------------------------------------------------
#define FACILITY_IMAGING 0x87b
#define MAKE_IMGERR(n) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_IMAGING, n)
#define IMGERR_OBJECTBUSY MAKE_IMGERR(1)
#define IMGERR_NOPALETTE MAKE_IMGERR(2)
#define IMGERR_BADLOCK MAKE_IMGERR(3)
#define IMGERR_BADUNLOCK MAKE_IMGERR(4)
#define IMGERR_NOCONVERSION MAKE_IMGERR(5)
#define IMGERR_CODECNOTFOUND MAKE_IMGERR(6)
#define IMGERR_NOFRAME MAKE_IMGERR(7)
#define IMGERR_ABORT MAKE_IMGERR(8)
#endif // !_IMAGING_H
|