__isPlayerConstructed = false;
__isLocalData = true;
+ EventDrivenThread::Quit();
+
if (__hPlayer)
{
ret = player_get_state(__hPlayer, &__corePlayerCurState );
SysTryReturn(NID_MEDIA, __playerCount < __maxInstanceCount, E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE,
"__playerCount count -%d failed can only create - %d Player Instances ",__playerCount, __maxInstanceCount);
+ r = EventDrivenThread::Construct();
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Thread::Construct failed", GetErrorMessage(r));
+ r = EventDrivenThread::Start();
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Thread::Start failed", GetErrorMessage(r));
+
// Create Event
__pPlayerEvent.reset(new (std::nothrow) _PlayerEvent);
SysTryCatch(NID_MEDIA, __pPlayerEvent != null , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. __pPlayerEvent is null.");
SysTryCatch(NID_MEDIA, __hCanvas != 0, r = E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. __hCanvas = %d", __hCanvas);
}
- __pEndOfStreamHandler.reset(new (std::nothrow) Thread);
- SysTryReturn(NID_MEDIA, __pEndOfStreamHandler.get() != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
- "[E_OUT_OF_MEMORY]could not create memory for End of steam handling thread");
- r = __pEndOfStreamHandler->Construct(*this);
- SysTryReturn(NID_MEDIA, r == E_SUCCESS, E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] Thread::Construct failed");
-
__pMutex->Acquire();
SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
__playerCount++;
return r;
CATCH:
+ if (__hPlayer)
+ {
+ player_destroy(__hPlayer);
+ __hPlayer = null;
+ }
__pPlayerEventListener = null;
return r;
}
SysTryReturn(NID_MEDIA, __playerCount < __maxInstanceCount, r = E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE,
"[E_RESOURCE_UNAVAILABLE] __playerCount count -%d failed can only create - %d Player Instances ",__playerCount, __maxInstanceCount);
+ r = EventDrivenThread::Construct();
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Thread::Construct failed", GetErrorMessage(r));
+ r = EventDrivenThread::Start();
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Thread::Start failed", GetErrorMessage(r));
+
// Create Event
__pPlayerEvent.reset(new (std::nothrow) _PlayerEvent);
SysTryCatch(NID_MEDIA, __pPlayerEvent, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. __pPlayerEvent is null.");
r = SetLooping(false);
SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform SetLooping operation.", GetErrorMessage(r));
- __pEndOfStreamHandler.reset(new (std::nothrow) Thread);
- SysTryReturn(NID_MEDIA, __pEndOfStreamHandler.get() != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
- "[E_OUT_OF_MEMORY]could not create memory for End of steam handling thread");
- r = __pEndOfStreamHandler->Construct(*this);
- SysTryReturn(NID_MEDIA, r == E_SUCCESS, E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] Thread::Construct failed");
-
__pMutex->Acquire();
SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
__playerCount++;
return r;
CATCH:
-
+ if (__hPlayer)
+ {
+ player_destroy(__hPlayer);
+ __hPlayer = null;
+ }
__pPlayerEventListener = null;
__pPlayerVideoEventListener=null;
SysTryReturn(NID_MEDIA, __playerCount < __maxInstanceCount, E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE,
"__playerCount count -%d failed can only create - %d Player Instances ",__playerCount, __maxInstanceCount);
+ r = EventDrivenThread::Construct();
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Thread::Construct failed", GetErrorMessage(r));
+ r = EventDrivenThread::Start();
+ SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Thread::Start failed", GetErrorMessage(r));
+
__pVideoTextureImpl = _VideoTextureImpl::GetInstance(videoTexture);
SysTryReturn(NID_MEDIA, __pVideoTextureImpl != null, E_INVALID_ARG, E_INVALID_ARG, "videoTexture argument passes is wrong");
r = SetLooping(false);
SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform SetLooping operation.", GetErrorMessage(r));
- __pEndOfStreamHandler.reset(new (std::nothrow) Thread);
- SysTryReturn(NID_MEDIA, __pEndOfStreamHandler.get() != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
- "[E_OUT_OF_MEMORY]could not create memory for End of steam handling thread");
- r = __pEndOfStreamHandler->Construct(*this);
- SysTryReturn(NID_MEDIA, r == E_SUCCESS, E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] Thread::Construct failed");
-
__pMutex->Acquire();
SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
__playerCount++;
return r;
CATCH:
+ if (__hPlayer)
+ {
+ player_destroy(__hPlayer);
+ __hPlayer = null;
+ }
__pPlayerEventListener = null;
return r;
}
return E_SUCCESS;
CATCH:
player_destroy(__hPlayer);
+ __hPlayer = null;
return r;
}
}
//This is used exclusively for End of stream handling
-Tizen::Base::Object*
-_PlayerImpl::Run(void)
+void
+_PlayerImpl::OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs)
{
player_stop(__hPlayer);
__currentState = PLAYER_STATE_ENDOFCLIP;
void
_PlayerImpl::HandlePlayerCompleted(void)
{
- result r = E_SUCCESS;
- r = __pEndOfStreamHandler->Start();
- SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Thread::Start failed", GetErrorMessage(r));
+ EventDrivenThread::SendUserEvent(0, null);
}
void
#include <player.h>
#include <FOspConfig.h>
#include <FBaseRtTimer.h>
-#include <FBaseRtThread.h>
+#include <FBaseRtEventDrivenThread.h>
#include <FGrp_BufferInfoImpl.h>
#include <FGrp_VideoTextureImpl.h>
#include <FMediaPlayerTypes.h>
enum _PlayerEventType;
class _OSP_EXPORT_ _PlayerImpl
- : public Tizen::Base::Object
- , public Tizen::Base::Runtime::ITimerEventListener
- , public Tizen::Base::Runtime::IRunnable
+ : public Tizen::Base::Runtime::ITimerEventListener
+ , public Tizen::Base::Runtime::EventDrivenThread
{
enum Orientation
{
int GetHttpStreamingDownloadProgress(void) const;
void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
- Tizen::Base::Object* Run(void);
+ void OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs);
static void PlayerStartedCallBack(void *pUserData);
static void PlayerCompletedCallBack(void *pUserData);
std::unique_ptr<_PlayerProgressiveDownloadEvent> __pPlayerProgressiveDownloadEvent;
std::unique_ptr<Tizen::Base::Runtime::Timer> __pPdTimer;
std::unique_ptr<Tizen::Base::ByteBuffer> __pTargetByteBuffer;
- std::unique_ptr<Tizen::Base::Runtime::Thread> __pEndOfStreamHandler;
static std::unique_ptr<Tizen::Base::Runtime::Mutex> __pMutex;
static bool __isInstanceMutexInitialized;