00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_IVIDEO_CODEC_H__
00020 #define __CS_IVIDEO_CODEC_H__
00021
00024
00025
00026
00027
00028 #include "csutil/scf.h"
00029
00030 struct iMaterialHandle;
00031 struct iFile;
00032 struct iStream;
00033 struct iVideoStream;
00034 struct iAudioStream;
00035 struct iCodec;
00036
00040 enum csStreamFormatCap
00041 {
00045 CS_POS_BY_FRAME = 1,
00049 CS_POS_BY_TIME = 2,
00053 CS_DECODE_SPAN = 4,
00057 CS_DYNAMIC_FRAMESIZE = 8
00058 };
00059
00060 #define CS_STREAMTYPE_AUDIO 1
00061 #define CS_STREAMTYPE_VIDEO 2
00062 #define CS_STREAMTYPE_MIDI 3
00063 #define CS_STREAMTYPE_TEXT 4
00064
00068 struct csStreamDescription
00069 {
00073 uint16 type;
00077 char codec[64];
00081 const char *name;
00082 };
00083
00087 struct csVideoStreamDescription : public csStreamDescription
00088 {
00092 int8 colordepth;
00096 int32 framecount;
00100 int width, height;
00104 float framerate;
00108 int32 duration;
00109 };
00110
00114 struct csAudioStreamDescription : public csStreamDescription
00115 {
00116 uint16 formattag;
00117 uint16 channels;
00118 uint32 samplespersecond;
00119 uint16 bitspersample;
00123 uint32 duration;
00124 };
00125
00126 SCF_VERSION (iStreamIterator, 0, 0, 1);
00127 struct iStreamIterator : public iBase
00128 {
00129 virtual bool HasNext () = 0;
00130 virtual iStream *GetNext () = 0;
00131 };
00132
00133 SCF_VERSION (iStreamFormat, 0, 0, 1);
00134
00138 struct iStreamFormat : public iBase
00139 {
00143 virtual void GetCaps (csStreamFormatCap &caps) = 0;
00147 virtual iStreamIterator* GetStreamIterator () = 0;
00151 virtual void Select (iAudioStream *pAudio, iVideoStream *pVideo) = 0;
00158 virtual void NextFrame () = 0;
00162 virtual bool Load (iFile *pVideoData) = 0;
00168 virtual void Unload () = 0;
00169 };
00170
00171 SCF_VERSION (iStream, 0, 0, 1);
00172
00176 struct iStream : public iBase
00177 {
00181 virtual void GetStreamDescription (csStreamDescription &desc) = 0;
00187 virtual bool GotoFrame (uint32 frameindex) = 0;
00191 virtual bool GotoTime (uint32 timeindex) = 0;
00196 virtual bool SetPlayMethod (bool bTimeSynced) = 0;
00201 virtual void NextFrame () = 0;
00202 };
00203
00204 SCF_VERSION (iVideoStream, 0, 0, 1);
00205
00209 struct iVideoStream : public iStream
00210 {
00214 virtual void GetStreamDescription (csVideoStreamDescription &desc) = 0;
00218 virtual bool SetRect (int x, int y, int w, int h) = 0;
00223 virtual bool SetFXMode (uint mode) = 0;
00227 virtual iMaterialHandle* NextFrameGetMaterial () = 0;
00228
00229 };
00230
00231 SCF_VERSION (iAudioStream, 0, 0, 1);
00232
00236 struct iAudioStream : public iStream
00237 {
00241 virtual void GetStreamDescription (csAudioStreamDescription &desc) = 0;
00242 };
00243
00252 #define CS_CODECFORMAT_RGB_CHANNEL 1
00253 #define CS_CODECFORMAT_RGBA_CHANNEL 2
00254 #define CS_CODECFORMAT_YUV_CHANNEL 3
00255 #define CS_CODECFORMAT_RGB_INTERLEAVED 4
00256 #define CS_CODECFORMAT_RGBA_INTERLEAVED 5
00257 #define CS_CODECFORMAT_YUV_INTERLEAVED 6
00258
00260 #define CS_CODECFORMAT_PCM
00261
00265 struct csCodecDescription
00266 {
00270 char codec[64];
00274 bool bEncode;
00278 bool bDecode;
00282 uint16 decodeoutput;
00286 uint16 encodeinput;
00287 };
00288
00289 #endif // __CS_IVIDEO_CODEC_H__