DECL(AL_LOOPING),
#ifdef __TIZEN__
DECL(AL_LOOP_COUNT),
+ DECL(AL_SOURCE_STATE_CALLBACK),
+ DECL(AL_SOURCE_STATE_CALLBACK_DATA),
#endif
DECL(AL_BUFFER),
DECL(AL_GAIN),
BufferListItem = NULL;
DataPosInt = 0;
DataPosFrac = 0;
+#ifdef __TIZEN__
+ if (NULL != Source->StateCallBackInfo.CallBack)
+ Source->StateCallBackInfo.CallBack(Source->id, State,
+ Source->StateCallBackInfo.UserData);
+#endif
break;
}
}
* Number of repeats Source should be played before finishing playback.
*/
ALuint LoopCount;
+
+ /**
+ * Callback function will be called when stream state is changed, and
+ * user data to be transfered to the callback as parameter.
+ */
+ struct {
+ LPALSOURCESTATECB CallBack;
+ ALvoid *UserData;
+ } StateCallBackInfo;
#endif
/** Source Buffer Queue info. */
Source->Looping = AL_TRUE;
}
return AL_TRUE;
- }
+ }
#endif
case AL_BUFFER:
}
+#ifdef __TIZEN__
+AL_API void AL_APIENTRY alSourcep(ALuint source, ALenum param, ALvoid* value)
+{
+ ALCcontext *Context;
+ ALsource *Source;
+
+ Context = GetContextRef();
+ if(!Context) return;
+
+ if((Source=LookupSource(Context, source)) == NULL)
+ alSetError(Context, AL_INVALID_NAME);
+ else if(!value)
+ alSetError(Context, AL_INVALID_VALUE);
+ else
+ switch(param)
+ {
+ case AL_SOURCE_STATE_CALLBACK_DATA:
+ Source->StateCallBackInfo.UserData = value;
+ break;
+ case AL_SOURCE_STATE_CALLBACK:
+ Source->StateCallBackInfo.CallBack = (LPALSOURCESTATECB)value;
+ break;
+ default:
+ alSetError(Context, AL_INVALID_ENUM);
+ break;
+ }
+
+ ALCcontext_DecRef(Context);
+}
+#endif
+
+
AL_API ALvoid AL_APIENTRY alSourcei64SOFT(ALuint source, ALenum param, ALint64SOFT value)
{
ALCcontext *Context;
Source->DistanceModel = DefaultDistanceModel;
+#ifdef __TIZEN__
+ Source->StateCallBackInfo.CallBack = NULL;
+ Source->StateCallBackInfo.UserData = NULL;
+#endif
+
Source->state = AL_INITIAL;
Source->new_state = AL_NONE;
Source->SourceType = AL_UNDETERMINED;
ALvoid SetSourceState(ALsource *Source, ALCcontext *Context, ALenum state)
{
WriteLock(&Source->queue_lock);
+#ifdef __TIZEN__
+ ALenum prev_state = Source->state;
+#endif
if(state == AL_PLAYING)
{
ALCdevice *device = Context->Device;
Source->Offset = -1.0;
}
WriteUnlock(&Source->queue_lock);
+#ifdef __TIZEN__
+ if (Source->StateCallBackInfo.CallBack)
+ {
+ Source->StateCallBackInfo.CallBack(Source->id, state,
+ Source->StateCallBackInfo.UserData);
+ }
+#endif
}
/* GetSourceSampleOffset
#define AL_EXPONENT_DISTANCE 0xD005
#define AL_EXPONENT_DISTANCE_CLAMPED 0xD006
+#ifdef __TIZEN__
+/**
+ * Source state callback.
+ */
+#define AL_SOURCE_STATE_CALLBACK 0xE000
+#define AL_SOURCE_STATE_CALLBACK_DATA 0xE001
+#endif
+
/** Renderer State management. */
AL_API void AL_APIENTRY alEnable(ALenum capability);
AL_API void AL_APIENTRY alDisable(ALenum capability);
AL_API void AL_APIENTRY alSource3i(ALuint source, ALenum param, ALint value1, ALint value2, ALint value3);
AL_API void AL_APIENTRY alSourceiv(ALuint source, ALenum param, const ALint *values);
+#ifdef __TIZEN__
+AL_API void AL_APIENTRY alSourcep(ALuint source, ALenum param, ALvoid* values);
+#endif
+
/** Get Source parameters. */
AL_API void AL_APIENTRY alGetSourcef(ALuint source, ALenum param, ALfloat *value);
AL_API void AL_APIENTRY alGetSource3f(ALuint source, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
typedef void (AL_APIENTRY *LPALDOPPLERVELOCITY)(ALfloat value);
typedef void (AL_APIENTRY *LPALSPEEDOFSOUND)(ALfloat value);
typedef void (AL_APIENTRY *LPALDISTANCEMODEL)(ALenum distanceModel);
+#ifdef __TIZEN__
+typedef void (AL_APIENTRY *LPALSOURCESTATECB)(ALuint source, ALenum state, ALvoid *data);
+#endif
#if defined(__cplusplus)
} /* extern "C" */