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 <FNetNetAccountManager.h>
24 #include <FSys_SystemInfoImpl.h>
25 #include <FGrp_VideoTextureImpl.h>
26 #include <FMediaMediaStreamInfo.h>
27 #include <FMediaCapability.h>
28 #include "FMedia_ColorConverter.h"
29 #include "FMedia_PlayerEvent.h"
30 #include "FMedia_PlayerEventTypes.h"
31 #include "FMedia_PlayerEventArg.h"
32 #include "FMedia_PlayerVideoEvent.h"
33 #include "FMedia_PlayerVideoEventTypes.h"
34 #include "FMedia_PlayerVideoEventArg.h"
36 #include "FMedia_PlayerImpl.h"
37 #include "FMedia_AudioManagerConvert.h"
38 #include "FMedia_PlayerProgressiveDownloadEvent.h"
39 #include "FMedia_PlayerProgressiveDownloadEventArg.h"
41 using namespace Tizen::Base;
42 using namespace Tizen::Base::Runtime;
43 using namespace Tizen::Graphics;
44 using namespace Tizen::Net;
45 using namespace Tizen::Io;
46 using namespace Tizen::Base::Collection;
47 using namespace Tizen::Graphics::Opengl;
49 namespace Tizen { namespace Media
51 int _PlayerImpl::__playerCount = 0;
52 int _PlayerImpl::__maxInstanceCount = 0;
53 std::unique_ptr<Tizen::Base::Runtime::Mutex> _PlayerImpl::__pMutex;
54 bool _PlayerImpl::__isInstanceMutexInitialized = false;
56 _PlayerImpl::_PlayerImpl(void)
58 , __corePlayerCurState(::PLAYER_STATE_NONE)
60 , __handleType(_BufferInfoImpl::HANDLE_TYPE_NONE)
61 , __pPlayerEventListener(null)
62 , __pPlayerVideoEventListener(null)
63 , __pPlayerProgressiveDownloadListener(null)
64 , __orientation(ORIENTATION_PORTRAIT)
65 , __currentVolume(DEFAULT_PLAYER_VOLUME)
66 , __currentState(PLAYER_STATE_INITIALIZED)
67 , __preState(PLAYER_STATE_INITIALIZED)
68 , __videoPixelFormat(BITMAP_PIXEL_FORMAT_MIN)
70 , __decodedFrameWidth(0)
71 , __decodedFrameHeight(0)
72 , __decodedFrameSize(0)
73 , __pdCallbackRate(10)
74 , __pVideoTextureImpl(null)
75 , __isOpenBuffer(false)
79 , __checkCallbackForReadyState(false)
80 , __isStreamingContent(false)
81 , __videoEventCreated(false)
82 , __isPlayerConstructed(false)
83 , __isStateChangeForVideoCapture(false)
84 , __isProgressiveContent(false)
85 , __isProgressiveTimerStarted(false)
86 , __interruptFlag(false)
91 _PlayerImpl::~_PlayerImpl(void)
93 // Destruct only if player is constructed.
94 if (__isPlayerConstructed == false )
98 SysTryLog(NID_MEDIA, false, "Destroy player");
100 result r = E_SUCCESS;
101 int ret = ::PLAYER_ERROR_NONE;
102 __isOpenBuffer = false;
103 __isStreamingContent = false;
104 __bufferDataSize = 0;
105 __isPlayerConstructed = false;
106 __isLocalData = true;
110 ret = player_get_state(__hPlayer, &__corePlayerCurState );
113 if ( __corePlayerCurState == ::PLAYER_STATE_PAUSED || __corePlayerCurState == ::PLAYER_STATE_PLAYING )
115 ret = player_stop(__hPlayer);
116 r = MapExceptionToResult(ret);
117 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
118 ret = player_get_state(__hPlayer, &__corePlayerCurState );
119 r = MapExceptionToResult(ret);
120 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
122 if ( __corePlayerCurState == ::PLAYER_STATE_READY )
125 ret = player_unprepare(__hPlayer);
126 r = MapExceptionToResult(ret);
127 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
128 ret = player_get_state(__hPlayer, &__corePlayerCurState );
129 r = MapExceptionToResult(ret);
130 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
132 //un-set the callbacks
133 player_unset_completed_cb(__hPlayer);
134 player_unset_interrupted_cb(__hPlayer);
135 player_unset_error_cb(__hPlayer);
136 if (__videoEventCreated)
138 player_unset_video_frame_decoded_cb(__hPlayer);
141 if (__corePlayerCurState == ::PLAYER_STATE_IDLE )
143 ret = player_destroy(__hPlayer);
144 r = MapExceptionToResult(ret);
145 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
151 r = __pMutex->Acquire();
152 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
155 // Decrease a number of player instance
157 SysLog(NID_MEDIA, "_~PlayerImpl Instance number is %d", __playerCount);
159 r = __pMutex->Release();
160 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
161 __pVideoTextureImpl = null;
165 _PlayerImpl::InitInstanceMutex(void)
167 result r = E_SUCCESS;
168 __pMutex.reset(new (std::nothrow) Tizen::Base::Runtime::Mutex);
169 SysTryReturn(NID_MEDIA, __pMutex.get() != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] no memory to create instance Mutex");
170 r = __pMutex->Create("FMEDIA_PLAYER");
171 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Mutex::Create failed.");
172 __isInstanceMutexInitialized = true;
176 _PlayerImpl::GetInstance(Player* pPlayer)
180 return pPlayer->__pPlayerImpl;
187 _PlayerImpl::GetInstance(const Player* pPlayer)
191 return pPlayer->__pPlayerImpl;
199 _PlayerImpl::Construct(IPlayerEventListener& listener, const Tizen::Graphics::BufferInfo* pBufferInfo)
201 result r = E_SUCCESS;
202 const _BufferInfoImpl *pbufferInfoImpl = null;
203 static pthread_once_t onceBlock = PTHREAD_ONCE_INIT;
204 if (!__isInstanceMutexInitialized)
206 pthread_once(&onceBlock, InitInstanceMutex);
208 SysTryCatch(NID_MEDIA, __isInstanceMutexInitialized == true, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] memory allocation for Instance Mutex failed");
210 //if the __maxInstanceCount is not initialized do so using Capability
211 if (!__maxInstanceCount)
213 r = MediaCapability::GetValue(PLAYER_COUNT_MAX, __maxInstanceCount);
214 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s]Propagating", GetErrorMessage(r));
215 SysTryCatch(NID_MEDIA, __maxInstanceCount > 0, , r, "[%s]Propagating", GetErrorMessage(r));
218 // Check the instance maximum
219 SysTryReturn(NID_MEDIA, __playerCount < __maxInstanceCount, E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE,
220 "__playerCount count -%d failed can only create - %d Player Instances ",__playerCount, __maxInstanceCount);
223 __pPlayerEvent.reset(new (std::nothrow) _PlayerEvent);
224 SysTryCatch(NID_MEDIA, __pPlayerEvent != null , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. __pPlayerEvent is null.");
226 r = __pPlayerEvent->Construct();
227 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to construct _PlayerEvent.", GetErrorMessage(r));
229 r = __pPlayerEvent->AddListener(listener);
230 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform AddListener operation.", GetErrorMessage(r));
232 __pPlayerEventListener = &listener;
234 r = CreatePlayerAndSetCallBack();
235 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform CreateMMPlayerInstanceAndSetMsgCallBack operation.", GetErrorMessage(r));
237 r = SetVolume(DEFAULT_PLAYER_VOLUME);
238 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform SetVolume operation.", GetErrorMessage(r));
241 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform SetMute operation.", GetErrorMessage(r));
243 r = SetLooping(false);
244 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform SetLooping operation.", GetErrorMessage(r));
246 // Set the canvas to subsystem's player
249 pbufferInfoImpl = _BufferInfoImpl::GetInstance(*pBufferInfo);
250 SysTryCatch(NID_MEDIA, pbufferInfoImpl != NULL, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pbufferInfoImpl instance must not be null.");
251 __orientation = (Orientation)(pbufferInfoImpl->GetOrientation());
253 // Set an available handler even if handler is not available.
254 if (pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION))
256 __hCanvas = pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION);
257 __handleType = _BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION;
259 else if (pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_VE_SURFACE))
261 __hCanvas = pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_VE_SURFACE);
262 __handleType = _BufferInfoImpl::HANDLE_TYPE_VE_SURFACE;
267 __handleType = _BufferInfoImpl::HANDLE_TYPE_NONE;
270 SysTryCatch(NID_MEDIA, __hCanvas != 0, r = E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. __hCanvas = %d", __hCanvas);
274 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
276 r = __pMutex->Release();
277 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
278 SysLog(NID_MEDIA, "Instance number is %d.", __playerCount);
280 __currentState = PLAYER_STATE_INITIALIZED;
281 __isPlayerConstructed = true;
285 __pPlayerEventListener = null;
290 _PlayerImpl::Construct(IPlayerEventListener& listener, IPlayerVideoEventListener& videoListener, void* pPlayerObj)
292 result r = E_SUCCESS;
293 String key(L"http://tizen.org/feature/screen.bpp");
295 static pthread_once_t onceBlock = PTHREAD_ONCE_INIT;
296 if (!__isInstanceMutexInitialized)
298 pthread_once(&onceBlock, InitInstanceMutex);
300 SysTryCatch(NID_MEDIA, __isInstanceMutexInitialized == true, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] memory allocation for Instance Mutex failed");
302 if (!__maxInstanceCount)
304 r = MediaCapability::GetValue(PLAYER_COUNT_MAX, __maxInstanceCount);
305 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating", GetErrorMessage(r));
306 SysTryCatch(NID_MEDIA, __maxInstanceCount > 0, , r, "[%s] Propagating", GetErrorMessage(r));
309 // Check the instance maximum
310 SysTryReturn(NID_MEDIA, __playerCount < __maxInstanceCount, r = E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE,
311 "[E_RESOURCE_UNAVAILABLE] __playerCount count -%d failed can only create - %d Player Instances ",__playerCount, __maxInstanceCount);
314 __pPlayerEvent.reset(new (std::nothrow) _PlayerEvent);
315 SysTryCatch(NID_MEDIA, __pPlayerEvent, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. __pPlayerEvent is null.");
317 r = __pPlayerEvent->Construct();
318 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to construct _PlayerEvent", GetErrorMessage(r));
320 r = __pPlayerEvent->AddListener(listener);
321 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform AddListner operation", GetErrorMessage(r));
323 __pPlayerEventListener = &listener;
325 // Create Video Event
326 __pPlayerVideoEvent.reset(new (std::nothrow) _PlayerVideoEvent);
327 SysTryCatch(NID_MEDIA, __pPlayerVideoEvent, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. pPlayerVideoEvent is null");
329 r = __pPlayerVideoEvent->Construct(pPlayerObj);
330 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to construct _PlayerVideoEvent.", GetErrorMessage(r));
332 r = __pPlayerVideoEvent->AddListener(videoListener);
333 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform AddListner operation.", GetErrorMessage(r));
335 __pPlayerVideoEventListener = &videoListener;
337 // Set the bit per pixel of system
338 r = Tizen::System::_SystemInfoImpl::GetSysInfo(key, bit);
340 SetSystemBitPerPixel(bit);
341 __videoEventCreated = true;
342 // Set Canvas for surface in platform
344 r = CreatePlayerAndSetCallBack();
345 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform CreateMMPlayerInstanceAndSetMsgCallBack operation.", GetErrorMessage(r));
347 r = SetVolume(DEFAULT_PLAYER_VOLUME);
348 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform SetVolume operation.", GetErrorMessage(r));
351 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform SetMute operation.", GetErrorMessage(r));
353 r = SetLooping(false);
354 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform SetLooping operation.", GetErrorMessage(r));
357 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
359 r = __pMutex->Release();
360 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
361 SysLog(NID_MEDIA, "Instance number is %d", __playerCount);
363 __currentState = PLAYER_STATE_INITIALIZED;
364 __isPlayerConstructed = true;
369 __pPlayerEventListener = null;
370 __pPlayerVideoEventListener=null;
377 _PlayerImpl::Construct(IPlayerEventListener& listener, Tizen::Graphics::Opengl::VideoTexture& videoTexture)
379 result r = E_SUCCESS;
380 static pthread_once_t onceBlock = PTHREAD_ONCE_INIT;
381 if (!__isInstanceMutexInitialized)
383 pthread_once(&onceBlock, InitInstanceMutex);
385 SysTryCatch(NID_MEDIA, __isInstanceMutexInitialized == true, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] memory allocation for Instance Mutex failed");
387 //if the __maxInstanceCount is not initialized do so using Capability
388 if (!__maxInstanceCount)
390 r = MediaCapability::GetValue(PLAYER_COUNT_MAX, __maxInstanceCount);
391 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s]Propagating", GetErrorMessage(r));
392 SysTryCatch(NID_MEDIA, __maxInstanceCount > 0, , r, "[%s]Propagating", GetErrorMessage(r));
395 // Check the instance maximum
396 SysTryReturn(NID_MEDIA, __playerCount < __maxInstanceCount, E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE,
397 "__playerCount count -%d failed can only create - %d Player Instances ",__playerCount, __maxInstanceCount);
399 __pVideoTextureImpl = _VideoTextureImpl::GetInstance(videoTexture);
400 SysTryReturn(NID_MEDIA, __pVideoTextureImpl != null, E_INVALID_ARG, E_INVALID_ARG, "videoTexture argument passes is wrong");
403 __pPlayerEvent.reset(new (std::nothrow) _PlayerEvent);
404 SysTryCatch(NID_MEDIA, __pPlayerEvent != null , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. __pPlayerEvent is null.");
406 r = __pPlayerEvent->Construct();
407 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to construct _PlayerEvent.", GetErrorMessage(r));
409 r = __pPlayerEvent->AddListener(listener);
410 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform AddListener operation.", GetErrorMessage(r));
412 __pPlayerEventListener = &listener;
414 r = CreatePlayerAndSetCallBack();
415 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform CreateMMPlayerInstanceAndSetMsgCallBack operation.", GetErrorMessage(r));
417 r = SetVolume(DEFAULT_PLAYER_VOLUME);
418 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform SetVolume operation.", GetErrorMessage(r));
421 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform SetMute operation.", GetErrorMessage(r));
423 r = SetLooping(false);
424 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform SetLooping operation.", GetErrorMessage(r));
427 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
429 r = __pMutex->Release();
430 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
431 SysLog(NID_MEDIA, "Instance number is %d.", __playerCount);
433 __currentState = PLAYER_STATE_INITIALIZED;
434 __isPlayerConstructed = true;
438 __pPlayerEventListener = null;
443 _PlayerImpl::OpenFile(const Tizen::Base::String& mediaLocalPath, bool isAsync)
445 result r = E_SUCCESS;
446 int err = ::PLAYER_ERROR_NONE;
447 Tizen::Base::String strFileName;
448 std::unique_ptr<char[]> pInputFilePath;
449 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
451 err = player_get_state(__hPlayer, &__corePlayerCurState);
452 r = MapExceptionToResult(err);
453 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "%s error has been occurred in player_get_state", GetErrorMessage(r));
455 SysTryReturn(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_IDLE,
456 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. State is %d", __corePlayerCurState);
458 strFileName = Tizen::Io::File::GetFileName(mediaLocalPath);
460 SysTryReturn(NID_MEDIA, ((mediaLocalPath.GetLength() > 0) && !strFileName.IsEmpty()), E_FILE_NOT_FOUND, E_FILE_NOT_FOUND,
461 "[E_FILE_NOT_FOUND] mediaLocalPath's length is (%d).", mediaLocalPath.GetLength());
463 pInputFilePath.reset(_StringConverter::CopyToCharArrayN(mediaLocalPath));
464 SysTryCatch(NID_MEDIA, pInputFilePath.get() , r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pInputFilePath is null");
465 SysLog(NID_MEDIA, "Input file path after conversion is [%s]", pInputFilePath.get());
467 __preState = __currentState;
468 __currentState = PLAYER_STATE_OPENING;
471 r = OpenInputData(std::move(pInputFilePath));
472 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform OpenInputData operation.", GetErrorMessage(r));
476 __currentState = PLAYER_STATE_INITIALIZED;
481 _PlayerImpl::OpenBuffer(const Tizen::Base::ByteBuffer& mediaBuffer, bool isAsync)
483 result r = E_SUCCESS;
484 int err = ::PLAYER_ERROR_NONE;
485 std::unique_ptr<char[]> pInputFilePath;
487 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
489 err = player_get_state(__hPlayer, &__corePlayerCurState);
490 r = MapExceptionToResult(err);
491 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "%s error has been occurred. Failed to perform player_getstate operation with - 0x%x", GetErrorMessage(r), err);
493 SysTryReturn(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_IDLE,
494 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. State is %d ", __corePlayerCurState);
496 __pTargetByteBuffer.reset(new (std::nothrow) ByteBuffer);
497 SysTryCatch(NID_MEDIA, __pTargetByteBuffer , r = E_OUT_OF_MEMORY, r, "[E_OUT_OF_MEMORY] Memory allocation failed. pTargetByteBuffer is null");
499 r = __pTargetByteBuffer->Construct(mediaBuffer);
501 __isOpenBuffer = true;
502 __bufferDataSize = __pTargetByteBuffer->GetCapacity();
504 SysTryCatch(NID_MEDIA, __bufferDataSize > 0, r = E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Buffer instance is not available.");
505 SysTryCatch(NID_MEDIA, __pTargetByteBuffer->GetPointer() , r = E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Buffer instance is not available.");
507 __preState = __currentState;
508 __currentState = PLAYER_STATE_OPENING;
511 r = OpenInputData(std::move(pInputFilePath));
512 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform OpenInputData operation.", GetErrorMessage(r));
516 __isOpenBuffer = false;
517 __currentState = PLAYER_STATE_INITIALIZED;
522 _PlayerImpl::OpenUrl(const Tizen::Base::Utility::Uri& mediaUri, bool isAync)
524 result r = E_SUCCESS;
526 Tizen::Base::String urlStr;
527 Tizen::Base::String scheme;
528 NetAccountManager accountMgr;
529 std::unique_ptr<char[]> pInputFilePath;
531 int err = ::PLAYER_ERROR_NONE;
533 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
535 err = player_get_state(__hPlayer, &__corePlayerCurState);
536 r = MapExceptionToResult(err);
537 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);
539 SysTryReturn(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_IDLE,
540 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. State is %d", __corePlayerCurState);
542 SysTryReturn(NID_MEDIA, !mediaUri.ToString().IsEmpty(), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. Input url is empty");
544 urlStr = mediaUri.ToString();
546 r = urlStr.SubString(0, 4, scheme);
547 SysTryReturn(NID_MEDIA, r == E_SUCCESS, E_UNSUPPORTED_PROTOCOL , E_UNSUPPORTED_PROTOCOL, "[%s] Failed to perform SubString operation", GetErrorMessage(E_UNSUPPORTED_PROTOCOL));
548 SysTryReturn(NID_MEDIA, (scheme.Equals(L"rtsp", false) || scheme.Equals(L"http", false)), r = E_UNSUPPORTED_PROTOCOL,
549 E_UNSUPPORTED_PROTOCOL, "[E_UNSUPPORTED_PROTOCOL] error has been occurred.");
551 pInputFilePath.reset(_StringConverter::CopyToCharArrayN(mediaUri.ToString()));
553 __isStreamingContent = true;
554 __preState = __currentState;
555 __currentState = PLAYER_STATE_OPENING;
557 r = OpenInputData(std::move(pInputFilePath));
558 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating. Failed to perform OpenInputData operation.", GetErrorMessage(r));
559 __isLocalData = false;
563 __isStreamingContent = false;
564 __currentState = PLAYER_STATE_INITIALIZED;
569 _PlayerImpl::OpenInputData(std::unique_ptr<char[]> pStrInputFilePath)
571 result r = E_SUCCESS;
572 int err = ::PLAYER_ERROR_NONE;
573 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
577 err = player_set_memory_buffer(__hPlayer, (void *) __pTargetByteBuffer->GetPointer(), __bufferDataSize);
581 SysTryReturn(NID_MEDIA, pStrInputFilePath.get() , r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. StrInputFilePath is null.");
582 err = player_set_uri(__hPlayer, pStrInputFilePath.get());
584 r = MapExceptionToResult(err);
585 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "%s error has been occurred.", GetErrorMessage(r));
589 if (__handleType != _BufferInfoImpl::HANDLE_TYPE_VE_SURFACE)
591 SysLog(NID_MEDIA, "PLAYER_DISPLAY_TYPE_X11");
592 err = player_set_display(__hPlayer, PLAYER_DISPLAY_TYPE_X11, (player_display_h) __hCanvas);
595 SysLog(NID_MEDIA, "PLAYER_DISPLAY_TYPE_EVAS");
596 err = player_set_display(__hPlayer, PLAYER_DISPLAY_TYPE_EVAS, (player_display_h) __hCanvas);
598 r = MapExceptionToResult(err);
599 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);
601 err = player_set_display_mode(__hPlayer, PLAYER_DISPLAY_MODE_FULL_SCREEN);
602 r = MapExceptionToResult(err);
603 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);
605 if (__pVideoTextureImpl)
607 err = player_set_display_mode(__hPlayer, PLAYER_DISPLAY_MODE_FULL_SCREEN);
608 r = MapExceptionToResult(err);
609 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);
611 err = player_set_x11_display_pixmap(__hPlayer, _VideoTextureImpl::GetPixmap, (void*)__pVideoTextureImpl);
612 r = MapExceptionToResult(err);
613 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);
615 err = player_set_x11_display_pixmap_error_cb(__hPlayer, _VideoTextureImpl::PixmapErrorCallback, (void*)__pVideoTextureImpl);
616 r = MapExceptionToResult(err);
617 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);
619 if (__videoEventCreated)
621 err = player_set_display(__hPlayer, PLAYER_DISPLAY_TYPE_X11, (player_display_h) null);
622 r = MapExceptionToResult(err);
623 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);
625 err = player_set_x11_display_visible(__hPlayer, false);
626 r = MapExceptionToResult(err);
627 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);
629 if (__isAsync == false)
632 err = player_prepare(__hPlayer);
633 r = MapExceptionToResult(err);
634 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] error has been occurred. Failed to perform player_prepare operation with 0x%x", GetErrorMessage(r), err);
636 err = player_get_state(__hPlayer, &__corePlayerCurState);
637 r = MapExceptionToResult(err);
638 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);
639 SysTryCatch(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_READY , , r = E_SYSTEM, "[E_SYSTEM] A system error has been occurred. wrong sync state is [%d]", __corePlayerCurState);
640 __currentState = PLAYER_STATE_OPENED;
646 err = player_prepare_async(__hPlayer,PlayerPreparedCallBack,(void*)this);
647 r = MapExceptionToResult(err);
648 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);
650 if (__isStreamingContent)
652 err = player_set_buffering_cb(__hPlayer, PlayerBufferingCallBack, (void*)this);
653 r = MapExceptionToResult(err);
654 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);
661 //Basic Functionalities of Tizen::Media::Player
664 _PlayerImpl::Close(void)
666 result r = E_SUCCESS;
667 int ret = ::PLAYER_ERROR_NONE;
669 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
671 ret = player_get_state(__hPlayer, &__corePlayerCurState);
672 r = MapExceptionToResult(ret);
673 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), ret);
674 SysTryReturn(NID_MEDIA, (__corePlayerCurState == ::PLAYER_STATE_READY ),
675 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. State is %d", __corePlayerCurState);
677 ret = player_unprepare(__hPlayer);
678 r = MapExceptionToResult(ret);
679 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Failed to perform player_unprepare operation with - 0x%x", GetErrorMessage(r), ret);
681 ret = player_get_state(__hPlayer, &__corePlayerCurState);
682 r = MapExceptionToResult(ret);
683 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_getstate operation with - 0x%x", GetErrorMessage(r), ret);
684 SysTryCatch(NID_MEDIA, (__corePlayerCurState == ::PLAYER_STATE_IDLE ), r = E_INVALID_STATE, r, "[E_INVALID_STATE] Player state is in an invalid state - %d ",__corePlayerCurState);
686 //because player_unrealize is sync we can directly make the state as PLAYER_STATE_CLOSED
687 __currentState = PLAYER_STATE_CLOSED;
688 __isOpenBuffer = false;
689 __bufferDataSize = 0;
690 __isLocalData = true;
692 if (__isProgressiveContent)
694 if (__pPlayerProgressiveDownloadEvent)
696 __pPlayerProgressiveDownloadEvent->RemoveListener(*__pPlayerProgressiveDownloadListener);
697 __pPlayerProgressiveDownloadListener = null;
699 ret = player_unset_progressive_download_message_cb(__hPlayer);
700 r = MapExceptionToResult(ret);
703 SysLogException(NID_MEDIA, r == E_SUCCESS, "Failed to perform player_unset_progressive_download_message_cb operation with 0x%x", ret);
707 __pPdTimer->Cancel();
708 __isProgressiveTimerStarted = false;
710 __isProgressiveContent = false;
713 if (__isStreamingContent)
715 ret = player_unset_buffering_cb(__hPlayer);
716 r = MapExceptionToResult(ret);
719 SysLogException(NID_MEDIA, r == E_SUCCESS, "Failed to perform player_unset_buffering_cb operation with 0x%x", ret);
725 if (__handleType == _BufferInfoImpl::HANDLE_TYPE_VE_SURFACE)
727 evas_object_image_data_set((Evas_Object*)__hCanvas, NULL);
731 __isStreamingContent = false;
735 __currentState = PLAYER_STATE_ERROR;
740 _PlayerImpl::Play(void)
742 result r = E_SUCCESS;
743 int ret = ::PLAYER_ERROR_NONE;
745 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
747 ret = player_get_state(__hPlayer, &__corePlayerCurState);
748 r = MapExceptionToResult(ret);
749 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] player_getstate failed with - 0x%x", GetErrorMessage(r), ret);
750 SysTryReturn(NID_MEDIA, ((__corePlayerCurState == ::PLAYER_STATE_READY ) || (__corePlayerCurState == ::PLAYER_STATE_PAUSED )),
751 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. State is %d", __corePlayerCurState);
753 ret = player_start(__hPlayer);
754 r = MapExceptionToResult(ret);
755 SysTryReturn(NID_MEDIA,r == E_SUCCESS, r, r, "[%s] Failed to perform player_start operation with - 0x%x", GetErrorMessage(r), ret);
757 ret = player_get_state(__hPlayer, &__corePlayerCurState);
758 r = MapExceptionToResult(ret);
759 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with- 0x%x", GetErrorMessage(r), ret);
760 SysTryCatch(NID_MEDIA, (__corePlayerCurState == ::PLAYER_STATE_PLAYING),
761 r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. State change was not proper returned state is - %d", __corePlayerCurState);
762 __isStateChangeForVideoCapture = false;
764 if (__isProgressiveContent)
766 if ((__pPdTimer != null) && (__isProgressiveTimerStarted == false))
768 r = __pPdTimer->Start(_PLAYER_PROGRESSIVE_DOWNLOAD_TIMER_100_MS);
769 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform Timer start operation.", GetErrorMessage(r));
770 SysLog(NID_MEDIA, "Progressive Timer has started");
771 __isProgressiveTimerStarted = true;
774 __currentState = PLAYER_STATE_PLAYING;
777 __currentState = PLAYER_STATE_ERROR;
782 _PlayerImpl::Stop(void)
785 result r = E_SUCCESS;
786 int ret = ::PLAYER_ERROR_NONE;
788 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
790 ret = player_get_state(__hPlayer, &__corePlayerCurState);
791 r = MapExceptionToResult(ret);
792 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), ret);
793 SysTryReturn(NID_MEDIA, ((__corePlayerCurState == ::PLAYER_STATE_PLAYING ) || (__corePlayerCurState == ::PLAYER_STATE_PAUSED )),
794 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. State is %d", __corePlayerCurState);
796 ret = player_stop(__hPlayer);
797 r = MapExceptionToResult(ret);
798 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Failed to perform player_stop operation with - 0x%x", GetErrorMessage(r), ret);
800 ret = player_get_state(__hPlayer, &__corePlayerCurState);
801 r = MapExceptionToResult(ret);
802 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), ret);
803 SysTryCatch(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_READY,
804 r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occured. State change was not proper returned state is %d", __corePlayerCurState);
806 __currentState = PLAYER_STATE_STOPPED;
810 __currentState = PLAYER_STATE_ERROR;
815 _PlayerImpl::Pause(void)
817 result r = E_SUCCESS;
818 int ret = ::PLAYER_ERROR_NONE;
820 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
822 ret = player_get_state(__hPlayer, &__corePlayerCurState);
823 r = MapExceptionToResult(ret);
824 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), ret);
825 SysTryReturn(NID_MEDIA, (__corePlayerCurState == ::PLAYER_STATE_PLAYING ), E_INVALID_STATE, E_INVALID_STATE,
826 "[E_INVALID_STATE] Player state is in an invalid state. State is %d", __corePlayerCurState);
828 ret = player_pause(__hPlayer);
829 r = MapExceptionToResult(ret);
830 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Failed to perform player_pause operation with - 0x%x", GetErrorMessage(r), ret);
832 ret = player_get_state(__hPlayer, &__corePlayerCurState);
833 r = MapExceptionToResult(ret);
834 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), ret);
835 SysTryCatch(NID_MEDIA, (__corePlayerCurState == ::PLAYER_STATE_PAUSED ),
836 r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. State change was not proper returned state is %d", __corePlayerCurState);
838 __currentState = PLAYER_STATE_PAUSED;
842 __currentState = PLAYER_STATE_ERROR;
846 //Gets of Tizen::Media::Player
849 _PlayerImpl::GetState(void)
851 result r = E_SUCCESS;
852 int ret = ::PLAYER_ERROR_NONE;
854 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
856 if (__currentState == PLAYER_STATE_ERROR)
858 return PLAYER_STATE_ERROR;
860 ret = player_get_state(__hPlayer, &__corePlayerCurState);
861 r = MapExceptionToResult(ret);
862 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), ret);
864 if (__corePlayerCurState == ::PLAYER_STATE_PAUSED)
866 __currentState = PLAYER_STATE_PAUSED;
867 return PLAYER_STATE_PAUSED;
869 if (__corePlayerCurState == ::PLAYER_STATE_IDLE)
871 if (__currentState == PLAYER_STATE_INITIALIZED)
873 return PLAYER_STATE_INITIALIZED;
875 else if (__currentState == PLAYER_STATE_OPENING)
877 return PLAYER_STATE_OPENING;
879 else if(__currentState = PLAYER_STATE_CLOSED)
881 return PLAYER_STATE_CLOSED;
884 return __currentState;
886 return (PlayerState) - 1;
890 _PlayerImpl::GetPosition(void) const
892 int ret = ::PLAYER_ERROR_NONE;
894 result r = E_SUCCESS;
896 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
898 ret = player_get_position(__hPlayer, &pos);
899 r = MapExceptionToResult(ret);
900 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_position operation with 0x%x", GetErrorMessage(r), ret);
908 _PlayerImpl::GetDuration(void)
910 int err = ::PLAYER_ERROR_NONE;
911 result r = E_SUCCESS;
914 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
916 SysTryCatch(NID_MEDIA, (
917 (__currentState == PLAYER_STATE_PLAYING) ||
918 (__currentState == PLAYER_STATE_PAUSED) ||
919 (__currentState == PLAYER_STATE_OPENED) ||
920 (__currentState == PLAYER_STATE_STOPPED)),
921 r = E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. State is %d", __currentState);
923 //As a last resort try with palyer_get_duration
924 err = player_get_duration(__hPlayer, &duration);
925 r = MapExceptionToResult(err);
926 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_duration operation with 0x%x", GetErrorMessage(r), err);
927 SysLog(NID_MEDIA, "Duration is %d after player_get_duration.",duration);
935 _PlayerImpl::GetVolume(void) const
937 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
938 return __currentVolume;
942 _PlayerImpl::IsMute(void) const
944 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
949 _PlayerImpl::IsLooping(void) const
951 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
956 _PlayerImpl::SeekTo(long msTime)
958 result r = E_SUCCESS;
959 int ret = ::PLAYER_ERROR_NONE;
961 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
963 ret = player_get_state(__hPlayer, &__corePlayerCurState);
964 r = MapExceptionToResult(ret);
965 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with 0x%x", GetErrorMessage(r), ret);
967 SysTryReturn(NID_MEDIA, ((__corePlayerCurState == ::PLAYER_STATE_PLAYING ) || (__corePlayerCurState == ::PLAYER_STATE_PAUSED )
968 || (__corePlayerCurState == ::PLAYER_STATE_READY )), E_INVALID_STATE, E_INVALID_STATE
969 , "[E_INVALID_STATE] Player state is in an invalid state. Current state is %d", __corePlayerCurState);
971 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");
973 ret = player_set_position(__hPlayer, (int)msTime, PlayerSeekCompletedCallBack, (void *)this);
974 r = MapExceptionToResult(ret);
975 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_set_position operation with [0x%x]", GetErrorMessage(r), ret);
983 _PlayerImpl::SetVolume(int volume)
985 result r = E_SUCCESS;
986 int ret = ::PLAYER_ERROR_NONE;
987 float mmVolumeVal = 0;
989 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
991 SysTryReturn(NID_MEDIA, volume >= MIN_PLAYER_VOLUME && volume <= MAX_PLAYER_VOLUME, E_OUT_OF_RANGE, E_OUT_OF_RANGE,
992 "[E_OUT_OF_RANGE] Player volume (%d) is out of range.", volume);
994 mmVolumeVal = (float) volume / 100;
996 SysLog(NID_MEDIA, "Converted volume is [%f]", mmVolumeVal);
997 if ((mmVolumeVal < _PLAYER_MIN_VOLUME) || (mmVolumeVal > _PLAYER_MAX_VOLUME))
999 SysLog(NID_MEDIA, "[E_OUT_OF_RANGE] Player volume(%d) is out of range", volume);
1000 return E_OUT_OF_RANGE;
1003 ret = player_set_volume(__hPlayer, mmVolumeVal, mmVolumeVal);
1004 r = MapExceptionToResult(ret);
1005 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Failed to perform player_set_volume operation with - 0x%x", GetErrorMessage(r), ret);
1007 __currentVolume = volume;
1012 _PlayerImpl::SetMute(bool mute)
1014 result r = E_SUCCESS;
1015 int ret = ::PLAYER_ERROR_NONE;
1017 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
1019 ret = player_set_mute(__hPlayer, mute);
1020 r = MapExceptionToResult(ret);
1021 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "[%s] Failed to perform player_set_mute operation with 0x%x", GetErrorMessage(r), ret);
1028 _PlayerImpl::SetLooping(bool looping)
1030 result r = E_SUCCESS;
1031 int err = ::PLAYER_ERROR_NONE;
1033 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
1035 err = player_set_looping(__hPlayer, looping);
1036 r = MapExceptionToResult(err);
1037 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_set_looping operation with 0x%x", GetErrorMessage(r), err);
1038 __isLooped = looping;
1045 _PlayerImpl::SetRenderingBuffer(const Tizen::Graphics::BufferInfo& bufferInfo)
1047 result r = E_SUCCESS;
1048 int err = ::PLAYER_ERROR_NONE;
1049 const _BufferInfoImpl* pbufferInfoImpl = NULL;
1051 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
1053 PlayerState checkPlayerState = GetState();
1055 NID_MEDIA, checkPlayerState == PLAYER_STATE_PLAYING || checkPlayerState == PLAYER_STATE_OPENED
1056 || checkPlayerState == PLAYER_STATE_ENDOFCLIP || checkPlayerState == PLAYER_STATE_STOPPED
1057 || checkPlayerState == PLAYER_STATE_PAUSED , E_INVALID_STATE, E_INVALID_STATE,
1058 "[E_INVALID_STATE] Player state is in an invalid state.");
1060 // Set the canvas to subsystem's player
1061 pbufferInfoImpl = _BufferInfoImpl::GetInstance(bufferInfo);
1062 SysTryCatch(NID_MEDIA, pbufferInfoImpl != NULL, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pbufferInfoImpl is not valid");
1063 __orientation = (Orientation)(pbufferInfoImpl->GetOrientation());
1065 // Set an available handler.
1066 if (pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION))
1068 __hCanvas = pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION);
1069 __handleType = _BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION;
1071 else if (pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_VE_SURFACE))
1073 __hCanvas = pbufferInfoImpl->GetHandle(_BufferInfoImpl::HANDLE_TYPE_VE_SURFACE);
1074 __handleType = _BufferInfoImpl::HANDLE_TYPE_VE_SURFACE;
1077 // handle is invalid
1079 __handleType = _BufferInfoImpl::HANDLE_TYPE_NONE;
1082 SysTryCatch(NID_MEDIA, __hCanvas != 0, r = E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. BufferInfo is not valid.");
1084 if (__handleType != _BufferInfoImpl::HANDLE_TYPE_VE_SURFACE)
1086 SysLog(NID_MEDIA, "PLAYER_DISPLAY_TYPE_X11");
1087 err = player_set_display(__hPlayer, PLAYER_DISPLAY_TYPE_X11, (player_display_h) __hCanvas);
1090 SysLog(NID_MEDIA, "PLAYER_DISPLAY_TYPE_EVAS");
1091 err = player_set_display(__hPlayer, PLAYER_DISPLAY_TYPE_EVAS, (player_display_h) __hCanvas);
1094 r = MapExceptionToResult(err);
1095 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_set_display operation with 0x%x", GetErrorMessage(r), err);
1097 err = player_set_display_mode(__hPlayer, PLAYER_DISPLAY_MODE_FULL_SCREEN);
1098 r = MapExceptionToResult(err);
1099 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);
1106 _PlayerImpl::CaptureVideo(void)
1108 result r = E_SUCCESS;
1109 int ret = ::PLAYER_ERROR_NONE;
1110 bool playbackFlag = false;
1112 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
1114 SysTryReturn(NID_MEDIA, __videoEventCreated == true , E_INVALID_STATE, E_INVALID_STATE,
1115 "[E_INVALID_STATE] Player state is in an invalid without the video event listener");
1117 ret = player_get_state(__hPlayer, &__corePlayerCurState);
1118 r = MapExceptionToResult(ret);
1119 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x state - %d", GetErrorMessage(r), ret, __corePlayerCurState);
1120 SysTryReturn(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_READY || __corePlayerCurState == ::PLAYER_STATE_PAUSED, E_INVALID_STATE, E_INVALID_STATE,
1121 "mmPlayer state is in an invalid state. Current state is %d", __corePlayerCurState);
1123 __isStateChangeForVideoCapture = true;
1125 ret = player_set_volume(__hPlayer,0.0,0.0);
1126 r = MapExceptionToResult(ret);
1127 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_set_volume operation with - 0x%x", GetErrorMessage(r), ret);
1129 ret = player_start(__hPlayer);
1130 r = MapExceptionToResult(ret);
1131 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_start operation with - 0x%x", GetErrorMessage(r), ret);
1132 playbackFlag = true;
1134 ret = player_get_state(__hPlayer, &__corePlayerCurState);
1135 r = MapExceptionToResult(ret);
1136 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x ", GetErrorMessage(r), ret);
1137 SysTryReturn(NID_MEDIA, (__corePlayerCurState == ::PLAYER_STATE_PLAYING), E_INVALID_STATE, E_INVALID_STATE,
1138 "[E_INVALID_STATE] mmPlayer state is in an invalid state. Current state is %d", __corePlayerCurState);
1139 SysLog(NID_MEDIA, "player_state is %d ", __corePlayerCurState);
1141 ret = player_capture_video(__hPlayer, PlayerVideoCapturedCallBack, (void*)this);
1142 r = MapExceptionToResult(ret);
1143 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform CaptureVideoInternal operation with 0x%x", GetErrorMessage(r), ret);
1148 ret = player_stop(__hPlayer);
1149 r = MapExceptionToResult(ret);
1150 SysTryLog(NID_MEDIA,r==E_SUCCESS, "[%s] Failed to perform player_stop operation with - 0x%x ", GetErrorMessage(r), ret);
1152 r = SetVolume(__currentVolume);
1153 SysTryLog(NID_MEDIA,r == E_SUCCESS, "[%s] Propagating ", GetErrorMessage(r));
1155 playbackFlag = false;
1157 __isStateChangeForVideoCapture = false;
1158 SysLog(NID_MEDIA, "__isStateChangeForVideoCapture is %d",__isStateChangeForVideoCapture);
1162 //Internal Functions
1165 _PlayerImpl::SetSystemBitPerPixel(int PixelFormat)
1167 if (PixelFormat == _PLAYER_IMPL_VIDEO_PIXEL_SIZE_RGB565)
1169 __videoPixelFormat = BITMAP_PIXEL_FORMAT_RGB565;
1173 __videoPixelFormat = BITMAP_PIXEL_FORMAT_ARGB8888;
1179 _PlayerImpl::SendEvent(_PlayerEventType eventType, int value)
1181 result r = E_SUCCESS;
1182 if (eventType == _PLAYER_EVENT_BUFFERING )
1184 _PlayerStreamingEventArg* pPlayerStreamingEventArg = new (std::nothrow) _PlayerStreamingEventArg;
1185 if (pPlayerStreamingEventArg == null)
1189 pPlayerStreamingEventArg->SetEventType(_PLAYER_EVENT_BUFFERING);
1190 pPlayerStreamingEventArg->SetPercent(value);
1193 r = __pPlayerEvent->FireAsync(*pPlayerStreamingEventArg);
1194 SysLog(NID_MEDIA, "eventType is %d in _PlayerImpl::SendEvent.", eventType);
1197 delete pPlayerStreamingEventArg;
1201 else if (eventType == _PLAYER_EVENT_ERROR )
1203 _PlayerErrorArg* pPlayerErrorArg = new (std::nothrow) _PlayerErrorArg;
1204 if (pPlayerErrorArg == null)
1208 pPlayerErrorArg->SetEventType(_PLAYER_EVENT_ERROR);
1209 pPlayerErrorArg->SetError((PlayerErrorReason) value);
1211 r = __pPlayerEvent->FireAsync(*pPlayerErrorArg);
1212 SysLog(NID_MEDIA, "eventType is %d in PlayInternaler::SendEvent.", eventType);
1215 delete pPlayerErrorArg;
1222 _PlayerEventArg* pPlayerEventArg = new (std::nothrow) _PlayerEventArg;
1223 if (pPlayerEventArg == null)
1227 pPlayerEventArg->SetEventType(eventType);
1228 pPlayerEventArg->SetResult((result) value);
1230 r = __pPlayerEvent->FireAsync(*pPlayerEventArg);
1231 SysLog(NID_MEDIA, "eventType is %d in PlayInternaler::SendEvent.", eventType);
1234 delete pPlayerEventArg;
1242 _PlayerImpl::SendCapturedVideoFrame(_PlayerVideoEventType event, void* pStream, int streamSize, int width, int height, result r)
1244 result result = E_SUCCESS;
1245 Tizen::Graphics::Dimension dimension(0, 0);
1247 _PlayerVideoEventArg* pPlayerVideoEventArg = new (std::nothrow) _PlayerVideoEventArg;
1248 SysTryReturn(NID_MEDIA, pPlayerVideoEventArg, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. pPlayerVideoEventArg is null.");
1250 if (event == _PLAYER_VIDEO_EVENT_DECODED)
1252 dimension.width = width;
1253 dimension.height = height;
1255 pData = new (std::nothrow) byte[streamSize];
1256 SysTryCatch(NID_MEDIA, pData != null, , r = E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. pData is null.");
1257 memcpy(pData, pStream, streamSize);
1259 pPlayerVideoEventArg->SetVideoEventType(_PLAYER_VIDEO_EVENT_DECODED);
1260 pPlayerVideoEventArg->SetBuffer((byte*) pData);
1261 pPlayerVideoEventArg->SetSizeOfBuffer((int) streamSize);
1262 pPlayerVideoEventArg->SetDim(dimension);
1263 pPlayerVideoEventArg->SetPixelFormat(__videoPixelFormat);
1264 pPlayerVideoEventArg->SetResult(r);
1265 result = __pPlayerVideoEvent->FireAsync(*pPlayerVideoEventArg);
1266 SysTryCatch(NID_MEDIA, result == E_SUCCESS, , result, "[%s] Propagating", GetErrorMessage(r));
1268 else if (event == _PLAYER_VIDEO_EVENT_ERROR )
1270 pPlayerVideoEventArg->SetVideoEventType(_PLAYER_VIDEO_EVENT_ERROR);
1271 pPlayerVideoEventArg->SetResult(r);
1272 result = __pPlayerVideoEvent->FireAsync(*pPlayerVideoEventArg);
1273 SysTryCatch(NID_MEDIA, result == E_SUCCESS, , result, "[%s] Propagating", GetErrorMessage(r));
1275 else if (event == _PLAYER_VIDEO_EVENT_DECODED_WITHOUT_DATA )
1277 pPlayerVideoEventArg->SetVideoEventType(_PLAYER_VIDEO_EVENT_DECODED_WITHOUT_DATA);
1278 pPlayerVideoEventArg->SetResult(r);
1279 result = __pPlayerVideoEvent->FireAsync(*pPlayerVideoEventArg);
1280 SysTryCatch(NID_MEDIA, result == E_SUCCESS, , result, "[%s] Propagating", GetErrorMessage(r));
1284 SysTryCatch(NID_MEDIA, false, , E_SYSTEM, "[E_SYSTEM] A system error has been occured.");
1293 if (pPlayerVideoEventArg)
1295 delete pPlayerVideoEventArg;
1296 pPlayerVideoEventArg = null;
1304 _PlayerImpl::CreatePlayerAndSetCallBack(void)
1306 result r = E_SUCCESS;
1307 int err = ::PLAYER_ERROR_NONE;
1309 err = player_create(&__hPlayer);
1310 r = MapExceptionToResult(err);
1312 SysTryReturn(NID_MEDIA, r == E_SUCCESS, r, r, "player_create failed");
1314 err = player_set_completed_cb(__hPlayer, PlayerCompletedCallBack, (void *)this);
1315 SysTryCatch(NID_MEDIA, err == ::PLAYER_ERROR_NONE, r = E_SYSTEM,E_SYSTEM,
1316 "[E_SYSTEM] A system error has been occurred. Failed to perform player_set_completed_cb operation.");
1318 err = player_set_interrupted_cb(__hPlayer, PlayerInterruptedCallBack, (void *)this);
1319 SysTryCatch(NID_MEDIA, err == ::PLAYER_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
1320 "[E_SYSTEM] A system error has been occurred. Failed to perform player_set_interrupted_cb operation.");
1322 err = player_set_error_cb(__hPlayer, PlayerErrorCallBack, (void *)this);
1323 SysTryCatch(NID_MEDIA, err == ::PLAYER_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
1324 "[E_SYSTEM] A system error has been occurred. Failed to perform player_set_error_cb operation.");
1326 if (__videoEventCreated)
1328 err = player_set_video_frame_decoded_cb(__hPlayer, PlayerVideoFrameDecodedCallBack, (void *)this);
1329 SysTryCatch(NID_MEDIA, err == ::PLAYER_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
1330 "[E_SYSTEM] A system error has been occurred. Failed to perform player_video_frame_decoded_cb operation");
1334 player_destroy(__hPlayer);
1338 //Tizen->Osp Error Code conversion
1340 _PlayerImpl::MapExceptionToPlayerErrorReason(int reason)
1342 //All the fall through are intentional
1346 case ::PLAYER_ERROR_NONE:
1347 return PLAYER_ERROR_NONE;
1351 case ::PLAYER_ERROR_OUT_OF_MEMORY:
1352 return PLAYER_ERROR_OUT_OF_MEMORY;
1356 case ::PLAYER_ERROR_INVALID_PARAMETER:
1359 case ::PLAYER_ERROR_INVALID_URI:
1361 //Not supported file format
1362 case ::PLAYER_ERROR_NOT_SUPPORTED_FILE:
1364 //No such file or directory
1365 case ::PLAYER_ERROR_NO_SUCH_FILE:
1366 return PLAYER_ERROR_INVALID_DATA;
1369 //Streaming connection failed
1370 case ::PLAYER_ERROR_CONNECTION_FAILED:
1371 return PLAYER_ERROR_CONNECTION_LOST;
1374 case ::PLAYER_ERROR_DRM_EXPIRED:
1375 return PLAYER_ERROR_RIGHT_EXPIRED;
1378 case ::PLAYER_ERROR_DRM_NO_LICENSE:
1379 return PLAYER_ERROR_RIGHT_NO_LICENSE;
1382 case ::PLAYER_ERROR_DRM_FUTURE_USE:
1383 return PLAYER_ERROR_RIGHT_FUTURE_USE;
1386 //Sound policy error
1387 case ::PLAYER_ERROR_SOUND_POLICY:
1389 //Video capture failure
1390 case ::PLAYER_ERROR_VIDEO_CAPTURE_FAILED:
1393 case ::PLAYER_ERROR_INVALID_OPERATION:
1395 //Seek operation failure
1396 case ::PLAYER_ERROR_SEEK_FAILED:
1399 case ::PLAYER_ERROR_INVALID_STATE:
1402 return PLAYER_ERROR_DEVICE_FAILED;
1408 _PlayerImpl::MapExceptionToResult(int reason)
1410 //All the fall through are intentional
1414 case ::PLAYER_ERROR_NONE:
1418 case ::PLAYER_ERROR_OUT_OF_MEMORY:
1419 return E_OUT_OF_MEMORY;
1422 case ::PLAYER_ERROR_INVALID_PARAMETER:
1423 return E_INVALID_ARG;
1425 //No such file or directory
1426 case ::PLAYER_ERROR_NO_SUCH_FILE:
1427 return E_FILE_NOT_FOUND;
1430 case ::PLAYER_ERROR_INVALID_OPERATION:
1434 case ::PLAYER_ERROR_INVALID_STATE:
1435 return E_INVALID_STATE;
1437 //Not supported file format
1438 case ::PLAYER_ERROR_NOT_SUPPORTED_FILE:
1439 return E_UNSUPPORTED_FORMAT;
1442 case ::PLAYER_ERROR_INVALID_URI:
1443 return E_FILE_NOT_FOUND;
1445 //Sound policy error
1446 case ::PLAYER_ERROR_SOUND_POLICY:
1447 return E_DEVICE_BUSY;
1449 //Streaming connection failed
1450 case ::PLAYER_ERROR_CONNECTION_FAILED:
1451 return E_CONNECTION_FAILED;
1454 //Seek operation failure
1455 case ::PLAYER_ERROR_SEEK_FAILED:
1456 return E_INVALID_DATA;
1458 //Video capture failure
1459 case ::PLAYER_ERROR_VIDEO_CAPTURE_FAILED:
1460 return E_OPERATION_FAILED;
1463 case ::PLAYER_ERROR_DRM_EXPIRED:
1464 return E_RIGHT_EXPIRED;
1467 case ::PLAYER_ERROR_DRM_NO_LICENSE:
1468 return E_RIGHT_NO_LICENSE;
1471 case ::PLAYER_ERROR_DRM_FUTURE_USE:
1472 return E_RIGHT_FUTURE_USE;
1483 _PlayerImpl::PlayerPreparedCallBack(void *pUserData)
1485 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1486 _PlayerImpl *pPlayerImpl = (_PlayerImpl *)pUserData;
1487 pPlayerImpl->HandlePlayerPrepared(0);
1491 _PlayerImpl::PlayerCompletedCallBack(void *pUserData)
1493 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1494 _PlayerImpl *pPlyarImpl = (_PlayerImpl *)pUserData;
1495 pPlyarImpl->HandlePlayerCompleted();
1499 _PlayerImpl::PlayerInterruptedCallBack(player_interrupted_code_e code, void *pUserData)
1501 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1502 _PlayerImpl *pPlyarImpl = (_PlayerImpl *)pUserData;
1505 case PLAYER_INTERRUPTED_COMPLETED:
1506 // Interrupt completed
1507 if (!(pPlyarImpl->__interruptFlag))
1509 pPlyarImpl->HandlePlayerReleased();
1511 pPlyarImpl->__interruptFlag = false;
1513 case PLAYER_INTERRUPTED_BY_CALL:
1514 //Interrupted by incoming call
1515 //Intentional fall through
1516 pPlyarImpl->__interruptFlag = true;
1517 case PLAYER_INTERRUPTED_BY_MEDIA:
1518 //Interrupted by another application
1519 //Intentional fall through
1520 case PLAYER_INTERRUPTED_BY_RESOURCE_CONFLICT:
1521 //Interrupted by resource conflict
1522 //Intentional fall through
1523 case PLAYER_INTERRUPTED_BY_EARJACK_UNPLUG:
1524 //Interrupted by earjack unplug
1525 pPlyarImpl->HandlePlayerAudioFocusChanged();
1527 case PLAYER_INTERRUPTED_BY_EMERGENCY:
1528 //Interrupted by emergency
1529 //Intentional fall through
1530 case PLAYER_INTERRUPTED_BY_ALARM:
1531 //Interrupted by alarm
1532 pPlyarImpl->HandlePlayerInterrupted();
1535 SysLog(NID_MEDIA, "Player interrupt is not set.");
1540 _PlayerImpl::PlayerErrorCallBack(int errorCode, 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 if (((errorCode == ::PLAYER_ERROR_DRM_EXPIRED) ||
1545 (errorCode == ::PLAYER_ERROR_DRM_NO_LICENSE) ||
1546 (errorCode == ::PLAYER_ERROR_DRM_FUTURE_USE) ||
1547 (errorCode == ::PLAYER_ERROR_NOT_SUPPORTED_FILE) ||
1548 (errorCode == ::PLAYER_ERROR_INVALID_URI) ||
1549 (errorCode == ::PLAYER_ERROR_NO_SUCH_FILE)) &&
1550 (pPlayerImpl->__isAsync == true))
1552 pPlayerImpl->HandlePlayerPrepared(errorCode);
1556 pPlayerImpl->HandlePlayerError(errorCode);
1560 _PlayerImpl::PlayerBufferingCallBack(int percent, void *pUserData)
1562 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1563 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);
1564 _PlayerImpl *pPlyarImpl = (_PlayerImpl *)pUserData;
1565 pPlyarImpl->HandlePlayerBuffering(percent);
1568 _PlayerImpl::PlayerSubtitleUpdatedCallBack(unsigned long duration, char *pText, void *pUserData)
1570 SysLog(NID_MEDIA, "PlayerSubtitleUpdatedCallBack has started.");
1573 _PlayerImpl::PlayerVideoCapturedCallBack(unsigned char *pData, int width, int height, unsigned int size, void *pUserData)
1575 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1576 SysTryReturn(NID_MEDIA, pData, , E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. pData is null.");
1577 SysTryReturn(NID_MEDIA, width && height && size, , E_INVALID_ARG,
1578 "[E_INVALID_ARG] Invalid argument is used. hieght = %d or width = %d size = %d", width, height, size);
1579 _PlayerImpl *pPlyarImpl = (_PlayerImpl *)pUserData;
1580 pPlyarImpl->HandlePlayerVideoCaptured(pData, width , height, size);
1583 _PlayerImpl::PlayerVideoFrameDecodedCallBack(unsigned char *pData, int width, int height, unsigned int size, void *pUserData)
1585 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1586 SysTryReturn(NID_MEDIA, pData, , E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. pData is null.");
1587 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);
1588 _PlayerImpl *pPlyarImpl = (_PlayerImpl *)pUserData;
1589 pPlyarImpl->HandlePlayerVideoFrameDecoded(pData, width , height, size);
1592 _PlayerImpl::PlayerAudioFrameDecodedCallBack(unsigned char *pData, unsigned int size, void *pUserData)
1597 _PlayerImpl::PlayerSeekCompletedCallBack(void *pUserData)
1599 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occurred. pUserData is null.");
1600 _PlayerImpl *pPlyarImpl = (_PlayerImpl *)pUserData;
1601 pPlyarImpl->HandlePlayerSeekCompleted();
1604 //Tizen Handle Functions
1606 _PlayerImpl::HandlePlayerPrepared(int errorCode)
1608 int err = ::PLAYER_ERROR_NONE;
1609 result r = E_SUCCESS;
1611 err = player_get_state(__hPlayer, &__corePlayerCurState);
1612 r = MapExceptionToResult(err);
1613 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), err);
1615 r = MapExceptionToResult(errorCode);
1618 __currentState = PLAYER_STATE_OPENED;
1622 SysLog(NID_MEDIA, "[%s] Failed to perform player_prepare_async with error code (%d).", GetErrorMessage(r), errorCode);
1623 __currentState = __preState;
1625 SendEvent(_PLAYER_EVENT_OPENED, r);
1629 _PlayerImpl::HandlePlayerCompleted(void)
1631 player_stop(__hPlayer);
1632 __currentState = PLAYER_STATE_ENDOFCLIP;
1633 SendEvent(_PLAYER_EVENT_ENDOFCLIP, 0);
1637 _PlayerImpl::HandlePlayerError(int errorCode)
1639 __currentState = PLAYER_STATE_ERROR;
1640 SendEvent(_PLAYER_EVENT_ERROR, MapExceptionToPlayerErrorReason(errorCode));
1644 _PlayerImpl::HandlePlayerBuffering(int percent)
1646 SendEvent(_PLAYER_EVENT_BUFFERING, percent);
1650 _PlayerImpl::HandlePlayerVideoCaptured(unsigned char *pData, int width, int height, unsigned int size)
1652 SysLog(NID_MEDIA, "The current value of width is %d ", width);
1653 SysLog(NID_MEDIA, "The current value of height is %d", height);
1654 SysLog(NID_MEDIA, "The current value of size is %d", size);
1656 result r = E_SUCCESS;
1657 std::unique_ptr<byte[]> pOputPtr;
1659 int err = ::PLAYER_ERROR_NONE;
1661 err = player_get_state(__hPlayer, &__corePlayerCurState);
1662 r = MapExceptionToResult(err);
1663 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), err);
1665 if (__corePlayerCurState == ::PLAYER_STATE_PLAYING)
1667 err = player_pause(__hPlayer);
1668 r = MapExceptionToResult(err);
1669 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_pause operation with - 0x%x", GetErrorMessage(r), err);
1671 err = player_get_state(__hPlayer, &__corePlayerCurState);
1672 r = MapExceptionToResult(err);
1673 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with - 0x%x", GetErrorMessage(r), err);
1676 SysTryCatch(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_PAUSED, r = E_INVALID_STATE, E_INVALID_STATE,
1677 "[E_INVALID_STATE] Player state is in an invalid state. Current state is %d", __corePlayerCurState);
1680 SysTryCatch(NID_MEDIA, !((width == 0) || (height == 0)), r = E_INVALID_DATA, E_INVALID_DATA,
1681 ("[E_INVALID_DATA] A error has been occurred. width or height size is wrong !"));
1683 //send frame to video event listenner
1686 MediaPixelFormat srcFmt = MEDIA_PIXEL_FORMAT_RGB888;
1687 unsigned int frameSize = width*height*4;
1688 if (frameSize == size)
1690 srcFmt = MEDIA_PIXEL_FORMAT_BGRA8888;
1693 if (__videoPixelFormat == BITMAP_PIXEL_FORMAT_RGB565 )
1695 _ColorConverter cvt;
1696 // Converter construction
1697 r = cvt.Construct(srcFmt, width, height,
1698 MEDIA_PIXEL_FORMAT_RGB565LE, width, height);
1699 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1700 // Convert to output format
1701 pOputPtr.reset(cvt.ConvertN((byte *)pData, size, streamSize));
1702 r = GetLastResult();
1703 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1707 _ColorConverter cvt;
1708 r = cvt.Construct(srcFmt, width, height,
1709 MEDIA_PIXEL_FORMAT_BGRA8888, width, height);
1710 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1711 // Convert to output format
1712 pOputPtr.reset(cvt.ConvertN((byte *)pData, size, streamSize));
1713 r = GetLastResult();
1714 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1716 SysTryCatch(NID_MEDIA, pOputPtr.get(), r = E_INVALID_DATA, E_INVALID_DATA, "[E_INVALID_DATA] A error has been occurred. pOputPtr is null.");
1717 r = SendCapturedVideoFrame( _PLAYER_VIDEO_EVENT_DECODED, pOputPtr.get(), streamSize, width, height, E_SUCCESS);
1718 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s]Propagating", GetErrorMessage(r));
1722 r = SendCapturedVideoFrame( _PLAYER_VIDEO_EVENT_DECODED_WITHOUT_DATA, pData, size, width, height, E_SUCCESS);
1723 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s]Propagating", GetErrorMessage(r));
1725 __currentState = PLAYER_STATE_PAUSED;
1728 __isStateChangeForVideoCapture = false;
1729 SysLog(NID_MEDIA, "__isStateChangeForVideoCapture is %d",__isStateChangeForVideoCapture);
1733 _PlayerImpl::HandlePlayerVideoFrameDecoded(unsigned char *pData, int width, int height, unsigned int size)
1735 SysLog(NID_MEDIA, "The current value of width is %d ", width);
1736 SysLog(NID_MEDIA, "The current value of height is %d", height);
1737 SysLog(NID_MEDIA, "The current value of size is %d", size);
1739 result r = E_SUCCESS;
1740 if (__isStateChangeForVideoCapture)
1742 // caused by PlayerVideoCapturedCallBack()
1743 SysLog(NID_MEDIA, "Skip HandlePlayerVideoFrameDecoded()");
1748 r = SendCapturedVideoFrame( _PLAYER_VIDEO_EVENT_DECODED, pData, size, width, height, E_SUCCESS);
1749 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s]Propagating", GetErrorMessage(r));
1753 SendCapturedVideoFrame( _PLAYER_VIDEO_EVENT_DECODED_WITHOUT_DATA, pData, size, width, height, E_SUCCESS);
1754 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s]Propagating", GetErrorMessage(r));
1762 _PlayerImpl::HandlePlayerSeekCompleted(void)
1764 int err = ::PLAYER_ERROR_NONE;
1765 result r = E_SUCCESS;
1767 if (__pPlayerVideoEvent)
1769 SysLog(NID_MEDIA, "CaptureStatus is %d", __isStateChangeForVideoCapture);
1771 if (__isStateChangeForVideoCapture)
1773 err = player_capture_video(__hPlayer, PlayerVideoCapturedCallBack, (void*)this);
1774 r = MapExceptionToResult(err);
1775 SysTryLog(NID_MEDIA, r == E_SUCCESS,"[%s] Failed to perform player_capture_video operation with 0x%x", GetErrorMessage(r), err);
1781 SendEvent(_PLAYER_EVENT_SEEKTO, r);
1785 SendEvent(_PLAYER_EVENT_SEEKTO, E_SYSTEM);
1790 _PlayerImpl::HandlePlayerInterrupted(void)
1792 int ret = ::PLAYER_ERROR_NONE;
1793 result r = E_SUCCESS;
1794 ret = player_get_state(__hPlayer, &__corePlayerCurState);
1795 r = MapExceptionToResult(ret);
1796 SysLog(NID_MEDIA, "[%s] Player state is %d", GetErrorMessage(r), __corePlayerCurState);
1797 if (__corePlayerCurState == ::PLAYER_STATE_PAUSED)
1799 SysLog(NID_MEDIA, "Setting player state to be paused");
1800 __currentState = PLAYER_STATE_PAUSED;
1801 SendEvent(_PLAYER_EVENT_INTERRUPTED, 0);
1803 else if (__corePlayerCurState == ::PLAYER_STATE_IDLE)
1805 SysLog(NID_MEDIA, "Setting player state to be Closed");
1806 __currentState = PLAYER_STATE_CLOSED;
1807 __isStreamingContent = false;
1808 __isOpenBuffer = false;
1809 __bufferDataSize = 0;
1811 SendEvent(_PLAYER_EVENT_INTERRUPTED, 0);
1815 SysLog(NID_MEDIA, "player state is %d so sending error", __currentState);
1816 ret = player_stop(__hPlayer);
1817 r = MapExceptionToResult(ret);
1818 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
1819 ret = player_unprepare(__hPlayer);
1820 r = MapExceptionToResult(ret);
1821 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
1822 __isStreamingContent = false;
1823 __isOpenBuffer = false;
1824 __bufferDataSize = 0;
1826 __currentState = PLAYER_STATE_ERROR;
1827 SendEvent(_PLAYER_EVENT_ERROR, PLAYER_ERROR_DEVICE_FAILED);
1832 _PlayerImpl::HandlePlayerAudioFocusChanged(void)
1834 int ret = ::PLAYER_ERROR_NONE;
1835 result r = E_SUCCESS;
1836 ret = player_get_state(__hPlayer, &__corePlayerCurState);
1837 r = MapExceptionToResult(ret);
1838 SysLog(NID_MEDIA, "[%s] Player state is - %d", GetErrorMessage(r), __corePlayerCurState);
1839 if (__corePlayerCurState == ::PLAYER_STATE_PAUSED)
1841 SysLog(NID_MEDIA, "Setting player state to be paused");
1842 __currentState = PLAYER_STATE_PAUSED;
1843 SendEvent(_PLAYER_EVENT_AUDIO_FOCUS_CHANGED, 0);
1845 else if (__corePlayerCurState == ::PLAYER_STATE_IDLE)
1847 SysLog(NID_MEDIA, "Setting player state to be Closed");
1848 __currentState = PLAYER_STATE_CLOSED;
1849 __isStreamingContent = false;
1850 __isOpenBuffer = false;
1851 __bufferDataSize = 0;
1853 SendEvent(_PLAYER_EVENT_AUDIO_FOCUS_CHANGED, 0);
1857 SysLog(NID_MEDIA, "player state is %d so sending error", __currentState);
1858 ret = player_stop(__hPlayer);
1859 r = MapExceptionToResult(ret);
1860 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
1861 ret = player_unprepare(__hPlayer);
1862 r = MapExceptionToResult(ret);
1863 SysTryLog(NID_MEDIA, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
1864 __isStreamingContent = false;
1865 __isOpenBuffer = false;
1866 __bufferDataSize = 0;
1868 __currentState = PLAYER_STATE_ERROR;
1869 SendEvent(_PLAYER_EVENT_ERROR, PLAYER_ERROR_DEVICE_FAILED);
1874 _PlayerImpl::HandlePlayerReleased(void)
1876 SendEvent(_PLAYER_EVENT_RELEASED, 0);
1880 _PlayerImpl::ConvertAudioCodec(char *pAudioCodec)
1882 if (!String::Compare(String(pAudioCodec), String("MPEG 1 Audio, Layer 3 (MP3)")))
1886 if (!String::Compare(String(pAudioCodec), String("MPEG 3 Audio, Layer 3 (MP3)")))
1890 if (!String::Compare(String(pAudioCodec),String("AAC")))
1894 if (!String::Compare(String(pAudioCodec),String("MPEG-4 AAC audio")))
1898 if (!String::Compare(String(pAudioCodec), String("Adaptive Multi Rate (AMR)")))
1900 return CODEC_AMR_NB;
1902 if (!String::Compare(String(pAudioCodec), String("WMA")))
1906 if (!String::Compare(String(pAudioCodec), String("WMA Version 8")))
1910 if (!String::Compare(String(pAudioCodec), String("WMA Version 9")))
1914 if (!String::Compare(String(pAudioCodec), String("Uncompressed 16-bit PCM audio")))
1918 if (!String::Compare(String(pAudioCodec), String("MIDI")))
1922 return CODEC_UNKNOWN;
1926 _PlayerImpl::ConvertVideoCodec(char *pVideoCodec)
1928 if (!String::Compare(String(pVideoCodec),String( "H263")))
1932 if (!String::Compare(String(pVideoCodec),String( "H.263")))
1936 if (!String::Compare(String(pVideoCodec), String("MPEG-4 video")))
1940 if (!String::Compare(String(pVideoCodec),String( "H.264 / AVC")))
1944 if (!String::Compare(String(pVideoCodec),String( "Microsoft Windows Media 9")))
1948 if (!String::Compare(String(pVideoCodec),String( "THEORA")))
1950 return CODEC_THEORA;
1952 return CODEC_UNKNOWN;
1957 _PlayerImpl::GetCurrentMediaStreamInfoN()
1959 result r = E_SUCCESS;
1960 int err = ::PLAYER_ERROR_NONE;
1961 MediaStreamInfo* pMediaStreamInfo = null;
1962 Tizen::Base::Collection::IList* pAudioList = null;
1963 Tizen::Base::Collection::IList* pVideoList = null;
1964 AudioStreamInfo* pAudioStream = null;
1965 VideoStreamInfo* pVideoStream = null;
1966 result audioStreamException = E_SUCCESS;
1967 result videoStreamException = E_SUCCESS;
1974 char *pToCollect = null;
1975 int sizeArtWork = 0;
1977 ByteBuffer* pImageByteBuffer = null;
1978 char* pAudioCodec = null;
1979 char* pVideoCodec = null;
1981 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
1983 err = player_get_state(__hPlayer, &__corePlayerCurState);
1984 r = MapExceptionToResult(err);
1985 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_state operation with 0x%x ", GetErrorMessage(r), err);
1987 SysTryCatch(NID_MEDIA, (__corePlayerCurState == ::PLAYER_STATE_PLAYING) || (__corePlayerCurState == ::PLAYER_STATE_PAUSED) || (__corePlayerCurState == ::PLAYER_STATE_READY) ,
1988 r = E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. Current state is %d", __corePlayerCurState);
1990 err = player_get_codec_info(__hPlayer, &pAudioCodec, &pVideoCodec);
1991 SysTryCatch(NID_MEDIA, err == ::PLAYER_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
1992 "[E_SYSTEM] A system error has been occurred. Failed to perform player_get_codec_info operation with 0x%x", err);
1994 pAudioList = new (std::nothrow) Tizen::Base::Collection::ArrayList();
1995 if (pAudioList && String::Compare(String(pAudioCodec),(String("unknown"))))
1997 SysLog(NID_MEDIA, "Audio Codec is %s",pAudioCodec);
1998 AudioChannelType channel = AUDIO_CHANNEL_TYPE_NONE;
1999 CodecType codec = CODEC_UNKNOWN;
2001 int samplingRate = 0;
2003 err = player_get_audio_stream_info(__hPlayer, &samplingRate, &channels, &bitrate);
2004 if (err != ::PLAYER_ERROR_NONE)
2006 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_audio_stream_info operation with 0x%x", err);
2012 channel = AUDIO_CHANNEL_TYPE_MONO;
2014 else if (channels == 2 )
2016 channel = AUDIO_CHANNEL_TYPE_STEREO;
2018 //Reserved for Audio CodecCodec
2019 codec = ConvertAudioCodec(pAudioCodec);
2020 SysLog(NID_MEDIA, "Channel is %d , bitrate is %d , sampling rate is %d, Codec is %d.",channel, bitrate, samplingRate, codec);
2021 pAudioStream = new (std::nothrow) Tizen::Media::AudioStreamInfo(codec, bitrate, samplingRate, channel);
2022 pAudioList->Add(*pAudioStream);
2030 pVideoList = new (std::nothrow) Tizen::Base::Collection::ArrayList();
2031 if (pVideoList && *pVideoCodec != '\0')
2033 CodecType codec = CODEC_UNKNOWN;
2038 SysLog(NID_MEDIA, "Video Codec is %s",pVideoCodec);
2040 err = player_get_video_size(__hPlayer, &width, &height);
2041 if (err != ::PLAYER_ERROR_NONE)
2043 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_video_size operation with 0x%x", err);
2047 err = player_get_video_stream_info(__hPlayer, &frameRate, &bitrate);
2048 if (err != ::PLAYER_ERROR_NONE)
2050 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_video_stream_info operation with 0x%x", err);
2054 codec = ConvertVideoCodec(pVideoCodec);
2055 SysLog(NID_MEDIA, "bitrate is %d, frame rate is %d, width is %d, height is %d, Codec is %d ",bitrate, frameRate, width, height, codec);
2056 float frameRateFloat = frameRate * 1.0;
2057 pVideoStream = new (std::nothrow) Tizen::Media::VideoStreamInfo(codec, width, height, bitrate, frameRateFloat);
2058 pVideoList->Add(*pVideoStream);
2067 //Obtain the Tag info
2068 err = player_get_content_info(__hPlayer, PLAYER_CONTENT_INFO_ARTIST, &pToCollect);
2069 if (err != ::PLAYER_ERROR_NONE)
2071 SysLog(NID_MEDIA, "Failed to perform player_get_content_info operation with 0x%x", err);
2073 else if (pToCollect)
2075 SysTryLog(NID_MEDIA, false, "Artist is %s ", pToCollect);
2076 strArtist.Append(pToCollect);
2080 err = player_get_content_info(__hPlayer, PLAYER_CONTENT_INFO_TITLE, &pToCollect);
2081 if (err != ::PLAYER_ERROR_NONE)
2083 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_content_info operation with 0x%x", err);
2085 else if (pToCollect)
2087 SysLog(NID_MEDIA, "Title is %s ", pToCollect);
2088 strTitle.Append(pToCollect);
2092 err = player_get_content_info(__hPlayer, PLAYER_CONTENT_INFO_ALBUM, &pToCollect);
2093 if (err != ::PLAYER_ERROR_NONE)
2095 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_content_info operation with 0x%x", err);
2097 else if (pToCollect)
2099 SysLog(NID_MEDIA, "Album is %s ", pToCollect);
2100 strAlbum.Append(pToCollect);
2104 err = player_get_content_info(__hPlayer, PLAYER_CONTENT_INFO_GENRE, &pToCollect);
2105 if (err != ::PLAYER_ERROR_NONE)
2107 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_content_info operation with 0x%x", err);
2109 else if (pToCollect)
2111 SysLog(NID_MEDIA, "Genre is %s ", pToCollect);
2112 strGenre.Append(pToCollect);
2116 err = player_get_content_info(__hPlayer, PLAYER_CONTENT_INFO_AUTHOR, &pToCollect);
2117 if (err != ::PLAYER_ERROR_NONE)
2119 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_content_info operation with 0x%x", err);
2121 else if (pToCollect)
2123 SysLog(NID_MEDIA, "Author is %s ", pToCollect);
2124 strAuthor.Append(pToCollect);
2128 err = player_get_content_info(__hPlayer, PLAYER_CONTENT_INFO_YEAR, &pToCollect);
2129 if (err != ::PLAYER_ERROR_NONE)
2131 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_content_info operation with 0x%x", err);
2133 else if (pToCollect)
2135 year = atoi(pToCollect);
2136 SysLog(NID_MEDIA, "Year is %d ", year);
2141 err = player_get_album_art(__hPlayer, (void **)&pToCollect, &sizeArtWork);
2142 if (err != ::PLAYER_ERROR_NONE)
2144 SysTryLog(NID_MEDIA, false, "Failed to perform player_get_album_art operation with 0x%x", err);
2146 else if (pToCollect && sizeArtWork > 0)
2148 SysLog(NID_MEDIA, "there is art work so packing that in bytebuffer size of the ArtWork is %d", sizeArtWork);
2149 pImageByteBuffer = new (std::nothrow) ByteBuffer;
2150 if (pImageByteBuffer)
2152 pImageByteBuffer->Construct(sizeArtWork);
2153 pImageByteBuffer->SetArray((const byte *) pToCollect, 0, sizeArtWork);
2154 pImageByteBuffer->Flip();
2158 pMediaStreamInfo = new (std::nothrow) MediaStreamInfo(strTitle, strArtist, strAlbum,
2159 strGenre, year, pImageByteBuffer,
2160 pAudioList, pVideoList, audioStreamException, videoStreamException);
2163 return pMediaStreamInfo;
2177 _PlayerImpl::SetAudioStreamType(AudioStreamType type)
2179 result r = E_SUCCESS;
2180 int ret = ::PLAYER_ERROR_NONE;
2182 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
2184 ret = player_set_sound_type(__hPlayer, _AudioManagerConvert::ConvertAudioStreamType2SoundType(type));
2185 r = MapExceptionToResult(ret);
2186 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_set_sound_type operation with 0x%x", GetErrorMessage(r), ret);
2193 _PlayerImpl::OpenUrlAsync(const Tizen::Base::String& url, const Tizen::Base::Collection::IMap* pHeader)
2195 result r = E_SUCCESS;
2197 int err = ::PLAYER_ERROR_NONE;
2198 Tizen::Base::String scheme;
2199 bool containsCookie = false;
2200 bool containsUserAgent = false;
2201 std::unique_ptr<const String> pCookieValue;
2202 std::unique_ptr<const String> pUserAgentValue;
2203 std::unique_ptr<char[]> pCookieChars;
2204 std::unique_ptr<char[]> pUsetAgentChars;
2205 std::unique_ptr<char[]> pInputFilePath;
2207 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
2209 err = player_get_state(__hPlayer, &__corePlayerCurState);
2210 r = MapExceptionToResult(err);
2211 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_getstate operation with - 0x%x", GetErrorMessage(r), err);
2213 SysTryReturn(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_IDLE,
2214 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. returned state is %d", __corePlayerCurState);
2216 SysTryReturn(NID_MEDIA, !url.IsEmpty(), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. Input url is empty");
2220 r = url.SubString(0, 4, scheme);
2221 SysTryReturn(NID_MEDIA, r == E_SUCCESS, E_UNSUPPORTED_PROTOCOL , E_UNSUPPORTED_PROTOCOL, "[%s] Failed to perform SubString operation", GetErrorMessage(E_UNSUPPORTED_PROTOCOL));
2222 SysTryReturn(NID_MEDIA, scheme.Equals(L"http", false), E_UNSUPPORTED_PROTOCOL, E_UNSUPPORTED_PROTOCOL, "[E_UNSUPPORTED_PROTOCOL] error has been occurred.");
2224 const HashMap *pMapHeader = dynamic_cast<const HashMap *>(pHeader);
2225 SysTryCatch(NID_MEDIA, pMapHeader != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred.");
2226 pMapHeader->ContainsKey(String("Cookie"), containsCookie);
2229 SysLogException(NID_MEDIA, r, "[%s] Failed to perform HashMap::ContainsKey operation", GetErrorMessage(r));
2231 else if (containsCookie)
2233 pCookieValue.reset(dynamic_cast<const String *>(pMapHeader->GetValue(String("Cookie"))));
2236 pCookieChars.reset(_StringConverter::CopyToCharArrayN(*(pCookieValue.get())));
2237 if (pCookieChars.get())
2239 err = player_set_streaming_cookie(__hPlayer, pCookieChars.get(),pCookieValue->GetLength());
2244 r = GetLastResult();
2245 SysLogException(NID_MEDIA, r, "[%s]Failed to perform HashMap::GetValue(Cookie) operation.", GetErrorMessage(r));
2248 pMapHeader->ContainsKey(String("User-Agent"), containsUserAgent);
2251 SysLogException(NID_MEDIA, r, "[%s]Failed to perform HashMap::ContainsKey operation.", GetErrorMessage(r));
2253 else if (containsUserAgent)
2255 pUserAgentValue.reset(dynamic_cast<const String *>(pMapHeader->GetValue(String("User-Agent"))));
2256 if (pUserAgentValue.get())
2258 pUsetAgentChars.reset(_StringConverter::CopyToCharArrayN(*(pUserAgentValue.get())));
2259 err = player_set_streaming_cookie(__hPlayer, pUsetAgentChars.get(),pUserAgentValue->GetLength());
2263 r = GetLastResult();
2264 SysLogException(NID_MEDIA, r, "[%s] Failed to perform HashMap::GetValue(User-Agent) operation.", GetErrorMessage(r));
2270 r = url.SubString(0, 4, scheme);
2271 SysTryReturn(NID_MEDIA, r == E_SUCCESS, E_UNSUPPORTED_PROTOCOL , E_UNSUPPORTED_PROTOCOL, "[%s] Failed to perform SubString operation", GetErrorMessage(E_UNSUPPORTED_PROTOCOL));
2272 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.");
2275 pInputFilePath.reset(_StringConverter::CopyToCharArrayN(url));
2277 __isStreamingContent = true;
2278 __preState = __currentState;
2279 __currentState = PLAYER_STATE_OPENING;
2281 r = OpenInputData(std::move(pInputFilePath));
2282 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform OpenInputData operation.", GetErrorMessage(r));
2286 __isStreamingContent = false;
2287 __currentState = PLAYER_STATE_INITIALIZED;
2292 _PlayerImpl::PlayerPdMessageCallBack(player_pd_message_type_e type, void* pUserData)
2294 SysTryReturn(NID_MEDIA, pUserData, , E_SYSTEM, "[E_SYSTEM] A system error has been occured. pUserData is NULL!!");
2295 _PlayerImpl *pPlyarImpl = (_PlayerImpl *)pUserData;
2296 pPlyarImpl->HandlePdMessageCallBack(type);
2300 _PlayerImpl::HandlePdMessageCallBack(player_pd_message_type_e type)
2302 result r = E_SUCCESS;
2303 SysTryReturn(NID_MEDIA, __pPlayerProgressiveDownloadEvent != null, E_SYSTEM, E_SYSTEM,
2304 "[E_SYSTEM] A system error has been occurred. PlayerProgressiveEvent is null.");
2305 _PlayerProgressiveDownloadEventArg* pPlayerProgressiveDownloadEventArg = null;
2306 pPlayerProgressiveDownloadEventArg = new (std::nothrow) _PlayerProgressiveDownloadEventArg;
2307 SysTryCatch(NID_MEDIA, __pPlayerProgressiveDownloadEvent != null , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
2308 "[E_OUT_OF_MEMORY] Memory allocation failed.");
2311 case PLAYER_PD_STARTED:
2312 SysLog(NID_MEDIA, "Type is set to PLAYER_PD_STARTED");
2313 pPlayerProgressiveDownloadEventArg->SetEventType(PLAYER_PROGRESSIVE_DOWNLOAD_EVENT_STARTED);
2314 r = __pPlayerProgressiveDownloadEvent->FireAsync(*pPlayerProgressiveDownloadEventArg);
2315 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2317 case PLAYER_PD_COMPLETED:
2318 SysLog(NID_MEDIA, "Type is set to PLAYER_PD_COMPLETED");
2322 __pPdTimer->Cancel();
2323 __isProgressiveTimerStarted = false;
2325 pPlayerProgressiveDownloadEventArg->SetEventType(PLAYER_PROGRESSIVE_DOWNLOAD_EVENT_COMPLETED);
2326 pPlayerProgressiveDownloadEventArg->SetResult(E_SUCCESS);
2327 r = __pPlayerProgressiveDownloadEvent->FireAsync(*pPlayerProgressiveDownloadEventArg);
2328 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2331 SysLogException(NID_MEDIA, E_SYSTEM, "A system error has been occurred. Never come here player_pd_message is wrong -%d", type);
2337 if (pPlayerProgressiveDownloadEventArg)
2339 delete pPlayerProgressiveDownloadEventArg;
2340 pPlayerProgressiveDownloadEventArg = null;
2346 _PlayerImpl::OnTimerExpired(Timer& timer)
2348 int ret = ::PLAYER_ERROR_NONE;
2349 result r = E_SUCCESS;
2350 unsigned long currentSize = 0;
2351 unsigned long totalSize = 0;
2352 unsigned int callbackSizeQuantum = 0;
2353 _PlayerProgressiveDownloadEventArg* pPlayerProgressiveDownloadEventArg = null;
2355 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
2357 ret = player_get_progressive_download_status(__hPlayer, ¤tSize, &totalSize);
2358 r = MapExceptionToResult(ret);
2359 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_get_progressive_download_status operation with - 0x%x", GetErrorMessage(r), ret);
2360 SysLog(NID_MEDIA, "Current Size is %d Total Size is %d", currentSize, totalSize);
2361 callbackSizeQuantum = (totalSize * __pdCallbackRate ) / 100;
2362 if (__pdNextCallbackSize == 0)
2364 __pdNextCallbackSize = __pdNextCallbackSize + callbackSizeQuantum;
2366 if (currentSize >= __pdNextCallbackSize)
2368 pPlayerProgressiveDownloadEventArg = new (std::nothrow) _PlayerProgressiveDownloadEventArg;
2369 SysTryCatch(NID_MEDIA, __pPlayerProgressiveDownloadEvent != null , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
2370 "[E_OUT_OF_MEMORY] Memory allocation failed.");
2371 pPlayerProgressiveDownloadEventArg->SetEventType(PLAYER_PROGRESSIVE_DOWNLOAD_EVENT_IN_PROGRESS);
2372 pPlayerProgressiveDownloadEventArg->SetDownloadedSize(currentSize);
2373 pPlayerProgressiveDownloadEventArg->SetTotalSize(totalSize);
2374 r = __pPlayerProgressiveDownloadEvent->FireAsync(*pPlayerProgressiveDownloadEventArg);
2375 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2376 __pdNextCallbackSize = __pdNextCallbackSize + callbackSizeQuantum;
2379 r = timer.Start(_PLAYER_PROGRESSIVE_DOWNLOAD_TIMER_100_MS);
2380 SysTryReturn(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2383 if (pPlayerProgressiveDownloadEventArg)
2385 delete pPlayerProgressiveDownloadEventArg;
2386 pPlayerProgressiveDownloadEventArg = null;
2391 _PlayerImpl::OpenUrlAsync(Player* pPlayerInstance, const Tizen::Base::String& url, const Tizen::Base::String& filePath, IPlayerProgressiveDownloadListener& listener, const Tizen::Base::Collection::IMap* pHeader)
2393 result r = E_SUCCESS;
2395 int err = ::PLAYER_ERROR_NONE;
2396 Tizen::Base::String scheme;
2397 bool containsCookie = false;
2398 bool containsUserAgent = false;
2399 std::unique_ptr<char[]> pProgressiveDownloadPath;
2400 std::unique_ptr<const String> pCookieValue;
2401 std::unique_ptr<const String> pUserAgentValue;
2402 std::unique_ptr<char[]> pCookieChars;
2403 std::unique_ptr<char[]> pUsetAgentChars;
2404 std::unique_ptr<char[]> pInputFilePath;
2406 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
2408 SysTryReturn(NID_MEDIA, pPlayerInstance != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM]A system error has been occurred. Player instance is null.");
2410 pProgressiveDownloadPath.reset(_StringConverter::CopyToCharArrayN(filePath));
2411 SysTryReturn(NID_MEDIA, pProgressiveDownloadPath.get() != null, E_INVALID_ARG, E_INVALID_ARG,
2412 "[E_INVALID_ARG] Invalid argument is used. progressive download file path is wrong");
2414 err = player_get_state(__hPlayer, &__corePlayerCurState);
2415 r = MapExceptionToResult(err);
2416 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_getstate operation with - 0x%x", GetErrorMessage(r), err);
2418 SysTryReturn(NID_MEDIA, __corePlayerCurState == ::PLAYER_STATE_IDLE,
2419 E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. returned state is %d", __corePlayerCurState);
2421 SysTryReturn(NID_MEDIA, !url.IsEmpty(), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. Input url is empty");
2423 r = url.SubString(0, 4, scheme);
2424 SysTryReturn(NID_MEDIA, r == E_SUCCESS, E_UNSUPPORTED_PROTOCOL , E_UNSUPPORTED_PROTOCOL, "[%s] Failed to perform SubString operation", GetErrorMessage(E_UNSUPPORTED_PROTOCOL));
2425 SysTryReturn(NID_MEDIA, (scheme.Equals(L"http", false)), E_UNSUPPORTED_PROTOCOL, E_UNSUPPORTED_PROTOCOL, "[E_UNSUPPORTED_PROTOCOL] error has been occurred.");
2427 pInputFilePath.reset(_StringConverter::CopyToCharArrayN(url));
2429 __isStreamingContent = true;
2430 __isProgressiveContent = true;
2432 // Create progressive download Event
2433 __pPlayerProgressiveDownloadEvent.reset(new (std::nothrow) _PlayerProgressiveDownloadEvent);
2434 SysTryCatch(NID_MEDIA, __pPlayerProgressiveDownloadEvent != null , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
2435 "[E_OUT_OF_MEMORY] Memory allocation failed.");
2437 __pPdTimer.reset(new (std::nothrow) Timer);
2438 SysTryCatch(NID_MEDIA, __pPdTimer != null , r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
2439 __pPdTimer->Construct(*this);
2440 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
2442 r = __pPlayerProgressiveDownloadEvent->Construct(pPlayerInstance);
2443 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to construct PlayerProgressiveDownloadEvent.", GetErrorMessage(r));
2444 r = __pPlayerProgressiveDownloadEvent->AddListener(listener);
2445 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform PlayerProgressiveDownloadEvent AddListener operation.", GetErrorMessage(r));
2447 __pPlayerProgressiveDownloadListener = &listener;
2449 err = player_set_progressive_download_message_cb(__hPlayer, PlayerPdMessageCallBack, this);
2450 r = MapExceptionToResult(err);
2451 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_set_progressive_download_message_cb operation with - 0x%x", GetErrorMessage(r), err);
2453 err = player_set_progressive_download_path(__hPlayer, pProgressiveDownloadPath.get());
2454 r = MapExceptionToResult(err);
2455 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform player_set_progressive_download_path operation with - 0x%x", GetErrorMessage(r), err);
2459 const HashMap *pMapHeader = dynamic_cast<const HashMap *>(pHeader);
2460 SysTryCatch(NID_MEDIA, pMapHeader != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has been occurred.");
2461 pMapHeader->ContainsKey(String("Cookie"), containsCookie);
2464 SysLogException(NID_MEDIA, r, "[%s] Failed to perform HashMap::ContainsKey operation.", GetErrorMessage(r));
2466 else if (containsCookie)
2468 pCookieValue.reset(dynamic_cast<const String *>(pMapHeader->GetValue(String("Cookie"))));
2469 if (pCookieValue.get())
2471 pCookieChars.reset(_StringConverter::CopyToCharArrayN(*(pCookieValue.get())));
2472 if (pCookieChars.get())
2474 err = player_set_streaming_cookie(__hPlayer, pCookieChars.get(),pCookieValue->GetLength());
2479 r = GetLastResult();
2480 SysLogException(NID_MEDIA, r, "[%s] Failed to perform HashMap::GetValue(Cookie) operation.", GetErrorMessage(r));
2483 pMapHeader->ContainsKey(String("User-Agent"), containsUserAgent);
2486 SysLogException(NID_MEDIA, r, "[%s] Failed to perform HashMap::ContainsKey operation.", GetErrorMessage(r));
2488 else if (containsUserAgent)
2490 pUserAgentValue.reset(dynamic_cast<const String *>(pMapHeader->GetValue(String("User-Agent"))));
2491 if (pUserAgentValue.get())
2493 pUsetAgentChars.reset(_StringConverter::CopyToCharArrayN(*(pUserAgentValue.get())));
2494 err = player_set_streaming_user_agent(__hPlayer, pUsetAgentChars.get(),pUserAgentValue->GetLength());
2498 r = GetLastResult();
2499 SysLogException(NID_MEDIA, r, "[%s]HashMap::GetValue(User-Agent) Failed", GetErrorMessage(r));
2503 __preState = __currentState;
2504 __currentState = PLAYER_STATE_OPENING;
2506 r = OpenInputData(std::move(pInputFilePath));
2507 SysTryCatch(NID_MEDIA, r == E_SUCCESS, , r, "[%s] Failed to perform OpenInputData operation.", GetErrorMessage(r));
2511 __isStreamingContent = false;
2512 __currentState = PLAYER_STATE_INITIALIZED;
2517 _PlayerImpl::SetProgressiveDownloadIntervalByPercent(int percent)
2519 if((0 <= percent) && (percent <= 100))
2521 __pdCallbackRate = percent;
2526 _PlayerImpl::GetHttpStreamingDownloadProgress(void) const
2528 int returnValue = 0;
2530 int err = ::PLAYER_ERROR_NONE;
2531 player_state_e corePlayerCurState;
2532 result r = E_SUCCESS;
2534 SysAssertf(__hPlayer != null, "Not yet constructed! Construct() should be called before use");
2536 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));
2538 err = player_get_state(__hPlayer, &corePlayerCurState);
2539 r = MapExceptionToResult(err);
2540 SysTryReturn(NID_MEDIA, r == E_SUCCESS, -1, r, "[%s] Failed to perform player_getstate operation with - 0x%x", GetErrorMessage(r), err);
2542 SysTryReturn(NID_MEDIA, (corePlayerCurState == ::PLAYER_STATE_PLAYING) || (corePlayerCurState == ::PLAYER_STATE_PAUSED) ,
2543 -1, E_INVALID_STATE, "[E_INVALID_STATE] Player state is in an invalid state. Current state is %d", corePlayerCurState);
2545 err = player_get_streaming_download_progress(__hPlayer, &startValue, &returnValue);
2546 r = MapExceptionToResult(err);
2547 SysTryReturn(NID_MEDIA, r == E_SUCCESS, -1, r, "[%s] Failed to perform player_get_streaming_download_progress operation with - 0x%x", GetErrorMessage(r), err);