2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
17 #include <FBase_StringConverter.h>
18 #include <FBaseSysLog.h>
19 #include <FGrpBitmapCommon.h>
20 #include <FGrpDimension.h>
23 #include <FSys_SystemInfoImpl.h>
24 #include <FGrp_VideoTextureImpl.h>
25 #include <FMediaMediaStreamInfo.h>
26 #include <FMediaCapability.h>
27 #include "FMedia_ColorConverter.h"
28 #include "FMedia_PlayerEvent.h"
29 #include "FMedia_PlayerEventTypes.h"
30 #include "FMedia_PlayerEventArg.h"
31 #include "FMedia_PlayerVideoEvent.h"
32 #include "FMedia_PlayerVideoEventTypes.h"
33 #include "FMedia_PlayerVideoEventArg.h"
35 #include "FMedia_PlayerImpl.h"
36 #include "FMedia_AudioManagerConvert.h"
37 #include "FMedia_PlayerProgressiveDownloadEvent.h"
38 #include "FMedia_PlayerProgressiveDownloadEventArg.h"
40 using namespace Tizen::Base;
41 using namespace Tizen::Base::Runtime;
42 using namespace Tizen::Graphics;
43 using namespace Tizen::Net;
44 using namespace Tizen::Io;
45 using namespace Tizen::Base::Collection;
46 using namespace Tizen::Graphics::Opengl;
48 namespace Tizen { namespace Media
50 int _PlayerImpl::__playerCount = 0;
51 int _PlayerImpl::__maxInstanceCount = 0;
52 std::unique_ptr<Tizen::Base::Runtime::Mutex> _PlayerImpl::__pMutex;
53 bool _PlayerImpl::__isInstanceMutexInitialized = false;
55 _PlayerImpl::_PlayerImpl(void)
57 , __corePlayerCurState(::PLAYER_STATE_NONE)
59 , __handleType(_BufferInfoImpl::HANDLE_TYPE_NONE)
60 , __pPlayerEventListener(null)
61 , __pPlayerVideoEventListener(null)
62 , __pPlayerProgressiveDownloadListener(null)
63 , __orientation(ORIENTATION_PORTRAIT)
64 , __currentVolume(DEFAULT_PLAYER_VOLUME)
65 , __currentState(PLAYER_STATE_INITIALIZED)
66 , __preState(PLAYER_STATE_INITIALIZED)
67 , __videoPixelFormat(BITMAP_PIXEL_FORMAT_MIN)
69 , __decodedFrameWidth(0)
70 , __decodedFrameHeight(0)
71 , __decodedFrameSize(0)
72 , __pdCallbackRate(10)
73 , __pVideoTextureImpl(null)
74 , __isOpenBuffer(false)
78 , __checkCallbackForReadyState(false)
79 , __isStreamingContent(false)
80 , __videoEventCreated(false)
81 , __isPlayerConstructed(false)
82 , __isStateChangeForVideoCapture(false)
83 , __isProgressiveContent(false)
84 , __isProgressiveTimerStarted(false)
85 , __interruptFlag(false)
90 _PlayerImpl::~_PlayerImpl(void)
92 // Destruct only if player is constructed.
93 if (__isPlayerConstructed == false )
97 SysTryLog(NID_MEDIA, false, "Destroy player");
100 int ret = ::PLAYER_ERROR_NONE;
101 __isOpenBuffer = false;
102 __isStreamingContent = false;
103 __bufferDataSize = 0;
104 __isPlayerConstructed = false;
105 __isLocalData = true;
107 EventDrivenThread::Quit();
111 ret = player_get_state(__hPlayer, &__corePlayerCurState );
114 if ( __corePlayerCurState == ::PLAYER_STATE_PAUSED || __corePlayerCurState == ::PLAYER_STATE_PLAYING )
116 ret = player_stop(__hPlayer);
117 r = MapExceptionToResult(ret);
118 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
119 ret = player_get_state(__hPlayer, &__corePlayerCurState );
120 r = MapExceptionToResult(ret);
121 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
123 if ( __corePlayerCurState == ::PLAYER_STATE_READY )
126 ret = player_unprepare(__hPlayer);
127 r = MapExceptionToResult(ret);
128 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
129 ret = player_get_state(__hPlayer, &__corePlayerCurState );
130 r = MapExceptionToResult(ret);
131 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
133 //un-set the callbacks
134 player_unset_completed_cb(__hPlayer);
135 player_unset_interrupted_cb(__hPlayer);
136 player_unset_error_cb(__hPlayer);
137 if (__videoEventCreated)
139 player_unset_video_frame_decoded_cb(__hPlayer);
142 if (__corePlayerCurState == ::PLAYER_STATE_IDLE )
144 ret = player_destroy(__hPlayer);
145 r = MapExceptionToResult(ret);
146 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
152 r = __pMutex->Acquire();
153 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
156 // Decrease a number of player instance
158 SysLog(NID_MEDIA, "_~PlayerImpl Instance number is %d", __playerCount);
160 r = __pMutex->Release();
161 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
162 __pVideoTextureImpl = null;
166 _PlayerImpl::InitInstanceMutex(void)
168 result r = E_SUCCESS;
169 __pMutex.reset(new (std::nothrow) Tizen::Base::Runtime::Mutex);
170 SysTryReturn(NID_MEDIA, __pMutex.get() != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] no memory to create instance Mutex");
171 r = __pMutex->Create("FMEDIA_PLAYER");
172 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Mutex::Create failed.");
173 __isInstanceMutexInitialized = true;
177 _PlayerImpl::GetInstance(Player* pPlayer)
181 return pPlayer->__pPlayerImpl;
188 _PlayerImpl::GetInstance(const Player* pPlayer)
192 return pPlayer->__pPlayerImpl;
200 _PlayerImpl::Construct(IPlayerEventListener& listener, const Tizen::Graphics::BufferInfo* pBufferInfo)
202 result r = E_SUCCESS;
203 const _BufferInfoImpl *pbufferInfoImpl = null;
204 static pthread_once_t onceBlock = PTHREAD_ONCE_INIT;
205 if (!__isInstanceMutexInitialized)
207 pthread_once(&onceBlock, InitInstanceMutex);
209 SysTryCatch(NID_MEDIA, __isInstanceMutexInitialized == true, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] memory allocation for Instance Mutex failed");
211 //if the __maxInstanceCount is not initialized do so using Capability
212 if (!__maxInstanceCount)
214 r = MediaCapability::GetValue(PLAYER_COUNT_MAX, __maxInstanceCount);
215 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s]Propagating", GetErrorMessage(r));
216 SysTryCatch(NID_MEDIA, __maxInstanceCount > 0, , r, "[%s]Propagating", GetErrorMessage(r));
219 // Check the instance maximum
220 SysTryReturn(NID_MEDIA, __playerCount < __maxInstanceCount, E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE,
221 "__playerCount count -%d failed can only create - %d Player Instances ",__playerCount, __maxInstanceCount);
223 r = EventDrivenThread::Construct();
224 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Thread::Construct failed", GetErrorMessage(r));
225 r = EventDrivenThread::Start();
226 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Thread::Start failed", GetErrorMessage(r));
229 __pPlayerEvent.reset(new (std::nothrow) _PlayerEvent);
230 SysTryCatch(NID_MEDIA, __pPlayerEvent != null , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. __pPlayerEvent is null.");
232 r = __pPlayerEvent->Construct();
233 SysTryCatch(NID_MEDIA, r == E_SUCCESS, r = E_RESOURCE_UNAVAILABLE , E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] Failed to construct _PlayerEvent.");
235 r = __pPlayerEvent->AddListener(listener);
236 SysTryCatch(NID_MEDIA, r == E_SUCCESS, r = E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] Failed to perform AddListener operation.");
238 __pPlayerEventListener = &listener;
240 r = CreatePlayerAndSetCallBack();
241 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform CreateMMPlayerInstanceAndSetMsgCallBack operation.", GetErrorMessage(r));
243 r = SetVolume(DEFAULT_PLAYER_VOLUME);
244 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform SetVolume operation.", GetErrorMessage(r));
247 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform SetMute operation.", GetErrorMessage(r));
249 r = SetLooping(false);
250 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform SetLooping operation.", GetErrorMessage(r));
252 // Set the canvas to subsystem's player
255 pbufferInfoImpl = _BufferInfoImpl::GetInstance(*pBufferInfo);
256 SysTryCatch(NID_MEDIA, pbufferInfoImpl != NULL, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pbufferInfoImpl instance must not be null.");
257 __orientation = (Orientation)(pbufferInfoImpl->GetOrientation());
259 // Set an available handler even if handler is not available.
260 if (pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION))
262 __hCanvas = pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION);
263 __handleType = _BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION;
265 else if (pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_VE_SURFACE))
267 __hCanvas = pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_VE_SURFACE);
268 __handleType = _BufferInfoImpl::HANDLE_TYPE_VE_SURFACE;
273 __handleType = _BufferInfoImpl::HANDLE_TYPE_NONE;
276 SysTryCatch(NID_MEDIA, __hCanvas != 0, r = E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. __hCanvas = %d", __hCanvas);
280 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
282 r = __pMutex->Release();
283 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
284 SysLog(NID_MEDIA, "Instance number is %d.", __playerCount);
286 __currentState = PLAYER_STATE_INITIALIZED;
287 __isPlayerConstructed = true;
293 player_destroy(__hPlayer);
296 __pPlayerEventListener = null;
301 _PlayerImpl::Construct(IPlayerEventListener& listener, IPlayerVideoEventListener& videoListener, void* pPlayerObj)
303 result r = E_SUCCESS;
304 String key(L"http://tizen.org/feature/screen.bpp");
306 static pthread_once_t onceBlock = PTHREAD_ONCE_INIT;
307 if (!__isInstanceMutexInitialized)
309 pthread_once(&onceBlock, InitInstanceMutex);
311 SysTryCatch(NID_MEDIA, __isInstanceMutexInitialized == true, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] memory allocation for Instance Mutex failed");
313 if (!__maxInstanceCount)
315 r = MediaCapability::GetValue(PLAYER_COUNT_MAX, __maxInstanceCount);
316 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating", GetErrorMessage(r));
317 SysTryCatch(NID_MEDIA, __maxInstanceCount > 0, , r, "[%s] Propagating", GetErrorMessage(r));
320 // Check the instance maximum
321 SysTryReturn(NID_MEDIA, __playerCount < __maxInstanceCount, r = E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE,
322 "[E_RESOURCE_UNAVAILABLE] __playerCount count -%d failed can only create - %d Player Instances ",__playerCount, __maxInstanceCount);
324 r = EventDrivenThread::Construct();
325 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Thread::Construct failed", GetErrorMessage(r));
326 r = EventDrivenThread::Start();
327 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Thread::Start failed", GetErrorMessage(r));
330 __pPlayerEvent.reset(new (std::nothrow) _PlayerEvent);
331 SysTryCatch(NID_MEDIA, __pPlayerEvent, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. __pPlayerEvent is null.");
333 r = __pPlayerEvent->Construct();
334 SysTryCatch(NID_MEDIA, r == E_SUCCESS, r = E_RESOURCE_UNAVAILABLE , E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] Failed to construct _PlayerEvent");
336 r = __pPlayerEvent->AddListener(listener);
337 SysTryCatch(NID_MEDIA, r == E_SUCCESS, r = E_RESOURCE_UNAVAILABLE , E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] Failed to perform AddListner operation");
339 __pPlayerEventListener = &listener;
341 // Create Video Event
342 __pPlayerVideoEvent.reset(new (std::nothrow) _PlayerVideoEvent);
343 SysTryCatch(NID_MEDIA, __pPlayerVideoEvent, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. pPlayerVideoEvent is null");
345 r = __pPlayerVideoEvent->Construct(pPlayerObj);
346 SysTryCatch(NID_MEDIA, r == E_SUCCESS, r = E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] Failed to construct _PlayerVideoEvent.");
348 r = __pPlayerVideoEvent->AddListener(videoListener);
349 SysTryCatch(NID_MEDIA, r == E_SUCCESS, r = E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] Failed to perform AddListner operation.");
351 __pPlayerVideoEventListener = &videoListener;
353 // Set the bit per pixel of system
354 r = Tizen::System::_SystemInfoImpl::GetSysInfo(key, bit);
356 SetSystemBitPerPixel(bit);
357 __videoEventCreated = true;
358 // Set Canvas for surface in platform
360 r = CreatePlayerAndSetCallBack();
361 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform CreateMMPlayerInstanceAndSetMsgCallBack operation.", GetErrorMessage(r));
363 r = SetVolume(DEFAULT_PLAYER_VOLUME);
364 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform SetVolume operation.", GetErrorMessage(r));
367 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform SetMute operation.", GetErrorMessage(r));
369 r = SetLooping(false);
370 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform SetLooping operation.", GetErrorMessage(r));
373 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
375 r = __pMutex->Release();
376 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
377 SysLog(NID_MEDIA, "Instance number is %d", __playerCount);
379 __currentState = PLAYER_STATE_INITIALIZED;
380 __isPlayerConstructed = true;
386 player_destroy(__hPlayer);
389 __pPlayerEventListener = null;
390 __pPlayerVideoEventListener=null;
397 _PlayerImpl::Construct(IPlayerEventListener& listener, Tizen::Graphics::Opengl::VideoTexture& videoTexture)
399 result r = E_SUCCESS;
400 static pthread_once_t onceBlock = PTHREAD_ONCE_INIT;
401 if (!__isInstanceMutexInitialized)
403 pthread_once(&onceBlock, InitInstanceMutex);
405 SysTryCatch(NID_MEDIA, __isInstanceMutexInitialized == true, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] memory allocation for Instance Mutex failed");
407 //if the __maxInstanceCount is not initialized do so using Capability
408 if (!__maxInstanceCount)
410 r = MediaCapability::GetValue(PLAYER_COUNT_MAX, __maxInstanceCount);
411 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s]Propagating", GetErrorMessage(r));
412 SysTryCatch(NID_MEDIA, __maxInstanceCount > 0, , r, "[%s]Propagating", GetErrorMessage(r));
415 // Check the instance maximum
416 SysTryReturn(NID_MEDIA, __playerCount < __maxInstanceCount, E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE,
417 "__playerCount count -%d failed can only create - %d Player Instances ",__playerCount, __maxInstanceCount);
419 r = EventDrivenThread::Construct();
420 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Thread::Construct failed", GetErrorMessage(r));
421 r = EventDrivenThread::Start();
422 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Thread::Start failed", GetErrorMessage(r));
424 __pVideoTextureImpl = _VideoTextureImpl::GetInstance(videoTexture);
425 SysTryReturn(NID_MEDIA, __pVideoTextureImpl != null, E_INVALID_ARG, E_INVALID_ARG, "videoTexture argument passes is wrong");
428 __pPlayerEvent.reset(new (std::nothrow) _PlayerEvent);
429 SysTryCatch(NID_MEDIA, __pPlayerEvent != null , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. __pPlayerEvent is null.");
431 r = __pPlayerEvent->Construct();
432 SysTryCatch(NID_MEDIA, r == E_SUCCESS, r = E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] Failed to construct _PlayerEvent.");
434 r = __pPlayerEvent->AddListener(listener);
435 SysTryCatch(NID_MEDIA, r == E_SUCCESS, r = E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] Failed to perform AddListener operation.");
437 __pPlayerEventListener = &listener;
439 r = CreatePlayerAndSetCallBack();
440 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform CreateMMPlayerInstanceAndSetMsgCallBack operation.", GetErrorMessage(r));
442 r = SetVolume(DEFAULT_PLAYER_VOLUME);
443 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform SetVolume operation.", GetErrorMessage(r));
446 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform SetMute operation.", GetErrorMessage(r));
448 r = SetLooping(false);
449 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform SetLooping operation.", GetErrorMessage(r));
452 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
454 r = __pMutex->Release();
455 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
456 SysLog(NID_MEDIA, "Instance number is %d.", __playerCount);
458 __currentState = PLAYER_STATE_INITIALIZED;
459 __isPlayerConstructed = true;
465 player_destroy(__hPlayer);
468 __pPlayerEventListener = null;
473 _PlayerImpl::OpenFile(const Tizen::Base::String& mediaLocalPath, bool isAsync)
475 result r = E_SUCCESS;
476 int err = ::PLAYER_ERROR_NONE;
477 Tizen::Base::String strFileName;
478 std::unique_ptr<char[]> pInputFilePath;
479 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
481 err = player_get_state(__hPlayer, &__corePlayerCurState);
482 r = MapExceptionToResult(err);
483 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "%s error has been occurred in player_get_state", GetErrorMessage(r));
485 SysTryReturn(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_IDLE,
486 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. State is %d", __corePlayerCurState);
488 strFileName = Tizen::Io::File::GetFileName(mediaLocalPath);
490 SysTryReturn(NID_MEDIA, ((mediaLocalPath.GetLength() > 0) && !strFileName.IsEmpty()), E_FILE_NOT_FOUND, E_FILE_NOT_FOUND,
491 "[E_FILE_NOT_FOUND] mediaLocalPath's length is (%d).", mediaLocalPath.GetLength());
493 pInputFilePath.reset(_StringConverter::CopyToCharArrayN(mediaLocalPath));
494 SysTryCatch(NID_MEDIA, pInputFilePath.get() , r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pInputFilePath is null");
495 SysSecureLog(NID_MEDIA, "Input file path after conversion is [%s]", pInputFilePath.get());
497 __preState = __currentState;
498 __currentState = PLAYER_STATE_OPENING;
501 r = OpenInputData(std::move(pInputFilePath));
502 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform OpenInputData operation.", GetErrorMessage(r));
506 __currentState = PLAYER_STATE_INITIALIZED;
511 _PlayerImpl::OpenBuffer(const Tizen::Base::ByteBuffer& mediaBuffer, bool isAsync)
513 result r = E_SUCCESS;
514 int err = ::PLAYER_ERROR_NONE;
515 std::unique_ptr<char[]> pInputFilePath;
517 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
519 err = player_get_state(__hPlayer, &__corePlayerCurState);
520 r = MapExceptionToResult(err);
521 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "%s error has been occurred. Failed to perform player_getstate operation with - 0x%x", GetErrorMessage(r), err);
523 SysTryReturn(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_IDLE,
524 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. State is %d ", __corePlayerCurState);
526 __pTargetByteBuffer.reset(new (std::nothrow) ByteBuffer);
527 SysTryCatch(NID_MEDIA, __pTargetByteBuffer , r = E_OUT_OF_MEMORY, r, "[E_OUT_OF_MEMORY] Memory allocation failed. pTargetByteBuffer is null");
529 r = __pTargetByteBuffer->Construct(mediaBuffer);
531 __isOpenBuffer = true;
532 __bufferDataSize = __pTargetByteBuffer->GetCapacity();
534 SysTryCatch(NID_MEDIA, __bufferDataSize > 0, r = E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Buffer instance is not available.");
535 SysTryCatch(NID_MEDIA, __pTargetByteBuffer->GetPointer() , r = E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Buffer instance is not available.");
537 __preState = __currentState;
538 __currentState = PLAYER_STATE_OPENING;
541 r = OpenInputData(std::move(pInputFilePath));
542 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform OpenInputData operation.", GetErrorMessage(r));
546 __isOpenBuffer = false;
547 __currentState = PLAYER_STATE_INITIALIZED;
552 _PlayerImpl::OpenUrl(const Tizen::Base::Utility::Uri& mediaUri, bool isAync)
554 result r = E_SUCCESS;
556 Tizen::Base::String urlStr;
557 Tizen::Base::String scheme;
558 std::unique_ptr<char[]> pInputFilePath;
560 int err = ::PLAYER_ERROR_NONE;
562 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
564 err = player_get_state(__hPlayer, &__corePlayerCurState);
565 r = MapExceptionToResult(err);
566 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "%s error has been occurred. Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), err);
568 SysTryReturn(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_IDLE,
569 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. State is %d", __corePlayerCurState);
571 SysTryReturn(NID_MEDIA, !mediaUri.GetEncodedString().IsEmpty(), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. Input url is empty");
573 urlStr = mediaUri.GetEncodedString();
575 r = urlStr.SubString(0, 4, scheme);
576 SysTryReturn(NID_MEDIA, r == E_SUCCESS, E_UNSUPPORTED_PROTOCOL , E_UNSUPPORTED_PROTOCOL, "[%s] Failed to perform SubString operation", GetErrorMessage(E_UNSUPPORTED_PROTOCOL));
577 SysTryReturn(NID_MEDIA, (scheme.Equals(L"rtsp", false) || scheme.Equals(L"http", false)), r = E_UNSUPPORTED_PROTOCOL,
578 E_UNSUPPORTED_PROTOCOL, "[E_UNSUPPORTED_PROTOCOL] error has been occurred.");
580 pInputFilePath.reset(_StringConverter::CopyToCharArrayN(mediaUri.GetEncodedString()));
582 __isStreamingContent = true;
583 __preState = __currentState;
584 __currentState = PLAYER_STATE_OPENING;
586 r = OpenInputData(std::move(pInputFilePath));
587 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform OpenInputData operation.", GetErrorMessage(r));
588 __isLocalData = false;
592 __isStreamingContent = false;
593 __currentState = PLAYER_STATE_INITIALIZED;
598 _PlayerImpl::OpenInputData(std::unique_ptr<char[]> pStrInputFilePath)
600 result r = E_SUCCESS;
601 int err = ::PLAYER_ERROR_NONE;
602 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
606 err = player_set_memory_buffer(__hPlayer, (void *) __pTargetByteBuffer->GetPointer(), __bufferDataSize);
610 SysTryReturn(NID_MEDIA, pStrInputFilePath.get() , r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. StrInputFilePath is null.");
611 err = player_set_uri(__hPlayer, pStrInputFilePath.get());
613 r = MapExceptionToResult(err);
614 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "%s error has been occurred.", GetErrorMessage(r));
618 if (__handleType != _BufferInfoImpl::HANDLE_TYPE_VE_SURFACE)
620 SysLog(NID_MEDIA, "PLAYER_DISPLAY_TYPE_X11");
621 err = player_set_display(__hPlayer, PLAYER_DISPLAY_TYPE_X11, (player_display_h) __hCanvas);
624 SysLog(NID_MEDIA, "PLAYER_DISPLAY_TYPE_EVAS");
625 err = player_set_display(__hPlayer, PLAYER_DISPLAY_TYPE_EVAS, (player_display_h) __hCanvas);
627 r = MapExceptionToResult(err);
628 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "%s error has been occurred. Failed to perform player_set_display operation with - 0x%x", GetErrorMessage(r), err);
630 err = player_set_display_mode(__hPlayer, PLAYER_DISPLAY_MODE_FULL_SCREEN);
631 r = MapExceptionToResult(err);
632 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "%s error has been occurred. Failed to perform player_set_display_mode operation with - 0x%x", GetErrorMessage(r), err);
634 if (__pVideoTextureImpl)
636 err = player_set_display_mode(__hPlayer, PLAYER_DISPLAY_MODE_FULL_SCREEN);
637 r = MapExceptionToResult(err);
638 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "%s error has been occurred. Failed to perform player_set_display_mode operation with - 0x%x", GetErrorMessage(r), err);
640 err = player_set_x11_display_pixmap(__hPlayer, _VideoTextureImpl::GetPixmap, (void*)__pVideoTextureImpl);
641 r = MapExceptionToResult(err);
642 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "%s error has been occurred. Failed to perform player_set_x11_display_pixmap with - 0x%x", GetErrorMessage(r), err);
644 err = player_set_x11_display_pixmap_error_cb(__hPlayer, _VideoTextureImpl::PixmapErrorCallback, (void*)__pVideoTextureImpl);
645 r = MapExceptionToResult(err);
646 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "%s error has been occurred. Failed to perform player_set_x11_display_pixmap_error_cb with 0x%x", GetErrorMessage(r), err);
648 if (__videoEventCreated)
650 err = player_set_display(__hPlayer, PLAYER_DISPLAY_TYPE_X11, (player_display_h) null);
651 r = MapExceptionToResult(err);
652 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] error has been occurred. Failed to perform player_set_display operation with - 0x%x", GetErrorMessage(r), err);
654 err = player_set_x11_display_visible(__hPlayer, false);
655 r = MapExceptionToResult(err);
656 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] error has been occurred. Failed to perform player_set_x11_display_visible operation with - 0x%x", GetErrorMessage(r), err);
658 if (__isAsync == false)
661 err = player_prepare(__hPlayer);
662 r = MapExceptionToResult(err);
663 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] error has been occurred. Failed to perform player_prepare operation with 0x%x", GetErrorMessage(r), err);
665 err = player_get_state(__hPlayer, &__corePlayerCurState);
666 r = MapExceptionToResult(err);
667 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] error has been occurred. Failed to perform player_get_state operation with - 0x%x",GetErrorMessage(r), err);
668 SysTryCatch(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_READY , , r = E_SYSTEM, "[E_SYSTEM] A system error has been occurred. wrong sync state is [%d]", __corePlayerCurState);
669 __currentState = PLAYER_STATE_OPENED;
675 err = player_prepare_async(__hPlayer,PlayerPreparedCallBack,(void*)this);
676 r = MapExceptionToResult(err);
677 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] error has been occured. Failed to perform player_prepare_async operation with 0x%x", GetErrorMessage(r), err);
679 if (__isStreamingContent)
681 err = player_set_buffering_cb(__hPlayer, PlayerBufferingCallBack, (void*)this);
682 r = MapExceptionToResult(err);
683 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] error has been occurred. Failed to perform player_set_buffering_cb with - 0x%x",GetErrorMessage(r), err);
690 //Basic Functionalities of Tizen::Media::Player
693 _PlayerImpl::Close(void)
695 result r = E_SUCCESS;
696 int ret = ::PLAYER_ERROR_NONE;
698 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
700 ret = player_get_state(__hPlayer, &__corePlayerCurState);
701 r = MapExceptionToResult(ret);
702 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), ret);
703 SysTryReturn(NID_MEDIA, (__corePlayerCurState == ::PLAYER_STATE_READY ),
704 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. State is %d", __corePlayerCurState);
706 ret = player_unprepare(__hPlayer);
707 r = MapExceptionToResult(ret);
708 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Failed to perform player_unprepare operation with - 0x%x", GetErrorMessage(r), ret);
710 ret = player_get_state(__hPlayer, &__corePlayerCurState);
711 r = MapExceptionToResult(ret);
712 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_getstate operation with - 0x%x", GetErrorMessage(r), ret);
713 SysTryCatch(NID_MEDIA, (__corePlayerCurState == ::PLAYER_STATE_IDLE ), r = E_INVALID_STATE, r, "[E_INVALID_STATE] Player state is in an invalid state - %d ",__corePlayerCurState);
715 //because player_unrealize is sync we can directly make the state as PLAYER_STATE_CLOSED
716 __currentState = PLAYER_STATE_CLOSED;
717 __isOpenBuffer = false;
718 __bufferDataSize = 0;
719 __isLocalData = true;
721 if (__isProgressiveContent)
723 if (__pPlayerProgressiveDownloadEvent)
725 __pPlayerProgressiveDownloadEvent->RemoveListener(*__pPlayerProgressiveDownloadListener);
726 __pPlayerProgressiveDownloadListener = null;
728 ret = player_unset_progressive_download_message_cb(__hPlayer);
729 r = MapExceptionToResult(ret);
732 SysLogException(NID_MEDIA, r == E_SUCCESS, "Failed to perform player_unset_progressive_download_message_cb operation with 0x%x", ret);
736 __pPdTimer->Cancel();
737 __isProgressiveTimerStarted = false;
739 __isProgressiveContent = false;
742 if (__isStreamingContent)
744 ret = player_unset_buffering_cb(__hPlayer);
745 r = MapExceptionToResult(ret);
748 SysLogException(NID_MEDIA, r == E_SUCCESS, "Failed to perform player_unset_buffering_cb operation with 0x%x", ret);
752 __isStreamingContent = false;
756 __currentState = PLAYER_STATE_ERROR;
761 _PlayerImpl::Play(void)
763 result r = E_SUCCESS;
764 int ret = ::PLAYER_ERROR_NONE;
766 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
768 ret = player_get_state(__hPlayer, &__corePlayerCurState);
769 r = MapExceptionToResult(ret);
770 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] player_getstate failed with - 0x%x", GetErrorMessage(r), ret);
771 SysTryReturn(NID_MEDIA, ((__corePlayerCurState == ::PLAYER_STATE_READY ) || (__corePlayerCurState == ::PLAYER_STATE_PAUSED )),
772 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. State is %d", __corePlayerCurState);
774 ret = player_start(__hPlayer);
775 r = MapExceptionToResult(ret);
776 SysTryReturn(NID_MEDIA,r == E_SUCCESS, r, r, "[%s] Failed to perform player_start operation with - 0x%x", GetErrorMessage(r), ret);
778 ret = player_get_state(__hPlayer, &__corePlayerCurState);
779 r = MapExceptionToResult(ret);
780 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with- 0x%x", GetErrorMessage(r), ret);
781 SysTryCatch(NID_MEDIA, (__corePlayerCurState == ::PLAYER_STATE_PLAYING),
782 r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. State change was not proper returned state is - %d", __corePlayerCurState);
783 __isStateChangeForVideoCapture = false;
785 if (__isProgressiveContent)
787 if ((__pPdTimer != null) && (__isProgressiveTimerStarted == false))
789 r = __pPdTimer->Start(_PLAYER_PROGRESSIVE_DOWNLOAD_TIMER_100_MS);
790 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform Timer start operation.", GetErrorMessage(r));
791 SysLog(NID_MEDIA, "Progressive Timer has started");
792 __isProgressiveTimerStarted = true;
795 __currentState = PLAYER_STATE_PLAYING;
798 __currentState = PLAYER_STATE_ERROR;
803 _PlayerImpl::Stop(void)
806 result r = E_SUCCESS;
807 int ret = ::PLAYER_ERROR_NONE;
809 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
811 ret = player_get_state(__hPlayer, &__corePlayerCurState);
812 r = MapExceptionToResult(ret);
813 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), ret);
814 SysTryReturn(NID_MEDIA, ((__corePlayerCurState == ::PLAYER_STATE_PLAYING ) || (__corePlayerCurState == ::PLAYER_STATE_PAUSED )),
815 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. State is %d", __corePlayerCurState);
817 ret = player_stop(__hPlayer);
818 r = MapExceptionToResult(ret);
819 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Failed to perform player_stop operation with - 0x%x", GetErrorMessage(r), ret);
821 ret = player_get_state(__hPlayer, &__corePlayerCurState);
822 r = MapExceptionToResult(ret);
823 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), ret);
824 SysTryCatch(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_READY,
825 r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occured. State change was not proper returned state is %d", __corePlayerCurState);
827 __currentState = PLAYER_STATE_STOPPED;
831 __currentState = PLAYER_STATE_ERROR;
836 _PlayerImpl::Pause(void)
838 result r = E_SUCCESS;
839 int ret = ::PLAYER_ERROR_NONE;
841 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
843 ret = player_get_state(__hPlayer, &__corePlayerCurState);
844 r = MapExceptionToResult(ret);
845 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), ret);
846 SysTryReturn(NID_MEDIA, (__corePlayerCurState == ::PLAYER_STATE_PLAYING ), E_INVALID_STATE, E_INVALID_STATE,
847 "[E_INVALID_STATE] Player state is in an invalid state. State is %d", __corePlayerCurState);
849 ret = player_pause(__hPlayer);
850 r = MapExceptionToResult(ret);
851 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Failed to perform player_pause operation with - 0x%x", GetErrorMessage(r), ret);
853 ret = player_get_state(__hPlayer, &__corePlayerCurState);
854 r = MapExceptionToResult(ret);
855 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), ret);
856 SysTryCatch(NID_MEDIA, (__corePlayerCurState == ::PLAYER_STATE_PAUSED ),
857 r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. State change was not proper returned state is %d", __corePlayerCurState);
859 __currentState = PLAYER_STATE_PAUSED;
863 __currentState = PLAYER_STATE_ERROR;
867 //Gets of Tizen::Media::Player
870 _PlayerImpl::GetState(void)
872 result r = E_SUCCESS;
873 int ret = ::PLAYER_ERROR_NONE;
875 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
877 if (__currentState == PLAYER_STATE_ERROR)
879 return PLAYER_STATE_ERROR;
881 ret = player_get_state(__hPlayer, &__corePlayerCurState);
882 r = MapExceptionToResult(ret);
883 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), ret);
885 if (__corePlayerCurState == ::PLAYER_STATE_PAUSED)
887 __currentState = PLAYER_STATE_PAUSED;
888 return PLAYER_STATE_PAUSED;
890 if (__corePlayerCurState == ::PLAYER_STATE_IDLE)
892 if (__currentState == PLAYER_STATE_INITIALIZED)
894 return PLAYER_STATE_INITIALIZED;
896 else if (__currentState == PLAYER_STATE_OPENING)
898 return PLAYER_STATE_OPENING;
900 else if(__currentState == PLAYER_STATE_CLOSED)
902 return PLAYER_STATE_CLOSED;
905 return __currentState;
907 return (PlayerState) - 1;
911 _PlayerImpl::GetPosition(void) const
913 int ret = ::PLAYER_ERROR_NONE;
915 result r = E_SUCCESS;
917 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
919 ret = player_get_position(__hPlayer, &pos);
920 r = MapExceptionToResult(ret);
921 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_position operation with 0x%x", GetErrorMessage(r), ret);
929 _PlayerImpl::GetDuration(void)
931 int err = ::PLAYER_ERROR_NONE;
932 result r = E_SUCCESS;
935 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
937 SysTryCatch(NID_MEDIA, (
938 (__currentState == PLAYER_STATE_PLAYING) ||
939 (__currentState == PLAYER_STATE_PAUSED) ||
940 (__currentState == PLAYER_STATE_OPENED) ||
941 (__currentState == PLAYER_STATE_STOPPED)),
942 r = E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. State is %d", __currentState);
944 //As a last resort try with palyer_get_duration
945 err = player_get_duration(__hPlayer, &duration);
946 r = MapExceptionToResult(err);
947 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_duration operation with 0x%x", GetErrorMessage(r), err);
948 SysLog(NID_MEDIA, "Duration is %d after player_get_duration.",duration);
956 _PlayerImpl::GetVolume(void) const
958 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
959 return __currentVolume;
963 _PlayerImpl::IsMute(void) const
965 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
970 _PlayerImpl::IsLooping(void) const
972 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
977 _PlayerImpl::SeekTo(long msTime)
979 result r = E_SUCCESS;
980 int ret = ::PLAYER_ERROR_NONE;
982 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
984 ret = player_get_state(__hPlayer, &__corePlayerCurState);
985 r = MapExceptionToResult(ret);
986 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with 0x%x", GetErrorMessage(r), ret);
988 SysTryReturn(NID_MEDIA, ((__corePlayerCurState == ::PLAYER_STATE_PLAYING ) || (__corePlayerCurState == ::PLAYER_STATE_PAUSED )
989 || (__corePlayerCurState == ::PLAYER_STATE_READY )), E_INVALID_STATE, E_INVALID_STATE
990 , "[E_INVALID_STATE] Player state is in an invalid state. Current state is %d", __corePlayerCurState);
992 SysTryReturn(NID_MEDIA, msTime >= 0, r = E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The msTime is not greater than 0");
994 ret = player_set_position(__hPlayer, (int)msTime, PlayerSeekCompletedCallBack, (void *)this);
995 r = MapExceptionToResult(ret);
996 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_set_position operation with [0x%x]", GetErrorMessage(r), ret);
1004 _PlayerImpl::SeekTo(long msTime, bool accurate)
1006 result r = E_SUCCESS;
1007 int ret = ::PLAYER_ERROR_NONE;
1009 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
1011 ret = player_get_state(__hPlayer, &__corePlayerCurState);
1012 r = MapExceptionToResult(ret);
1013 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with 0x%x", GetErrorMessage(r), ret);
1015 SysTryReturn(NID_MEDIA, ((__corePlayerCurState == ::PLAYER_STATE_PLAYING ) || (__corePlayerCurState == ::PLAYER_STATE_PAUSED )
1016 || (__corePlayerCurState == ::PLAYER_STATE_READY )), E_INVALID_STATE, E_INVALID_STATE
1017 , "[E_INVALID_STATE] Player state is in an invalid state. Current state is %d", __corePlayerCurState);
1019 SysTryReturn(NID_MEDIA, msTime >= 0, r = E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The msTime is not greater than 0");
1021 ret = player_seek(__hPlayer, (int)msTime, accurate, PlayerSeekCompletedCallBack, (void *)this);
1022 r = MapExceptionToResult(ret);
1023 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_seek operation with [0x%x]", GetErrorMessage(r), ret);
1031 _PlayerImpl::SetVolume(int volume)
1033 result r = E_SUCCESS;
1034 int ret = ::PLAYER_ERROR_NONE;
1035 float mmVolumeVal = 0;
1037 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
1039 SysTryReturn(NID_MEDIA, volume >= MIN_PLAYER_VOLUME && volume <= MAX_PLAYER_VOLUME, E_OUT_OF_RANGE, E_OUT_OF_RANGE,
1040 "[E_OUT_OF_RANGE] Player volume (%d) is out of range.", volume);
1042 mmVolumeVal = (float) volume / 100;
1044 SysLog(NID_MEDIA, "Converted volume is [%f]", mmVolumeVal);
1045 if ((mmVolumeVal < _PLAYER_MIN_VOLUME) || (mmVolumeVal > _PLAYER_MAX_VOLUME))
1047 SysLog(NID_MEDIA, "[E_OUT_OF_RANGE] Player volume(%d) is out of range", volume);
1048 return E_OUT_OF_RANGE;
1051 ret = player_set_volume(__hPlayer, mmVolumeVal, mmVolumeVal);
1052 r = MapExceptionToResult(ret);
1053 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Failed to perform player_set_volume operation with - 0x%x", GetErrorMessage(r), ret);
1055 __currentVolume = volume;
1060 _PlayerImpl::SetMute(bool mute)
1062 result r = E_SUCCESS;
1063 int ret = ::PLAYER_ERROR_NONE;
1065 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
1067 ret = player_set_mute(__hPlayer, mute);
1068 r = MapExceptionToResult(ret);
1069 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Failed to perform player_set_mute operation with 0x%x", GetErrorMessage(r), ret);
1076 _PlayerImpl::SetLooping(bool looping)
1078 result r = E_SUCCESS;
1079 int err = ::PLAYER_ERROR_NONE;
1081 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
1083 err = player_set_looping(__hPlayer, looping);
1084 r = MapExceptionToResult(err);
1085 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_set_looping operation with 0x%x", GetErrorMessage(r), err);
1086 __isLooped = looping;
1093 _PlayerImpl::SetRenderingBuffer(const Tizen::Graphics::BufferInfo& bufferInfo)
1095 result r = E_SUCCESS;
1096 int err = ::PLAYER_ERROR_NONE;
1097 const _BufferInfoImpl* pbufferInfoImpl = NULL;
1099 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
1101 PlayerState checkPlayerState = GetState();
1103 NID_MEDIA, checkPlayerState == PLAYER_STATE_PLAYING || checkPlayerState == PLAYER_STATE_OPENED
1104 || checkPlayerState == PLAYER_STATE_ENDOFCLIP || checkPlayerState == PLAYER_STATE_STOPPED
1105 || checkPlayerState == PLAYER_STATE_PAUSED , E_INVALID_STATE, E_INVALID_STATE,
1106 "[E_INVALID_STATE] Player state is in an invalid state.");
1108 // Set the canvas to subsystem's player
1109 pbufferInfoImpl = _BufferInfoImpl::GetInstance(bufferInfo);
1110 SysTryCatch(NID_MEDIA, pbufferInfoImpl != NULL, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pbufferInfoImpl is not valid");
1111 __orientation = (Orientation)(pbufferInfoImpl->GetOrientation());
1113 // Set an available handler.
1114 if (pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION))
1116 __hCanvas = pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION);
1117 __handleType = _BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION;
1119 else if (pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_VE_SURFACE))
1121 __hCanvas = pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_VE_SURFACE);
1122 __handleType = _BufferInfoImpl::HANDLE_TYPE_VE_SURFACE;
1125 // handle is invalid
1127 __handleType = _BufferInfoImpl::HANDLE_TYPE_NONE;
1130 SysTryCatch(NID_MEDIA, __hCanvas != 0, r = E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. BufferInfo is not valid.");
1132 if (__handleType != _BufferInfoImpl::HANDLE_TYPE_VE_SURFACE)
1134 SysLog(NID_MEDIA, "PLAYER_DISPLAY_TYPE_X11");
1135 err = player_set_display(__hPlayer, PLAYER_DISPLAY_TYPE_X11, (player_display_h) __hCanvas);
1138 SysLog(NID_MEDIA, "PLAYER_DISPLAY_TYPE_EVAS");
1139 err = player_set_display(__hPlayer, PLAYER_DISPLAY_TYPE_EVAS, (player_display_h) __hCanvas);
1142 r = MapExceptionToResult(err);
1143 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_set_display operation with 0x%x", GetErrorMessage(r), err);
1145 err = player_set_display_mode(__hPlayer, PLAYER_DISPLAY_MODE_FULL_SCREEN);
1146 r = MapExceptionToResult(err);
1147 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "%s error has been occurred. Failed to perform player_set_display_mode operation with - 0x%x", GetErrorMessage(r), err);
1154 _PlayerImpl::CaptureVideo(void)
1156 result r = E_SUCCESS;
1157 int ret = ::PLAYER_ERROR_NONE;
1158 bool playbackFlag = false;
1160 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
1162 SysTryReturn(NID_MEDIA, __videoEventCreated == true , E_INVALID_STATE, E_INVALID_STATE,
1163 "[E_INVALID_STATE] Player state is in an invalid without the video event listener");
1165 ret = player_get_state(__hPlayer, &__corePlayerCurState);
1166 r = MapExceptionToResult(ret);
1167 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x state - %d", GetErrorMessage(r), ret, __corePlayerCurState);
1168 SysTryReturn(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_READY , E_INVALID_STATE, E_INVALID_STATE,
1169 "mmPlayer state is in an invalid state. Current state is %d", __corePlayerCurState);
1171 __isStateChangeForVideoCapture = true;
1173 ret = player_set_volume(__hPlayer,0.0,0.0);
1174 r = MapExceptionToResult(ret);
1175 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_set_volume operation with - 0x%x", GetErrorMessage(r), ret);
1177 ret = player_start(__hPlayer);
1178 r = MapExceptionToResult(ret);
1179 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_start operation with - 0x%x", GetErrorMessage(r), ret);
1180 playbackFlag = true;
1182 ret = player_get_state(__hPlayer, &__corePlayerCurState);
1183 r = MapExceptionToResult(ret);
1184 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x ", GetErrorMessage(r), ret);
1185 SysTryReturn(NID_MEDIA, (__corePlayerCurState == ::PLAYER_STATE_PLAYING), E_INVALID_STATE, E_INVALID_STATE,
1186 "[E_INVALID_STATE] mmPlayer state is in an invalid state. Current state is %d", __corePlayerCurState);
1187 SysLog(NID_MEDIA, "player_state is %d ", __corePlayerCurState);
1189 ret = player_capture_video(__hPlayer, PlayerVideoCapturedCallBack, (void*)this);
1190 r = MapExceptionToResult(ret);
1191 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform CaptureVideoInternal operation with 0x%x", GetErrorMessage(r), ret);
1196 ret = player_stop(__hPlayer);
1197 r = MapExceptionToResult(ret);
1198 SysTryLog(NID_MEDIA,r==E_SUCCESS, "[%s] Failed to perform player_stop operation with - 0x%x ", GetErrorMessage(r), ret);
1200 r = SetVolume(__currentVolume);
1201 SysTryLog(NID_MEDIA,r == E_SUCCESS, "[%s] Propagating ", GetErrorMessage(r));
1203 playbackFlag = false;
1205 __isStateChangeForVideoCapture = false;
1206 SysLog(NID_MEDIA, "__isStateChangeForVideoCapture is %d",__isStateChangeForVideoCapture);
1210 //Internal Functions
1213 _PlayerImpl::SetSystemBitPerPixel(int PixelFormat)
1215 if (PixelFormat == _PLAYER_IMPL_VIDEO_PIXEL_SIZE_RGB565)
1217 __videoPixelFormat = BITMAP_PIXEL_FORMAT_RGB565;
1221 __videoPixelFormat = BITMAP_PIXEL_FORMAT_ARGB8888;
1227 _PlayerImpl::SendEvent(_PlayerEventType eventType, int value)
1229 result r = E_SUCCESS;
1230 if (eventType == _PLAYER_EVENT_BUFFERING )
1232 _PlayerStreamingEventArg* pPlayerStreamingEventArg = new (std::nothrow) _PlayerStreamingEventArg;
1233 if (pPlayerStreamingEventArg == null)
1237 pPlayerStreamingEventArg->SetEventType(_PLAYER_EVENT_BUFFERING);
1238 pPlayerStreamingEventArg->SetPercent(value);
1241 r = __pPlayerEvent->FireAsync(*pPlayerStreamingEventArg);
1242 SysLog(NID_MEDIA, "eventType is %d in _PlayerImpl::SendEvent.", eventType);
1245 delete pPlayerStreamingEventArg;
1249 else if (eventType == _PLAYER_EVENT_ERROR )
1251 _PlayerErrorArg* pPlayerErrorArg = new (std::nothrow) _PlayerErrorArg;
1252 if (pPlayerErrorArg == null)
1256 pPlayerErrorArg->SetEventType(_PLAYER_EVENT_ERROR);
1257 pPlayerErrorArg->SetError((PlayerErrorReason) value);
1259 r = __pPlayerEvent->FireAsync(*pPlayerErrorArg);
1260 SysLog(NID_MEDIA, "eventType is %d in PlayInternaler::SendEvent.", eventType);
1263 delete pPlayerErrorArg;
1270 _PlayerEventArg* pPlayerEventArg = new (std::nothrow) _PlayerEventArg;
1271 if (pPlayerEventArg == null)
1275 pPlayerEventArg->SetEventType(eventType);
1276 pPlayerEventArg->SetResult((result) value);
1278 r = __pPlayerEvent->FireAsync(*pPlayerEventArg);
1279 SysLog(NID_MEDIA, "eventType is %d in PlayInternaler::SendEvent.", eventType);
1282 delete pPlayerEventArg;
1290 _PlayerImpl::SendCapturedVideoFrame(_PlayerVideoEventType event, void* pStream, int streamSize, int width, int height, result r)
1292 result result = E_SUCCESS;
1293 Tizen::Graphics::Dimension dimension(0, 0);
1295 _PlayerVideoEventArg* pPlayerVideoEventArg = new (std::nothrow) _PlayerVideoEventArg;
1296 SysTryReturn(NID_MEDIA, pPlayerVideoEventArg, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. pPlayerVideoEventArg is null.");
1298 if (event == _PLAYER_VIDEO_EVENT_DECODED)
1300 dimension.width = width;
1301 dimension.height = height;
1303 pData = new (std::nothrow) byte[streamSize];
1304 SysTryCatch(NID_MEDIA, pData != null, , r = E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. pData is null.");
1305 memcpy(pData, pStream, streamSize);
1307 pPlayerVideoEventArg->SetVideoEventType(_PLAYER_VIDEO_EVENT_DECODED);
1308 pPlayerVideoEventArg->SetBuffer((byte*) pData);
1309 pPlayerVideoEventArg->SetSizeOfBuffer((int) streamSize);
1310 pPlayerVideoEventArg->SetDim(dimension);
1311 pPlayerVideoEventArg->SetPixelFormat(__videoPixelFormat);
1312 pPlayerVideoEventArg->SetResult(r);
1313 result = __pPlayerVideoEvent->FireAsync(*pPlayerVideoEventArg);
1314 SysTryCatch(NID_MEDIA, result == E_SUCCESS, , result, "[%s] Propagating", GetErrorMessage(r));
1316 else if (event == _PLAYER_VIDEO_EVENT_ERROR )
1318 pPlayerVideoEventArg->SetVideoEventType(_PLAYER_VIDEO_EVENT_ERROR);
1319 pPlayerVideoEventArg->SetResult(r);
1320 result = __pPlayerVideoEvent->FireAsync(*pPlayerVideoEventArg);
1321 SysTryCatch(NID_MEDIA, result == E_SUCCESS, , result, "[%s] Propagating", GetErrorMessage(r));
1323 else if (event == _PLAYER_VIDEO_EVENT_DECODED_WITHOUT_DATA )
1325 pPlayerVideoEventArg->SetVideoEventType(_PLAYER_VIDEO_EVENT_DECODED_WITHOUT_DATA);
1326 pPlayerVideoEventArg->SetResult(r);
1327 result = __pPlayerVideoEvent->FireAsync(*pPlayerVideoEventArg);
1328 SysTryCatch(NID_MEDIA, result == E_SUCCESS, , result, "[%s] Propagating", GetErrorMessage(r));
1332 SysTryCatch(NID_MEDIA, false, , E_SYSTEM, "[E_SYSTEM] A system error has been occured.");
1341 if (pPlayerVideoEventArg)
1343 delete pPlayerVideoEventArg;
1344 pPlayerVideoEventArg = null;
1352 _PlayerImpl::CreatePlayerAndSetCallBack(void)
1354 result r = E_SUCCESS;
1355 int err = ::PLAYER_ERROR_NONE;
1357 err = player_create(&__hPlayer);
1358 r = MapExceptionToResult(err);
1360 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "player_create failed");
1362 err = player_set_completed_cb(__hPlayer, PlayerCompletedCallBack, (void *)this);
1363 SysTryCatch(NID_MEDIA, err == ::PLAYER_ERROR_NONE, r = E_SYSTEM,E_SYSTEM,
1364 "[E_SYSTEM] A system error has been occurred. Failed to perform player_set_completed_cb operation.");
1366 err = player_set_interrupted_cb(__hPlayer, PlayerInterruptedCallBack, (void *)this);
1367 SysTryCatch(NID_MEDIA, err == ::PLAYER_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
1368 "[E_SYSTEM] A system error has been occurred. Failed to perform player_set_interrupted_cb operation.");
1370 err = player_set_error_cb(__hPlayer, PlayerErrorCallBack, (void *)this);
1371 SysTryCatch(NID_MEDIA, err == ::PLAYER_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
1372 "[E_SYSTEM] A system error has been occurred. Failed to perform player_set_error_cb operation.");
1374 if (__videoEventCreated)
1376 err = player_set_video_frame_decoded_cb(__hPlayer, PlayerVideoFrameDecodedCallBack, (void *)this);
1377 SysTryCatch(NID_MEDIA, err == ::PLAYER_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
1378 "[E_SYSTEM] A system error has been occurred. Failed to perform player_video_frame_decoded_cb operation");
1382 player_destroy(__hPlayer);
1387 //Tizen->Osp Error Code conversion
1389 _PlayerImpl::MapExceptionToPlayerErrorReason(int reason)
1391 //All the fall through are intentional
1395 case ::PLAYER_ERROR_NONE:
1396 return PLAYER_ERROR_NONE;
1400 case ::PLAYER_ERROR_OUT_OF_MEMORY:
1401 return PLAYER_ERROR_OUT_OF_MEMORY;
1405 case ::PLAYER_ERROR_INVALID_PARAMETER:
1408 case ::PLAYER_ERROR_INVALID_URI:
1410 //Not supported file format
1411 case ::PLAYER_ERROR_NOT_SUPPORTED_FILE:
1413 //No such file or directory
1414 case ::PLAYER_ERROR_NO_SUCH_FILE:
1415 return PLAYER_ERROR_INVALID_DATA;
1418 //Streaming connection failed
1419 case ::PLAYER_ERROR_CONNECTION_FAILED:
1420 return PLAYER_ERROR_CONNECTION_LOST;
1423 case ::PLAYER_ERROR_DRM_EXPIRED:
1424 return PLAYER_ERROR_RIGHT_EXPIRED;
1427 case ::PLAYER_ERROR_DRM_NO_LICENSE:
1428 return PLAYER_ERROR_RIGHT_NO_LICENSE;
1431 case ::PLAYER_ERROR_DRM_FUTURE_USE:
1432 return PLAYER_ERROR_RIGHT_FUTURE_USE;
1435 case ::PLAYER_ERROR_DRM_NOT_PERMITTED:
1436 return PLAYER_ERROR_DISPLAY_RIGHT_VIOLATED;
1439 //Sound policy error
1440 case ::PLAYER_ERROR_SOUND_POLICY:
1442 //Video capture failure
1443 case ::PLAYER_ERROR_VIDEO_CAPTURE_FAILED:
1446 case ::PLAYER_ERROR_INVALID_OPERATION:
1448 //Seek operation failure
1449 case ::PLAYER_ERROR_SEEK_FAILED:
1452 case ::PLAYER_ERROR_INVALID_STATE:
1455 return PLAYER_ERROR_DEVICE_FAILED;
1461 _PlayerImpl::MapExceptionToResult(int reason)
1463 //All the fall through are intentional
1467 case ::PLAYER_ERROR_NONE:
1471 case ::PLAYER_ERROR_OUT_OF_MEMORY:
1472 return E_OUT_OF_MEMORY;
1475 case ::PLAYER_ERROR_INVALID_PARAMETER:
1476 return E_INVALID_ARG;
1478 //No such file or directory
1479 case ::PLAYER_ERROR_NO_SUCH_FILE:
1480 return E_FILE_NOT_FOUND;
1483 case ::PLAYER_ERROR_INVALID_OPERATION:
1487 case ::PLAYER_ERROR_INVALID_STATE:
1488 return E_INVALID_STATE;
1490 //Not supported file format
1491 case ::PLAYER_ERROR_NOT_SUPPORTED_FILE:
1492 return E_UNSUPPORTED_FORMAT;
1495 case ::PLAYER_ERROR_INVALID_URI:
1496 return E_FILE_NOT_FOUND;
1498 //Sound policy error
1499 case ::PLAYER_ERROR_SOUND_POLICY:
1500 return E_DEVICE_BUSY;
1502 //Streaming connection failed
1503 case ::PLAYER_ERROR_CONNECTION_FAILED:
1504 return E_CONNECTION_FAILED;
1507 //Seek operation failure
1508 case ::PLAYER_ERROR_SEEK_FAILED:
1509 return E_INVALID_DATA;
1511 //Video capture failure
1512 case ::PLAYER_ERROR_VIDEO_CAPTURE_FAILED:
1513 return E_OPERATION_FAILED;
1516 case ::PLAYER_ERROR_DRM_EXPIRED:
1517 return E_RIGHT_EXPIRED;
1520 case ::PLAYER_ERROR_DRM_NO_LICENSE:
1521 return E_RIGHT_NO_LICENSE;
1524 case ::PLAYER_ERROR_DRM_FUTURE_USE:
1525 return E_RIGHT_FUTURE_USE;
1528 case ::PLAYER_ERROR_DRM_NOT_PERMITTED:
1529 return E_DISPLAY_RIGHT_VIOLATED;
1540 _PlayerImpl::PlayerPreparedCallBack(void *pUserData)
1542 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1543 _PlayerImpl *pPlayerImpl = (_PlayerImpl *)pUserData;
1544 pPlayerImpl->HandlePlayerPrepared(0);
1548 _PlayerImpl::PlayerCompletedCallBack(void *pUserData)
1550 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1551 _PlayerImpl *pPlyarImpl = (_PlayerImpl *)pUserData;
1552 pPlyarImpl->HandlePlayerCompleted();
1556 _PlayerImpl::PlayerInterruptedCallBack(player_interrupted_code_e code, void *pUserData)
1558 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1559 _PlayerImpl *pPlyarImpl = (_PlayerImpl *)pUserData;
1562 case PLAYER_INTERRUPTED_COMPLETED:
1563 // Interrupt completed
1564 if (!(pPlyarImpl->__interruptFlag))
1566 pPlyarImpl->HandlePlayerReleased();
1568 pPlyarImpl->__interruptFlag = false;
1570 case PLAYER_INTERRUPTED_BY_CALL:
1571 //Interrupted by incoming call
1572 //Intentional fall through
1573 pPlyarImpl->__interruptFlag = true;
1574 case PLAYER_INTERRUPTED_BY_MEDIA:
1575 //Interrupted by another application
1576 //Intentional fall through
1577 case PLAYER_INTERRUPTED_BY_RESOURCE_CONFLICT:
1578 //Interrupted by resource conflict
1579 //Intentional fall through
1580 case PLAYER_INTERRUPTED_BY_EARJACK_UNPLUG:
1581 //Interrupted by earjack unplug
1582 pPlyarImpl->HandlePlayerAudioFocusChanged();
1584 case PLAYER_INTERRUPTED_BY_EMERGENCY:
1585 //Interrupted by emergency
1586 //Intentional fall through
1587 case PLAYER_INTERRUPTED_BY_ALARM:
1588 //Interrupted by alarm
1589 case PLAYER_INTERRUPTED_BY_RESUMABLE_MEDIA:
1590 //Interrupted by resumable media
1591 pPlyarImpl->HandlePlayerInterrupted();
1594 SysLog(NID_MEDIA, "Player interrupt is not set.");
1599 _PlayerImpl::PlayerErrorCallBack(int errorCode, void *pUserData)
1601 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1602 _PlayerImpl *pPlayerImpl = (_PlayerImpl *)pUserData;
1604 ((errorCode == ::PLAYER_ERROR_DRM_EXPIRED) ||
1605 (errorCode == ::PLAYER_ERROR_DRM_NO_LICENSE) ||
1606 (errorCode == ::PLAYER_ERROR_DRM_FUTURE_USE) ||
1607 (errorCode == ::PLAYER_ERROR_NOT_SUPPORTED_FILE) ||
1608 (errorCode == ::PLAYER_ERROR_INVALID_URI) ||
1609 (errorCode == ::PLAYER_ERROR_NO_SUCH_FILE) ||
1610 (errorCode == ::PLAYER_ERROR_CONNECTION_FAILED) ||
1611 (errorCode == ::PLAYER_ERROR_DRM_NOT_PERMITTED))
1613 (pPlayerImpl->__isAsync == true)
1615 (pPlayerImpl->__currentState == PLAYER_STATE_OPENING)
1618 pPlayerImpl->HandlePlayerPrepared(errorCode);
1622 pPlayerImpl->HandlePlayerError(errorCode);
1626 _PlayerImpl::PlayerBufferingCallBack(int percent, void *pUserData)
1628 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1629 SysTryReturn(NID_MEDIA, percent >= 0 && percent <= 100, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. percent (%d) is out of range- %d",percent);
1630 _PlayerImpl *pPlyarImpl = (_PlayerImpl *)pUserData;
1631 pPlyarImpl->HandlePlayerBuffering(percent);
1634 _PlayerImpl::PlayerSubtitleUpdatedCallBack(unsigned long duration, char *pText, void *pUserData)
1636 SysLog(NID_MEDIA, "PlayerSubtitleUpdatedCallBack has started.");
1639 _PlayerImpl::PlayerVideoCapturedCallBack(unsigned char *pData, int width, int height, unsigned int size, void *pUserData)
1641 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1642 SysTryReturn(NID_MEDIA, pData, , E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. pData is null.");
1643 SysTryReturn(NID_MEDIA, width && height && size, , E_INVALID_ARG,
1644 "[E_INVALID_ARG] Invalid argument is used. hieght = %d or width = %d size = %d", width, height, size);
1645 _PlayerImpl *pPlyarImpl = (_PlayerImpl *)pUserData;
1646 pPlyarImpl->HandlePlayerVideoCaptured(pData, width , height, size);
1649 _PlayerImpl::PlayerVideoFrameDecodedCallBack(unsigned char *pData, int width, int height, unsigned int size, void *pUserData)
1651 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1652 SysTryReturn(NID_MEDIA, pData, , E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. pData is null.");
1653 SysTryReturn(NID_MEDIA, width && height && size, , E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. height = %d width = %d size = %d", width, height, size);
1654 _PlayerImpl *pPlyarImpl = (_PlayerImpl *)pUserData;
1655 pPlyarImpl->HandlePlayerVideoFrameDecoded(pData, width , height, size);
1658 _PlayerImpl::PlayerAudioFrameDecodedCallBack(unsigned char *pData, unsigned int size, void *pUserData)
1663 _PlayerImpl::PlayerSeekCompletedCallBack(void *pUserData)
1665 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1666 _PlayerImpl *pPlyarImpl = (_PlayerImpl *)pUserData;
1667 pPlyarImpl->HandlePlayerSeekCompleted();
1670 //This is used exclusively for End of stream handling
1672 _PlayerImpl::OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs)
1674 player_stop(__hPlayer);
1675 __currentState = PLAYER_STATE_ENDOFCLIP;
1676 SendEvent(_PLAYER_EVENT_ENDOFCLIP, 0);
1679 //Tizen Handle Functions
1681 _PlayerImpl::HandlePlayerPrepared(int errorCode)
1683 int err = ::PLAYER_ERROR_NONE;
1684 result r = E_SUCCESS;
1686 err = player_get_state(__hPlayer, &__corePlayerCurState);
1687 r = MapExceptionToResult(err);
1688 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), err);
1690 r = MapExceptionToResult(errorCode);
1693 __currentState = PLAYER_STATE_OPENED;
1697 SysLog(NID_MEDIA, "[%s] Failed to perform player_prepare_async with error code (%d).", GetErrorMessage(r), errorCode);
1698 __currentState = __preState;
1700 SendEvent(_PLAYER_EVENT_OPENED, r);
1704 _PlayerImpl::HandlePlayerCompleted(void)
1706 EventDrivenThread::SendUserEvent(0, null);
1710 _PlayerImpl::HandlePlayerError(int errorCode)
1712 __currentState = PLAYER_STATE_ERROR;
1713 SendEvent(_PLAYER_EVENT_ERROR, MapExceptionToPlayerErrorReason(errorCode));
1717 _PlayerImpl::HandlePlayerBuffering(int percent)
1719 SendEvent(_PLAYER_EVENT_BUFFERING, percent);
1723 _PlayerImpl::HandlePlayerVideoCaptured(unsigned char *pData, int width, int height, unsigned int size)
1725 SysLog(NID_MEDIA, "The current value of width is %d ", width);
1726 SysLog(NID_MEDIA, "The current value of height is %d", height);
1727 SysLog(NID_MEDIA, "The current value of size is %d", size);
1729 result r = E_SUCCESS;
1730 std::unique_ptr<byte[]> pOputPtr;
1732 int err = ::PLAYER_ERROR_NONE;
1734 r = SetVolume(__currentVolume);
1735 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating ", GetErrorMessage(r));
1737 err = player_get_state(__hPlayer, &__corePlayerCurState);
1738 r = MapExceptionToResult(err);
1739 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), err);
1741 if (__corePlayerCurState == ::PLAYER_STATE_PLAYING)
1743 err = player_pause(__hPlayer);
1744 r = MapExceptionToResult(err);
1745 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_pause operation with - 0x%x", GetErrorMessage(r), err);
1747 err = player_get_state(__hPlayer, &__corePlayerCurState);
1748 r = MapExceptionToResult(err);
1749 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), err);
1752 SysTryCatch(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_PAUSED, r = E_INVALID_STATE, E_INVALID_STATE,
1753 "[E_INVALID_STATE] Player state is in an invalid state. Current state is %d", __corePlayerCurState);
1756 SysTryCatch(NID_MEDIA, !((width == 0) || (height == 0)), r = E_INVALID_DATA, E_INVALID_DATA,
1757 ("[E_INVALID_DATA] A error has been occurred. width or height size is wrong !"));
1759 //send frame to video event listenner
1762 MediaPixelFormat srcFmt = MEDIA_PIXEL_FORMAT_RGB888;
1763 unsigned int frameSize = width*height*4;
1764 if (frameSize == size)
1766 srcFmt = MEDIA_PIXEL_FORMAT_BGRA8888;
1769 if (__videoPixelFormat == BITMAP_PIXEL_FORMAT_RGB565 )
1771 _ColorConverter cvt;
1772 // Converter construction
1773 r = cvt.Construct(srcFmt, width, height,
1774 MEDIA_PIXEL_FORMAT_RGB565LE, width, height);
1775 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1776 // Convert to output format
1777 pOputPtr.reset(cvt.ConvertN((byte *)pData, size, streamSize));
1778 r = GetLastResult();
1779 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1783 _ColorConverter cvt;
1784 r = cvt.Construct(srcFmt, width, height,
1785 MEDIA_PIXEL_FORMAT_BGRA8888, width, height);
1786 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1787 // Convert to output format
1788 pOputPtr.reset(cvt.ConvertN((byte *)pData, size, streamSize));
1789 r = GetLastResult();
1790 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1792 SysTryCatch(NID_MEDIA, pOputPtr.get(), r = E_INVALID_DATA, E_INVALID_DATA, "[E_INVALID_DATA] A error has been occurred. pOputPtr is null.");
1793 r = SendCapturedVideoFrame( _PLAYER_VIDEO_EVENT_DECODED, pOputPtr.get(), streamSize, width, height, E_SUCCESS);
1794 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s]Propagating", GetErrorMessage(r));
1798 r = SendCapturedVideoFrame( _PLAYER_VIDEO_EVENT_DECODED_WITHOUT_DATA, pData, size, width, height, E_SUCCESS);
1799 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s]Propagating", GetErrorMessage(r));
1801 __currentState = PLAYER_STATE_PAUSED;
1804 __isStateChangeForVideoCapture = false;
1805 SysLog(NID_MEDIA, "__isStateChangeForVideoCapture is %d",__isStateChangeForVideoCapture);
1809 _PlayerImpl::HandlePlayerVideoFrameDecoded(unsigned char *pData, int width, int height, unsigned int size)
1811 SysLog(NID_MEDIA, "The current value of width is %d ", width);
1812 SysLog(NID_MEDIA, "The current value of height is %d", height);
1813 SysLog(NID_MEDIA, "The current value of size is %d", size);
1815 result r = E_SUCCESS;
1816 if (__isStateChangeForVideoCapture)
1818 // caused by PlayerVideoCapturedCallBack()
1819 SysLog(NID_MEDIA, "Skip HandlePlayerVideoFrameDecoded()");
1824 r = SendCapturedVideoFrame( _PLAYER_VIDEO_EVENT_DECODED, pData, size, width, height, E_SUCCESS);
1825 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s]Propagating", GetErrorMessage(r));
1829 SendCapturedVideoFrame( _PLAYER_VIDEO_EVENT_DECODED_WITHOUT_DATA, pData, size, width, height, E_SUCCESS);
1830 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s]Propagating", GetErrorMessage(r));
1838 _PlayerImpl::HandlePlayerSeekCompleted(void)
1840 int err = ::PLAYER_ERROR_NONE;
1841 result r = E_SUCCESS;
1842 if (__pPlayerVideoEvent)
1844 err = player_get_state(__hPlayer, &__corePlayerCurState);
1845 r = MapExceptionToResult(err);
1846 SysLog(NID_MEDIA, "[%s] Player state is %d", GetErrorMessage(r), __corePlayerCurState);
1847 if (__corePlayerCurState == ::PLAYER_STATE_PAUSED)
1849 err = player_capture_video(__hPlayer, PlayerVideoCapturedCallBack, (void*)this);
1850 r = MapExceptionToResult(err);
1851 SysTryLog(NID_MEDIA, r == E_SUCCESS,"[%s] Failed to perform player_capture_video operation with 0x%x", GetErrorMessage(r), err);
1857 SendEvent(_PLAYER_EVENT_SEEKTO, r);
1861 SendEvent(_PLAYER_EVENT_SEEKTO, E_SYSTEM);
1866 _PlayerImpl::HandlePlayerInterrupted(void)
1868 int ret = ::PLAYER_ERROR_NONE;
1869 result r = E_SUCCESS;
1870 ret = player_get_state(__hPlayer, &__corePlayerCurState);
1871 r = MapExceptionToResult(ret);
1872 SysLog(NID_MEDIA, "[%s] Player state is %d", GetErrorMessage(r), __corePlayerCurState);
1873 if (__corePlayerCurState == ::PLAYER_STATE_PAUSED)
1875 SysLog(NID_MEDIA, "Setting player state to be paused");
1876 __currentState = PLAYER_STATE_PAUSED;
1877 SendEvent(_PLAYER_EVENT_INTERRUPTED, 0);
1879 else if (__corePlayerCurState == ::PLAYER_STATE_IDLE)
1881 SysLog(NID_MEDIA, "Setting player state to be Closed");
1882 __currentState = PLAYER_STATE_CLOSED;
1883 __isStreamingContent = false;
1884 __isOpenBuffer = false;
1885 __bufferDataSize = 0;
1887 SendEvent(_PLAYER_EVENT_INTERRUPTED, 0);
1891 SysLog(NID_MEDIA, "player state is %d so sending error", __currentState);
1892 ret = player_stop(__hPlayer);
1893 r = MapExceptionToResult(ret);
1894 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
1895 ret = player_unprepare(__hPlayer);
1896 r = MapExceptionToResult(ret);
1897 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
1898 __isStreamingContent = false;
1899 __isOpenBuffer = false;
1900 __bufferDataSize = 0;
1902 __currentState = PLAYER_STATE_ERROR;
1903 SendEvent(_PLAYER_EVENT_ERROR, PLAYER_ERROR_DEVICE_FAILED);
1908 _PlayerImpl::HandlePlayerAudioFocusChanged(void)
1910 int ret = ::PLAYER_ERROR_NONE;
1911 result r = E_SUCCESS;
1912 ret = player_get_state(__hPlayer, &__corePlayerCurState);
1913 r = MapExceptionToResult(ret);
1914 SysLog(NID_MEDIA, "[%s] Player state is - %d", GetErrorMessage(r), __corePlayerCurState);
1915 if (__corePlayerCurState == ::PLAYER_STATE_PAUSED)
1917 SysLog(NID_MEDIA, "Setting player state to be paused");
1918 __currentState = PLAYER_STATE_PAUSED;
1919 SendEvent(_PLAYER_EVENT_AUDIO_FOCUS_CHANGED, 0);
1921 else if (__corePlayerCurState == ::PLAYER_STATE_IDLE)
1923 SysLog(NID_MEDIA, "Setting player state to be Closed");
1924 __currentState = PLAYER_STATE_CLOSED;
1925 __isStreamingContent = false;
1926 __isOpenBuffer = false;
1927 __bufferDataSize = 0;
1929 SendEvent(_PLAYER_EVENT_AUDIO_FOCUS_CHANGED, 0);
1933 SysLog(NID_MEDIA, "player state is %d so sending error", __currentState);
1934 ret = player_stop(__hPlayer);
1935 r = MapExceptionToResult(ret);
1936 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
1937 ret = player_unprepare(__hPlayer);
1938 r = MapExceptionToResult(ret);
1939 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
1940 __isStreamingContent = false;
1941 __isOpenBuffer = false;
1942 __bufferDataSize = 0;
1944 __currentState = PLAYER_STATE_ERROR;
1945 SendEvent(_PLAYER_EVENT_ERROR, PLAYER_ERROR_DEVICE_FAILED);
1950 _PlayerImpl::HandlePlayerReleased(void)
1952 SendEvent(_PLAYER_EVENT_RELEASED, 0);
1956 _PlayerImpl::ConvertAudioCodec(char *pAudioCodec)
1958 if (!String::Compare(String(pAudioCodec), String("MPEG 1 Audio, Layer 3 (MP3)")))
1962 if (!String::Compare(String(pAudioCodec), String("MPEG 3 Audio, Layer 3 (MP3)")))
1966 if (!String::Compare(String(pAudioCodec),String("AAC")))
1970 if (!String::Compare(String(pAudioCodec),String("MPEG-4 AAC audio")))
1974 if (!String::Compare(String(pAudioCodec), String("Adaptive Multi Rate (AMR)")))
1976 return CODEC_AMR_NB;
1978 if (!String::Compare(String(pAudioCodec), String("AMR")))
1980 return CODEC_AMR_NB;
1982 if (!String::Compare(String(pAudioCodec), String("AMR audio")))
1984 return CODEC_AMR_NB;
1986 if (!String::Compare(String(pAudioCodec), String("WMA")))
1990 if (!String::Compare(String(pAudioCodec), String("WMA Version 8")))
1994 if (!String::Compare(String(pAudioCodec), String("WMA Version 9")))
1998 if (!String::Compare(String(pAudioCodec), String("Uncompressed 16-bit PCM audio")))
2002 if (!String::Compare(String(pAudioCodec), String("MIDI")))
2006 return CODEC_UNKNOWN;
2010 _PlayerImpl::ConvertVideoCodec(char *pVideoCodec)
2012 if (!String::Compare(String(pVideoCodec),String( "H263")))
2016 if (!String::Compare(String(pVideoCodec),String( "H.263")))
2020 if (!String::Compare(String(pVideoCodec), String("MPEG-4 video")))
2024 if (!String::Compare(String(pVideoCodec),String( "H.264 / AVC")))
2028 if (!String::Compare(String(pVideoCodec),String( "Microsoft Windows Media 9")))
2032 if (!String::Compare(String(pVideoCodec),String( "THEORA")))
2034 return CODEC_THEORA;
2036 return CODEC_UNKNOWN;
2041 _PlayerImpl::GetCurrentMediaStreamInfoN()
2043 result r = E_SUCCESS;
2044 int err = ::PLAYER_ERROR_NONE;
2045 MediaStreamInfo* pMediaStreamInfo = null;
2046 Tizen::Base::Collection::IList* pAudioList = null;
2047 Tizen::Base::Collection::IList* pVideoList = null;
2048 AudioStreamInfo* pAudioStream = null;
2049 VideoStreamInfo* pVideoStream = null;
2050 result audioStreamException = E_SUCCESS;
2051 result videoStreamException = E_SUCCESS;
2058 char *pToCollect = null;
2059 int sizeArtWork = 0;
2061 ByteBuffer* pImageByteBuffer = null;
2062 char* pAudioCodec = null;
2063 char* pVideoCodec = null;
2065 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
2067 err = player_get_state(__hPlayer, &__corePlayerCurState);
2068 r = MapExceptionToResult(err);
2069 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with 0x%x ", GetErrorMessage(r), err);
2071 SysTryCatch(NID_MEDIA, (__corePlayerCurState == ::PLAYER_STATE_PLAYING) || (__corePlayerCurState == ::PLAYER_STATE_PAUSED) || (__corePlayerCurState == ::PLAYER_STATE_READY) ,
2072 r = E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. Current state is %d", __corePlayerCurState);
2074 err = player_get_codec_info(__hPlayer, &pAudioCodec, &pVideoCodec);
2075 SysTryCatch(NID_MEDIA, err == ::PLAYER_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
2076 "[E_SYSTEM] A system error has been occurred. Failed to perform player_get_codec_info operation with 0x%x", err);
2078 pAudioList = new (std::nothrow) Tizen::Base::Collection::ArrayList();
2079 if (pAudioList && String::Compare(String(pAudioCodec),(String("unknown"))))
2081 SysLog(NID_MEDIA, "Audio Codec is %s",pAudioCodec);
2082 AudioChannelType channel = AUDIO_CHANNEL_TYPE_NONE;
2083 CodecType codec = CODEC_UNKNOWN;
2085 int samplingRate = 0;
2087 err = player_get_audio_stream_info(__hPlayer, &samplingRate, &channels, &bitrate);
2088 if (err != ::PLAYER_ERROR_NONE)
2090 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_audio_stream_info operation with 0x%x", err);
2096 channel = AUDIO_CHANNEL_TYPE_MONO;
2098 else if (channels == 2 )
2100 channel = AUDIO_CHANNEL_TYPE_STEREO;
2102 //Reserved for Audio CodecCodec
2103 codec = ConvertAudioCodec(pAudioCodec);
2104 SysLog(NID_MEDIA, "Channel is %d , bitrate is %d , sampling rate is %d, Codec is %d.",channel, bitrate, samplingRate, codec);
2105 pAudioStream = new (std::nothrow) Tizen::Media::AudioStreamInfo(codec, bitrate, samplingRate, channel);
2106 pAudioList->Add(*pAudioStream);
2114 pVideoList = new (std::nothrow) Tizen::Base::Collection::ArrayList();
2115 if (pVideoList && *pVideoCodec != '\0')
2117 CodecType codec = CODEC_UNKNOWN;
2122 SysLog(NID_MEDIA, "Video Codec is %s",pVideoCodec);
2124 err = player_get_video_size(__hPlayer, &width, &height);
2125 if (err != ::PLAYER_ERROR_NONE)
2127 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_video_size operation with 0x%x", err);
2131 err = player_get_video_stream_info(__hPlayer, &frameRate, &bitrate);
2132 if (err != ::PLAYER_ERROR_NONE)
2134 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_video_stream_info operation with 0x%x", err);
2138 codec = ConvertVideoCodec(pVideoCodec);
2139 SysLog(NID_MEDIA, "bitrate is %d, frame rate is %d, width is %d, height is %d, Codec is %d ",bitrate, frameRate, width, height, codec);
2140 float frameRateFloat = frameRate * 1.0;
2141 pVideoStream = new (std::nothrow) Tizen::Media::VideoStreamInfo(codec, width, height, bitrate, frameRateFloat);
2142 pVideoList->Add(*pVideoStream);
2151 //Obtain the Tag info
2152 err = player_get_content_info(__hPlayer, PLAYER_CONTENT_INFO_ARTIST, &pToCollect);
2153 if (err != ::PLAYER_ERROR_NONE)
2155 SysLog(NID_MEDIA, "Failed to perform player_get_content_info operation with 0x%x", err);
2157 else if (pToCollect)
2159 SysTryLog(NID_MEDIA, false, "Artist is %s ", pToCollect);
2160 strArtist.Append(pToCollect);
2164 err = player_get_content_info(__hPlayer, PLAYER_CONTENT_INFO_TITLE, &pToCollect);
2165 if (err != ::PLAYER_ERROR_NONE)
2167 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_content_info operation with 0x%x", err);
2169 else if (pToCollect)
2171 SysLog(NID_MEDIA, "Title is %s ", pToCollect);
2172 strTitle.Append(pToCollect);
2176 err = player_get_content_info(__hPlayer, PLAYER_CONTENT_INFO_ALBUM, &pToCollect);
2177 if (err != ::PLAYER_ERROR_NONE)
2179 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_content_info operation with 0x%x", err);
2181 else if (pToCollect)
2183 SysLog(NID_MEDIA, "Album is %s ", pToCollect);
2184 strAlbum.Append(pToCollect);
2188 err = player_get_content_info(__hPlayer, PLAYER_CONTENT_INFO_GENRE, &pToCollect);
2189 if (err != ::PLAYER_ERROR_NONE)
2191 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_content_info operation with 0x%x", err);
2193 else if (pToCollect)
2195 SysLog(NID_MEDIA, "Genre is %s ", pToCollect);
2196 strGenre.Append(pToCollect);
2200 err = player_get_content_info(__hPlayer, PLAYER_CONTENT_INFO_AUTHOR, &pToCollect);
2201 if (err != ::PLAYER_ERROR_NONE)
2203 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_content_info operation with 0x%x", err);
2205 else if (pToCollect)
2207 SysLog(NID_MEDIA, "Author is %s ", pToCollect);
2208 strAuthor.Append(pToCollect);
2212 err = player_get_content_info(__hPlayer, PLAYER_CONTENT_INFO_YEAR, &pToCollect);
2213 if (err != ::PLAYER_ERROR_NONE)
2215 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_content_info operation with 0x%x", err);
2217 else if (pToCollect)
2219 year = atoi(pToCollect);
2220 SysLog(NID_MEDIA, "Year is %d ", year);
2225 err = player_get_album_art(__hPlayer, (void **)&pToCollect, &sizeArtWork);
2226 if (err != ::PLAYER_ERROR_NONE)
2228 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_album_art operation with 0x%x", err);
2230 else if (pToCollect && sizeArtWork > 0)
2232 SysLog(NID_MEDIA, "there is art work so packing that in bytebuffer size of the ArtWork is %d", sizeArtWork);
2233 pImageByteBuffer = new (std::nothrow) ByteBuffer;
2234 if (pImageByteBuffer)
2236 pImageByteBuffer->Construct(sizeArtWork);
2237 pImageByteBuffer->SetArray((const byte *) pToCollect, 0, sizeArtWork);
2238 pImageByteBuffer->Flip();
2242 pMediaStreamInfo = new (std::nothrow) MediaStreamInfo(strTitle, strArtist, strAlbum,
2243 strGenre, year, pImageByteBuffer,
2244 pAudioList, pVideoList, audioStreamException, videoStreamException);
2247 return pMediaStreamInfo;
2261 _PlayerImpl::SetAudioStreamType(AudioStreamType type)
2263 result r = E_SUCCESS;
2264 int ret = ::PLAYER_ERROR_NONE;
2266 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
2268 SysTryReturn(NID_MEDIA, type != AUDIO_STREAM_TYPE_NO_SOUND , E_INVALID_ARG, E_INVALID_ARG,
2269 "Invalid argument is used. AudioStream type = %d", type);
2271 ret = player_set_sound_type(__hPlayer, _AudioManagerConvert::ConvertAudioStreamType2SoundType(type));
2272 r = MapExceptionToResult(ret);
2273 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_set_sound_type operation with 0x%x", GetErrorMessage(r), ret);
2280 _PlayerImpl::OpenUrlAsync(const Tizen::Base::String& url, const Tizen::Base::Collection::IMap* pHeader)
2282 result r = E_SUCCESS;
2284 int err = ::PLAYER_ERROR_NONE;
2285 Tizen::Base::String scheme;
2286 bool containsCookie = false;
2287 bool containsUserAgent = false;
2288 std::unique_ptr<const String> pCookieValue;
2289 std::unique_ptr<const String> pUserAgentValue;
2290 std::unique_ptr<char[]> pCookieChars;
2291 std::unique_ptr<char[]> pUsetAgentChars;
2292 std::unique_ptr<char[]> pInputFilePath;
2294 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
2296 err = player_get_state(__hPlayer, &__corePlayerCurState);
2297 r = MapExceptionToResult(err);
2298 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_getstate operation with - 0x%x", GetErrorMessage(r), err);
2300 SysTryReturn(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_IDLE,
2301 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. returned state is %d", __corePlayerCurState);
2303 SysTryReturn(NID_MEDIA, !url.IsEmpty(), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. Input url is empty");
2307 r = url.SubString(0, 4, scheme);
2308 SysTryReturn(NID_MEDIA, r == E_SUCCESS, E_UNSUPPORTED_PROTOCOL , E_UNSUPPORTED_PROTOCOL, "[%s] Failed to perform SubString operation", GetErrorMessage(E_UNSUPPORTED_PROTOCOL));
2309 SysTryReturn(NID_MEDIA, scheme.Equals(L"http", false), E_UNSUPPORTED_PROTOCOL, E_UNSUPPORTED_PROTOCOL, "[E_UNSUPPORTED_PROTOCOL] error has been occurred.");
2311 const HashMap *pMapHeader = dynamic_cast<const HashMap *>(pHeader);
2312 SysTryCatch(NID_MEDIA, pMapHeader != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred.");
2313 pMapHeader->ContainsKey(String("Cookie"), containsCookie);
2316 SysLogException(NID_MEDIA, r, "[%s] Failed to perform HashMap::ContainsKey operation", GetErrorMessage(r));
2318 else if (containsCookie)
2320 pCookieValue.reset(dynamic_cast<const String *>(pMapHeader->GetValue(String("Cookie"))));
2323 pCookieChars.reset(_StringConverter::CopyToCharArrayN(*(pCookieValue.get())));
2324 if (pCookieChars.get())
2326 err = player_set_streaming_cookie(__hPlayer, pCookieChars.get(),pCookieValue->GetLength());
2331 r = GetLastResult();
2332 SysLogException(NID_MEDIA, r, "[%s]Failed to perform HashMap::GetValue(Cookie) operation.", GetErrorMessage(r));
2335 pMapHeader->ContainsKey(String("User-Agent"), containsUserAgent);
2338 SysLogException(NID_MEDIA, r, "[%s]Failed to perform HashMap::ContainsKey operation.", GetErrorMessage(r));
2340 else if (containsUserAgent)
2342 pUserAgentValue.reset(dynamic_cast<const String *>(pMapHeader->GetValue(String("User-Agent"))));
2343 if (pUserAgentValue.get())
2345 pUsetAgentChars.reset(_StringConverter::CopyToCharArrayN(*(pUserAgentValue.get())));
2346 err = player_set_streaming_cookie(__hPlayer, pUsetAgentChars.get(),pUserAgentValue->GetLength());
2350 r = GetLastResult();
2351 SysLogException(NID_MEDIA, r, "[%s] Failed to perform HashMap::GetValue(User-Agent) operation.", GetErrorMessage(r));
2357 r = url.SubString(0, 4, scheme);
2358 SysTryReturn(NID_MEDIA, r == E_SUCCESS, E_UNSUPPORTED_PROTOCOL , E_UNSUPPORTED_PROTOCOL, "[%s] Failed to perform SubString operation", GetErrorMessage(E_UNSUPPORTED_PROTOCOL));
2359 SysTryReturn(NID_MEDIA, (scheme.Equals(L"rtsp", false) || scheme.Equals(L"http", false)), E_UNSUPPORTED_PROTOCOL, E_UNSUPPORTED_PROTOCOL, "[E_UNSUPPORTED_PROTOCOL] error has been occurred.");
2362 pInputFilePath.reset(_StringConverter::CopyToCharArrayN(url));
2364 __isStreamingContent = true;
2365 __preState = __currentState;
2366 __currentState = PLAYER_STATE_OPENING;
2368 r = OpenInputData(std::move(pInputFilePath));
2369 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform OpenInputData operation.", GetErrorMessage(r));
2373 __isStreamingContent = false;
2374 __currentState = PLAYER_STATE_INITIALIZED;
2379 _PlayerImpl::PlayerPdMessageCallBack(player_pd_message_type_e type, void* pUserData)
2381 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occured. pUserData is NULL!!");
2382 _PlayerImpl *pPlyarImpl = (_PlayerImpl *)pUserData;
2383 pPlyarImpl->HandlePdMessageCallBack(type);
2387 _PlayerImpl::HandlePdMessageCallBack(player_pd_message_type_e type)
2389 result r = E_SUCCESS;
2390 SysTryReturn(NID_MEDIA, __pPlayerProgressiveDownloadEvent != null, E_SYSTEM, E_SYSTEM,
2391 "[E_SYSTEM] A system error has been occurred. PlayerProgressiveEvent is null.");
2392 _PlayerProgressiveDownloadEventArg* pPlayerProgressiveDownloadEventArg = null;
2393 pPlayerProgressiveDownloadEventArg = new (std::nothrow) _PlayerProgressiveDownloadEventArg;
2394 SysTryCatch(NID_MEDIA, __pPlayerProgressiveDownloadEvent != null , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
2395 "[E_OUT_OF_MEMORY] Memory allocation failed.");
2398 case PLAYER_PD_STARTED:
2399 SysLog(NID_MEDIA, "Type is set to PLAYER_PD_STARTED");
2400 pPlayerProgressiveDownloadEventArg->SetEventType(PLAYER_PROGRESSIVE_DOWNLOAD_EVENT_STARTED);
2401 r = __pPlayerProgressiveDownloadEvent->FireAsync(*pPlayerProgressiveDownloadEventArg);
2402 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2404 case PLAYER_PD_COMPLETED:
2405 SysLog(NID_MEDIA, "Type is set to PLAYER_PD_COMPLETED");
2409 __pPdTimer->Cancel();
2410 __isProgressiveTimerStarted = false;
2412 pPlayerProgressiveDownloadEventArg->SetEventType(PLAYER_PROGRESSIVE_DOWNLOAD_EVENT_COMPLETED);
2413 pPlayerProgressiveDownloadEventArg->SetResult(E_SUCCESS);
2414 r = __pPlayerProgressiveDownloadEvent->FireAsync(*pPlayerProgressiveDownloadEventArg);
2415 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2418 SysLogException(NID_MEDIA, E_SYSTEM, "A system error has been occurred. Never come here player_pd_message is wrong -%d", type);
2424 if (pPlayerProgressiveDownloadEventArg)
2426 delete pPlayerProgressiveDownloadEventArg;
2427 pPlayerProgressiveDownloadEventArg = null;
2433 _PlayerImpl::OnTimerExpired(Timer& timer)
2435 int ret = ::PLAYER_ERROR_NONE;
2436 result r = E_SUCCESS;
2437 unsigned long currentSize = 0;
2438 unsigned long totalSize = 0;
2439 unsigned int callbackSizeQuantum = 0;
2440 _PlayerProgressiveDownloadEventArg* pPlayerProgressiveDownloadEventArg = null;
2442 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
2444 ret = player_get_progressive_download_status(__hPlayer, ¤tSize, &totalSize);
2445 r = MapExceptionToResult(ret);
2446 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_progressive_download_status operation with - 0x%x", GetErrorMessage(r), ret);
2447 SysLog(NID_MEDIA, "Current Size is %d Total Size is %d", currentSize, totalSize);
2448 callbackSizeQuantum = (totalSize * __pdCallbackRate ) / 100;
2449 if (__pdNextCallbackSize == 0)
2451 __pdNextCallbackSize = __pdNextCallbackSize + callbackSizeQuantum;
2453 if (currentSize >= __pdNextCallbackSize)
2455 pPlayerProgressiveDownloadEventArg = new (std::nothrow) _PlayerProgressiveDownloadEventArg;
2456 SysTryCatch(NID_MEDIA, __pPlayerProgressiveDownloadEvent != null , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
2457 "[E_OUT_OF_MEMORY] Memory allocation failed.");
2458 pPlayerProgressiveDownloadEventArg->SetEventType(PLAYER_PROGRESSIVE_DOWNLOAD_EVENT_IN_PROGRESS);
2459 pPlayerProgressiveDownloadEventArg->SetDownloadedSize(currentSize);
2460 pPlayerProgressiveDownloadEventArg->SetTotalSize(totalSize);
2461 r = __pPlayerProgressiveDownloadEvent->FireAsync(*pPlayerProgressiveDownloadEventArg);
2462 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2463 __pdNextCallbackSize = __pdNextCallbackSize + callbackSizeQuantum;
2466 r = timer.Start(_PLAYER_PROGRESSIVE_DOWNLOAD_TIMER_100_MS);
2467 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2470 if (pPlayerProgressiveDownloadEventArg)
2472 delete pPlayerProgressiveDownloadEventArg;
2473 pPlayerProgressiveDownloadEventArg = null;
2478 _PlayerImpl::OpenUrlAsync(Player* pPlayerInstance, const Tizen::Base::String& url, const Tizen::Base::String& filePath, IPlayerProgressiveDownloadListener& listener, const Tizen::Base::Collection::IMap* pHeader)
2480 result r = E_SUCCESS;
2482 int err = ::PLAYER_ERROR_NONE;
2483 Tizen::Base::String scheme;
2484 bool containsCookie = false;
2485 bool containsUserAgent = false;
2486 std::unique_ptr<char[]> pProgressiveDownloadPath;
2487 std::unique_ptr<const String> pCookieValue;
2488 std::unique_ptr<const String> pUserAgentValue;
2489 std::unique_ptr<char[]> pCookieChars;
2490 std::unique_ptr<char[]> pUsetAgentChars;
2491 std::unique_ptr<char[]> pInputFilePath;
2493 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
2495 SysTryReturn(NID_MEDIA, pPlayerInstance != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM]A system error has been occurred. Player instance is null.");
2497 pProgressiveDownloadPath.reset(_StringConverter::CopyToCharArrayN(filePath));
2498 SysTryReturn(NID_MEDIA, pProgressiveDownloadPath.get() != null, E_INVALID_ARG, E_INVALID_ARG,
2499 "[E_INVALID_ARG] Invalid argument is used. progressive download file path is wrong");
2501 err = player_get_state(__hPlayer, &__corePlayerCurState);
2502 r = MapExceptionToResult(err);
2503 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_getstate operation with - 0x%x", GetErrorMessage(r), err);
2505 SysTryReturn(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_IDLE,
2506 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. returned state is %d", __corePlayerCurState);
2508 SysTryReturn(NID_MEDIA, !url.IsEmpty(), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. Input url is empty");
2510 r = url.SubString(0, 4, scheme);
2511 SysTryReturn(NID_MEDIA, r == E_SUCCESS, E_UNSUPPORTED_PROTOCOL , E_UNSUPPORTED_PROTOCOL, "[%s] Failed to perform SubString operation", GetErrorMessage(E_UNSUPPORTED_PROTOCOL));
2512 SysTryReturn(NID_MEDIA, (scheme.Equals(L"http", false)), E_UNSUPPORTED_PROTOCOL, E_UNSUPPORTED_PROTOCOL, "[E_UNSUPPORTED_PROTOCOL] error has been occurred.");
2514 pInputFilePath.reset(_StringConverter::CopyToCharArrayN(url));
2516 __isStreamingContent = true;
2517 __isProgressiveContent = true;
2519 // Create progressive download Event
2520 __pPlayerProgressiveDownloadEvent.reset(new (std::nothrow) _PlayerProgressiveDownloadEvent);
2521 SysTryCatch(NID_MEDIA, __pPlayerProgressiveDownloadEvent != null , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
2522 "[E_OUT_OF_MEMORY] Memory allocation failed.");
2524 __pPdTimer.reset(new (std::nothrow) Timer);
2525 SysTryCatch(NID_MEDIA, __pPdTimer != null , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
2526 __pPdTimer->Construct(*this);
2527 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2529 r = __pPlayerProgressiveDownloadEvent->Construct(pPlayerInstance);
2530 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to construct PlayerProgressiveDownloadEvent.", GetErrorMessage(r));
2531 r = __pPlayerProgressiveDownloadEvent->AddListener(listener);
2532 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform PlayerProgressiveDownloadEvent AddListener operation.", GetErrorMessage(r));
2534 __pPlayerProgressiveDownloadListener = &listener;
2536 err = player_set_progressive_download_message_cb(__hPlayer, PlayerPdMessageCallBack, this);
2537 r = MapExceptionToResult(err);
2538 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_set_progressive_download_message_cb operation with - 0x%x", GetErrorMessage(r), err);
2540 err = player_set_progressive_download_path(__hPlayer, pProgressiveDownloadPath.get());
2541 r = MapExceptionToResult(err);
2542 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_set_progressive_download_path operation with - 0x%x", GetErrorMessage(r), err);
2546 const HashMap *pMapHeader = dynamic_cast<const HashMap *>(pHeader);
2547 SysTryCatch(NID_MEDIA, pMapHeader != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred.");
2548 pMapHeader->ContainsKey(String("Cookie"), containsCookie);
2551 SysLogException(NID_MEDIA, r, "[%s] Failed to perform HashMap::ContainsKey operation.", GetErrorMessage(r));
2553 else if (containsCookie)
2555 pCookieValue.reset(dynamic_cast<const String *>(pMapHeader->GetValue(String("Cookie"))));
2556 if (pCookieValue.get())
2558 pCookieChars.reset(_StringConverter::CopyToCharArrayN(*(pCookieValue.get())));
2559 if (pCookieChars.get())
2561 err = player_set_streaming_cookie(__hPlayer, pCookieChars.get(),pCookieValue->GetLength());
2566 r = GetLastResult();
2567 SysLogException(NID_MEDIA, r, "[%s] Failed to perform HashMap::GetValue(Cookie) operation.", GetErrorMessage(r));
2570 pMapHeader->ContainsKey(String("User-Agent"), containsUserAgent);
2573 SysLogException(NID_MEDIA, r, "[%s] Failed to perform HashMap::ContainsKey operation.", GetErrorMessage(r));
2575 else if (containsUserAgent)
2577 pUserAgentValue.reset(dynamic_cast<const String *>(pMapHeader->GetValue(String("User-Agent"))));
2578 if (pUserAgentValue.get())
2580 pUsetAgentChars.reset(_StringConverter::CopyToCharArrayN(*(pUserAgentValue.get())));
2581 err = player_set_streaming_user_agent(__hPlayer, pUsetAgentChars.get(),pUserAgentValue->GetLength());
2585 r = GetLastResult();
2586 SysLogException(NID_MEDIA, r, "[%s]HashMap::GetValue(User-Agent) Failed", GetErrorMessage(r));
2590 __preState = __currentState;
2591 __currentState = PLAYER_STATE_OPENING;
2593 r = OpenInputData(std::move(pInputFilePath));
2594 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform OpenInputData operation.", GetErrorMessage(r));
2598 __isStreamingContent = false;
2599 __currentState = PLAYER_STATE_INITIALIZED;
2604 _PlayerImpl::SetProgressiveDownloadIntervalByPercent(int percent)
2606 if((0 <= percent) && (percent <= 100))
2608 __pdCallbackRate = percent;
2613 _PlayerImpl::GetHttpStreamingDownloadProgress(void) const
2615 int returnValue = 0;
2617 int err = ::PLAYER_ERROR_NONE;
2618 player_state_e corePlayerCurState;
2619 result r = E_SUCCESS;
2621 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
2623 SysTryReturn(NID_MEDIA, __isStreamingContent == true, -1, E_INVALID_OPERATION, "[%s] Failed to perform this operation. This method dose not work on local content.", GetErrorMessage(E_INVALID_OPERATION));
2625 err = player_get_state(__hPlayer, &corePlayerCurState);
2626 r = MapExceptionToResult(err);
2627 SysTryReturn(NID_MEDIA, r == E_SUCCESS, -1, r, "[%s] Failed to perform player_getstate operation with - 0x%x", GetErrorMessage(r), err);
2629 SysTryReturn(NID_MEDIA, (corePlayerCurState == ::PLAYER_STATE_PLAYING) || (corePlayerCurState == ::PLAYER_STATE_PAUSED) ,
2630 -1, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. Current state is %d", corePlayerCurState);
2632 err = player_get_streaming_download_progress(__hPlayer, &startValue, &returnValue);
2633 r = MapExceptionToResult(err);
2634 SysTryReturn(NID_MEDIA, r == E_SUCCESS, -1, r, "[%s] Failed to perform player_get_streaming_download_progress operation with - 0x%x", GetErrorMessage(r), err);