BltStream.h

Go to the documentation of this file.
00001 /*****************************************************************
00002 |
00003 |   BlueTune - Stream Interface
00004 |
00005 |   (c) 2002-2006 Gilles Boccon-Gibod
00006 |   Author: Gilles Boccon-Gibod (bok@bok.net)
00007 |
00008  ****************************************************************/
00013 #ifndef _BLT_STREAM_H_
00014 #define _BLT_STREAM_H_
00015 
00016 /*----------------------------------------------------------------------
00017 |   includes
00018 +---------------------------------------------------------------------*/
00019 #include "Atomix.h"
00020 #include "BltDefs.h"
00021 #include "BltTypes.h"
00022 #include "BltErrors.h"
00023 #include "BltTime.h"
00024 
00025 /*----------------------------------------------------------------------
00026 |   error codes
00027 +---------------------------------------------------------------------*/
00028 #define BLT_ERROR_STREAM_NO_COMPATIBLE_NODE (BLT_ERROR_BASE_STREAM - 0)
00029 #define BLT_ERROR_STREAM_INPUT_NOT_FOUND    (BLT_ERROR_BASE_STREAM - 1)
00030 
00031 /*----------------------------------------------------------------------
00032 |   constants
00033 +---------------------------------------------------------------------*/
00034 #define BLT_STREAM_INFO_MASK_ALL             0xFFFF
00035 
00036 #define BLT_STREAM_INFO_MASK_NOMINAL_BITRATE 0x001
00037 #define BLT_STREAM_INFO_MASK_AVERAGE_BITRATE 0x002
00038 #define BLT_STREAM_INFO_MASK_INSTANT_BITRATE 0x004
00039 #define BLT_STREAM_INFO_MASK_SIZE            0x008
00040 #define BLT_STREAM_INFO_MASK_DURATION        0x010
00041 #define BLT_STREAM_INFO_MASK_SAMPLE_RATE     0x020
00042 #define BLT_STREAM_INFO_MASK_CHANNEL_COUNT   0x040
00043 #define BLT_STREAM_INFO_MASK_FLAGS           0x080
00044 #define BLT_STREAM_INFO_MASK_DATA_TYPE       0x100
00045 
00046 #define BLT_STREAM_INFO_FLAG_VBR             0x01
00047 
00048 #define BLT_SEEK_POINT_MASK_TIME_STAMP       0x01
00049 #define BLT_SEEK_POINT_MASK_POSITION         0x02
00050 #define BLT_SEEK_POINT_MASK_OFFSET           0x04
00051 #define BLT_SEEK_POINT_MASK_SAMPLE           0x08
00052 
00053 #define BLT_STREAM_NODE_FLAG_TRANSIENT 1
00054 
00055 /*----------------------------------------------------------------------
00056 |   types
00057 +---------------------------------------------------------------------*/
00058 typedef struct {
00059     BLT_Mask    mask;             
00060     BLT_UInt32  nominal_bitrate;  
00061     BLT_UInt32  average_bitrate;  
00062     BLT_UInt32  instant_bitrate;  
00063     BLT_UInt32  size;             
00064     BLT_UInt32  duration;         
00065     BLT_UInt32  sample_rate;      
00066     BLT_UInt16  channel_count;    
00067     BLT_Flags   flags;            
00068     BLT_CString data_type;        
00069 } BLT_StreamInfo;
00070 
00071 typedef enum {
00072     BLT_SEEK_MODE_IGNORE,
00073     BLT_SEEK_MODE_BY_TIME_STAMP,
00074     BLT_SEEK_MODE_BY_POSITION,
00075     BLT_SEEK_MODE_BY_OFFSET,
00076     BLT_SEEK_MODE_BY_SAMPLE
00077 } BLT_SeekMode;
00078 
00079 typedef struct {
00080     BLT_Size offset;       
00081     BLT_Size range;        
00082 } BLT_StreamPosition;
00083 
00084 typedef struct {
00085     BLT_Mask           mask;       
00086     BLT_TimeStamp      time_stamp; 
00087     BLT_StreamPosition position;   
00088     BLT_Size           offset;     
00089     ATX_Int64          sample;
00090 } BLT_SeekPoint;
00091 
00092 /*----------------------------------------------------------------------
00093 |   more includes
00094 +---------------------------------------------------------------------*/
00095 #include "BltEventListener.h"
00096 #include "BltModule.h"
00097 #include "BltCore.h"
00098 #include "BltMediaNode.h"
00099 #include "BltMediaPort.h"
00100 #include "BltOutputNode.h"
00101 
00102 /*----------------------------------------------------------------------
00103 |   more types
00104 +---------------------------------------------------------------------*/
00105 typedef struct {
00106     BLT_MediaNode* media_node;
00107     BLT_Flags      flags;
00108     struct {
00109         BLT_Boolean           connected;
00110         BLT_MediaPortProtocol protocol;
00111     } input;
00112     struct {
00113         BLT_Boolean           connected;
00114         BLT_MediaPortProtocol protocol;
00115     } output;
00116 } BLT_StreamNodeInfo;
00117 
00118 typedef struct {
00119     BLT_StreamPosition   position;
00120     BLT_TimeStamp        time_stamp;
00121     BLT_OutputNodeStatus output_status;
00122 } BLT_StreamStatus;
00123 
00124 /*----------------------------------------------------------------------
00125 |   BLT_Stream Interface
00126 +---------------------------------------------------------------------*/
00127 ATX_BEGIN_INTERFACE_DEFINITION(BLT_Stream)
00128     BLT_Result (*SetEventListener)(BLT_Stream*        self,
00129                                    BLT_EventListener* listener);
00130     BLT_Result (*ResetInput)(BLT_Stream* self);
00131     BLT_Result (*SetInput)(BLT_Stream* self, 
00132                            BLT_CString name,
00133                            BLT_CString type);
00134     BLT_Result (*SetInputNode)(BLT_Stream*    self,
00135                                BLT_CString    name,
00136                                BLT_MediaNode* node);
00137     BLT_Result (*GetInputNode)(BLT_Stream* self, BLT_MediaNode** node);
00138     BLT_Result (*ResetOutput)(BLT_Stream* self);
00139     BLT_Result (*SetOutput)(BLT_Stream* self, 
00140                             BLT_CString name,
00141                             BLT_CString type);
00142     BLT_Result (*SetOutputNode)(BLT_Stream*    self,
00143                                 BLT_CString    name,
00144                                 BLT_MediaNode* node);
00145     BLT_Result (*GetOutputNode)(BLT_Stream* stream, BLT_MediaNode** node);
00146     BLT_Result (*AddNode)(BLT_Stream*    self, 
00147                           BLT_MediaNode* where,
00148                           BLT_MediaNode* node);
00149     BLT_Result (*AddNodeByName)(BLT_Stream*    self, 
00150                                 BLT_MediaNode* where,
00151                                 BLT_CString    name);
00152     BLT_Result (*GetStreamNodeInfo)(BLT_Stream*          self,
00153                                     const BLT_MediaNode* node,
00154                                     BLT_StreamNodeInfo*  info);
00155     BLT_Result (*GetFirstNode)(BLT_Stream*         self,
00156                                BLT_MediaNode**     node);
00157     BLT_Result (*GetNextNode)(BLT_Stream*         self,
00158                               BLT_MediaNode*      node,
00159                               BLT_MediaNode**     next);
00160     BLT_Result (*PumpPacket)(BLT_Stream* self);
00161     BLT_Result (*Stop)(BLT_Stream* self);
00162     BLT_Result (*Pause)(BLT_Stream* self);
00163     BLT_Result (*SetInfo)(BLT_Stream* self, const BLT_StreamInfo* info);
00164     BLT_Result (*GetInfo)(BLT_Stream* self, BLT_StreamInfo* info);
00165     BLT_Result (*GetStatus)(BLT_Stream* self, BLT_StreamStatus* status);
00166     BLT_Result (*GetProperties)(BLT_Stream* self, ATX_Properties** settings);
00167     BLT_Result (*EstimateSeekPoint)(BLT_Stream*    self,
00168                                     BLT_SeekMode   mode,
00169                                     BLT_SeekPoint* point);
00170     BLT_Result (*SeekToTime)(BLT_Stream* self, BLT_UInt32 time);
00171     BLT_Result (*SeekToPosition)(BLT_Stream* self,
00172                                  BLT_Size    offset,
00173                                  BLT_Size    range);
00174 ATX_END_INTERFACE_DEFINITION
00175 
00176 /*----------------------------------------------------------------------
00177 |   convenience macros
00178 +---------------------------------------------------------------------*/
00179 #define BLT_Stream_SetEventListener(object, listener) \
00180 ATX_INTERFACE(object)->SetEventListener(object, listener)
00181 
00182 #define BLT_Stream_ResetInput(object) \
00183 ATX_INTERFACE(object)->ResetInput(object)
00184 
00185 #define BLT_Stream_SetInput(object, name, media_type) \
00186 ATX_INTERFACE(object)->SetInput(object, name, media_type)
00187 
00188 #define BLT_Stream_SetInputNode(object, node) \
00189 ATX_INTERFACE(object)->SetInputNode(object, node)
00190 
00191 #define BLT_Stream_GetInputNode(object, node) \
00192 ATX_INTERFACE(object)->GetInputNode(object, node)
00193 
00194 #define BLT_Stream_ResetOutput(object) \
00195 ATX_INTERFACE(object)->ResetOutput(object)
00196 
00197 #define BLT_Stream_SetOutput(object, name, media_type) \
00198 ATX_INTERFACE(object)->SetOutput(object, name, media_type)
00199 
00200 #define BLT_Stream_AddNodeByName(object, where, name) \
00201 ATX_INTERFACE(object)->AddNodeByName(object, where, name)
00202 
00203 #define BLT_Stream_GetStreamNodeInfo(object, node, info) \
00204 ATX_INTERFACE(object)->GetStreamNodeInfo(object, node, info)
00205 
00206 #define BLT_Stream_GetFirstNode(object, node) \
00207 ATX_INTERFACE(object)->GetFirstNode(object, node)
00208 
00209 #define BLT_Stream_GetNextNode(object, node, next) \
00210 ATX_INTERFACE(object)->GetNextNode(object, node, next)
00211 
00212 #define BLT_Stream_PumpPacket(object) \
00213 ATX_INTERFACE(object)->PumpPacket(object)
00214 
00215 #define BLT_Stream_Stop(object) \
00216 ATX_INTERFACE(object)->Stop(object)
00217 
00218 #define BLT_Stream_Pause(object) \
00219 ATX_INTERFACE(object)->Pause(object)
00220 
00221 #define BLT_Stream_SetInfo(object, info) \
00222 ATX_INTERFACE(object)->SetInfo(object, info)
00223 
00224 #define BLT_Stream_GetInfo(object, info) \
00225 ATX_INTERFACE(object)->GetInfo(object, info)
00226 
00227 #define BLT_Stream_GetStatus(object, status) \
00228 ATX_INTERFACE(object)->GetStatus(object, status)
00229 
00230 #define BLT_Stream_GetProperties(object, properties) \
00231 ATX_INTERFACE(object)->GetProperties(object, properties)
00232 
00233 #define BLT_Stream_GetSettings(object, settings) \
00234 ATX_INTERFACE(object)->GetSettings(object, settings)
00235 
00236 #define BLT_Stream_EstimateSeekPoint(object, mode, point) \
00237 ATX_INTERFACE(object)->EstimateSeekPoint(object, mode, point)
00238 
00239 #define BLT_Stream_SeekToTime(object, time) \
00240 ATX_INTERFACE(object)->SeekToTime(object, time)
00241 
00242 #define BLT_Stream_SeekToPosition(object, offset, range) \
00243 ATX_INTERFACE(object)->SeekToPosition(object, offset, range)
00244 
00245 #endif /* _BLT_STREAM_H_ */