00001
00002
00003
00004
00005
00006
00007
00008
00013 #ifndef _BLT_STREAM_H_
00014 #define _BLT_STREAM_H_
00015
00016
00017
00018
00019 #include "Atomix.h"
00020 #include "BltDefs.h"
00021 #include "BltTypes.h"
00022 #include "BltErrors.h"
00023 #include "BltTime.h"
00024
00025
00026
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
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
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
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
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
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
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