#include "media/base/tizen/media_player_bridge_capi.h"
#include "base/basictypes.h"
-#include "base/command_line.h"
#include "base/logging.h"
-#include "base/memory/shared_memory.h"
#include "base/message_loop/message_loop_proxy.h"
#include "base/strings/string_util.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/common/content_switches.h"
#include "media/base/efl/media_player_manager_efl.h"
#include "media/base/efl/media_player_util_efl.h"
#include "ui/gfx/geometry/size.h"
-#if defined(OS_TIZEN_MOBILE)
-#include <device/power.h>
-#endif
-
#if defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT)
#if defined(TIZEN_V_2_4)
#include <player_internal.h>
#elif defined(TIZEN_LEGACY_V_2_2_1)
#include <player_product.h>
#endif
-#endif //TIZEN_MULTIMEDIA_PIXMAP_SUPPORT
+#endif // TIZEN_MULTIMEDIA_PIXMAP_SUPPORT
+
namespace {
+
// Update duration every 100ms.
const int kDurationUpdateInterval = 100;
-}
-namespace media {
+enum PlayerState {
+ PLAYER_STATE_DELAYED_NULL,
+ PLAYER_STATE_DELAYED_PLAY,
+ PLAYER_STATE_DELAYED_PAUSE,
+};
+
struct ErrorList {
player_error_e error_code;
std::string error_message;
};
-// Modify this when new error information is added to |errorlist|.
-const int ERROR_MAX = 18;
-
-const struct ErrorList errorlist[ERROR_MAX] = {
+const struct ErrorList errorlist[] = {
{PLAYER_ERROR_OUT_OF_MEMORY, "PLAYER_ERROR_OUT_OF_MEMORY"},
{PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER"},
{PLAYER_ERROR_NO_SUCH_FILE, "PLAYER_ERROR_NO_SUCH_FILE"},
{PLAYER_ERROR_INVALID_OPERATION, "PLAYER_ERROR_INVALID_OPERATION"},
{PLAYER_ERROR_FILE_NO_SPACE_ON_DEVICE,
- "PLAYER_ERROR_FILE_NO_SPACE_ON_DEVICE"},
-#if defined(OS_TIZEN_MOBILE)
+ "PLAYER_ERROR_FILE_NO_SPACE_ON_DEVICE"},
{PLAYER_ERROR_FEATURE_NOT_SUPPORTED_ON_DEVICE,
- "PLAYER_ERROR_FEATURE_NOT_SUPPORTED_ON_DEVICE"},
-#endif
+ "PLAYER_ERROR_FEATURE_NOT_SUPPORTED_ON_DEVICE"},
{PLAYER_ERROR_SEEK_FAILED, "PLAYER_ERROR_SEEK_FAILED"},
{PLAYER_ERROR_INVALID_STATE, "PLAYER_ERROR_INVALID_STATE"},
{PLAYER_ERROR_NOT_SUPPORTED_FILE, "PLAYER_ERROR_NOT_SUPPORTED_FILE"},
{PLAYER_ERROR_DRM_NOT_PERMITTED, "PLAYER_ERROR_DRM_NOT_PERMITTED"},
{PLAYER_ERROR_RESOURCE_LIMIT, "PLAYER_ERROR_RESOURCE_LIMIT"}};
-// Called by player_prepare_async()
-void player_prepared_cb(void* user_data) {
- MediaPlayerBridgeCapi* player =
- static_cast<MediaPlayerBridgeCapi*>(user_data);
+const int ERROR_MAX = sizeof(errorlist) / sizeof(errorlist[0]);
+// Called by player_prepare_async()
+static void PlayerPreparedCb(void* data) {
+ media::MediaPlayerBridgeCapi* player =
+ static_cast<media::MediaPlayerBridgeCapi*>(data);
if (!player || player->IsPlayerDestructing())
return;
- player->OnCompletedPrepare();
+ player->OnPlayerPrepared();
}
#if defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT)
-static Eina_Bool notify_damage_updated_cb(void* data, int type, void* event) {
- MediaPlayerBridgeCapi* player = static_cast <MediaPlayerBridgeCapi*>(data);
+static Eina_Bool NotifyDamageUpdatedCb(void* data, int type, void* event) {
+ media::MediaPlayerBridgeCapi* player =
+ static_cast<media::MediaPlayerBridgeCapi*>(data);
if (!player)
return ECORE_CALLBACK_PASS_ON;
}
// Called by player_set_x11_display_pixmap()
-unsigned int pixmap_buffer_ready_cb(void *user_data) {
- MediaPlayerBridgeCapi* player =
- static_cast<MediaPlayerBridgeCapi*>(user_data);
-
+static unsigned int PixmapBufferReadyCb(void* data) {
+ media::MediaPlayerBridgeCapi* player =
+ static_cast<media::MediaPlayerBridgeCapi*>(data);
if (!player || player->IsPlayerDestructing())
return -1;
return player->GetPixmapID();
}
#else
-static void media_packet_decoded_cb(media_packet_h packet, void* data) {
+static void MediaPacketDecodedCb(media_packet_h packet, void* data) {
if (!packet) {
LOG(ERROR) << "media_packet handle is null";
return;
}
- MediaPlayerBridgeCapi* player = static_cast<MediaPlayerBridgeCapi*>(data);
+ media::MediaPlayerBridgeCapi* player =
+ static_cast<media::MediaPlayerBridgeCapi*>(data);
if (!player || player->IsPlayerDestructing()) {
media_packet_destroy(packet);
- LOG(ERROR) << "media_packet_decoded_cb - player handle is null";
+ LOG(ERROR) << "Player is NULL or destructing.";
return;
}
player->OnMediaPacketUpdated(packet);
#endif
// Called by player_set_completed_cb()
-void playback_complete_cb(void* user_data) {
- MediaPlayerBridgeCapi* player =
- static_cast<MediaPlayerBridgeCapi*>(user_data);
-
+static void PlaybackCompleteCb(void* data) {
+ media::MediaPlayerBridgeCapi* player =
+ static_cast<media::MediaPlayerBridgeCapi*>(data);
if (!player)
return;
}
// Called by player_set_play_position() / player_set_position()
-void seek_complete_cb(void* user_data) {
- MediaPlayerBridgeCapi* player =
- static_cast<MediaPlayerBridgeCapi*>(user_data);
-
+static void SeekCompletedCb(void* data) {
+ media::MediaPlayerBridgeCapi* player =
+ static_cast<media::MediaPlayerBridgeCapi*>(data);
if (!player)
return;
}
// Called by player_set_buffering_cb()
-void changed_buffering_status_cb(int percent, void *user_data) {
- MediaPlayerBridgeCapi* player =
- static_cast<MediaPlayerBridgeCapi*>(user_data);
-
+static void ChangedBufferingStatusCb(int percent, void* data) {
+ media::MediaPlayerBridgeCapi* player =
+ static_cast<media::MediaPlayerBridgeCapi*>(data);
if (!player)
return;
}
// Called by player_set_error_cb()
-void error_cb(int error_code, void *user_data) {
- MediaPlayerBridgeCapi* player =
- static_cast<MediaPlayerBridgeCapi*>(user_data);
-
+static void ErrorCb(int error_code, void* data) {
+ media::MediaPlayerBridgeCapi* player =
+ static_cast<media::MediaPlayerBridgeCapi*>(data);
if (!player)
return;
- player->OnHandleError(error_code, "error_cb");
+ player->OnHandleError(error_code, "ErrorCb");
}
// Called by player_set_interrupted_cb()
-void interrupt_cb(player_interrupted_code_e code, void *user_data) {
- MediaPlayerBridgeCapi* player =
- static_cast<MediaPlayerBridgeCapi*>(user_data);
-
+static void InterruptCb(player_interrupted_code_e code, void* data) {
+ media::MediaPlayerBridgeCapi* player =
+ static_cast<media::MediaPlayerBridgeCapi*>(data);
if (!player)
return;
// FIMXE: Add interrupt handling
}
+} // namespace
+
+namespace media {
+
//static
-MediaPlayerEfl* MediaPlayerEfl::CreatePlayer(
- int player_id, const GURL& url, double volume,
- MediaPlayerManager* manager, const std::string& user_agent) {
+MediaPlayerEfl* MediaPlayerEfl::CreatePlayer(int player_id, const GURL& url,
+ double volume,
+ MediaPlayerManager* manager,
+ const std::string& user_agent) {
LOG(INFO) << "MediaElement is using |CAPI| to play media";
return new MediaPlayerBridgeCapi(player_id, url, volume, manager, user_agent);
}
const std::string& user_agent)
: MediaPlayerEfl(player_id, manager_in),
#if defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT)
- pixmap_id_(0),
efl_pixmap_(0),
- m_damage(0),
- m_damageHandler(NULL),
+ damage_(0),
+ damage_handler_(NULL),
#else
previous_packet_(NULL),
#endif
main_loop_(base::MessageLoopProxy::current()),
player_(NULL),
- url_(url),
media_type_(0),
player_width_(0),
player_height_(0),
is_end_reached_(false),
is_file_url_(false),
is_paused_(true),
- is_pixmap_used_(true),
is_seeking_(false),
duration_(0),
seek_duration_(0),
playback_rate_(1.0),
- delayed_player_state_(0) {
- VLOG(1) << __FUNCTION__ << " : Player Id = " << GetPlayerId();
+ delayed_player_state_(PLAYER_STATE_DELAYED_NULL) {
int ret = player_create(&player_);
- if (ret == PLAYER_ERROR_NONE) {
- VLOG(1) << __FUNCTION__ << " : Create Player Success.";
- VLOG(1) << __FUNCTION__ << " : URL = " << url_.spec().c_str();
- player_set_uri(player_, url_.spec().c_str());
- player_set_sound_type(player_, SOUND_TYPE_MEDIA);
- player_set_volume(player_, (float)volume, (float)volume);
- if (player_set_streaming_user_agent(
- player_,
- user_agent.c_str(),
- user_agent.length()) != PLAYER_ERROR_NONE)
- LOG(ERROR) << "Unable to set streaming user agent.";
+ if (ret != PLAYER_ERROR_NONE) {
+ HandleError(ret, "player_create");
+ return;
+ }
+
+ if (url.SchemeIsFile())
+ is_file_url_ = true;
+
+ player_set_uri(player_, url.spec().c_str());
+ player_set_sound_type(player_, SOUND_TYPE_MEDIA);
+ player_set_volume(player_, static_cast<float>(volume),
+ static_cast<float>(volume));
+ if (player_set_streaming_user_agent(
+ player_,
+ user_agent.c_str(),
+ user_agent.length()) != PLAYER_ERROR_NONE)
+ LOG(ERROR) << "Unable to set streaming user agent.";
#if defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT)
- // Use Pixmap
- ret = player_set_x11_display_pixmap(player_,
- pixmap_buffer_ready_cb, this);
- if (ret != PLAYER_ERROR_NONE) {
- HandleError(ret, "player_set_x11_display_pixmap");
- return;
- }
+ ret = player_set_x11_display_pixmap(player_, PixmapBufferReadyCb, this);
+ if (ret != PLAYER_ERROR_NONE) {
+ HandleError(ret, "player_set_x11_display_pixmap");
+ return;
+ }
#else
- ret = player_set_media_packet_video_frame_decoded_cb(player_,
- media_packet_decoded_cb, this);
- if (ret != PLAYER_ERROR_NONE) {
- HandleError(ret, "player_set_media_packet_video_frame_decoded_cb");
- return;
- }
+ ret = player_set_media_packet_video_frame_decoded_cb(
+ player_, MediaPacketDecodedCb, this);
+ if (ret != PLAYER_ERROR_NONE) {
+ HandleError(ret, "player_set_media_packet_video_frame_decoded_cb");
+ return;
+ }
#endif
- player_set_completed_cb(player_, playback_complete_cb, this);
- player_set_buffering_cb(player_, changed_buffering_status_cb, this);
- player_set_interrupted_cb(player_, interrupt_cb, this);
- player_set_error_cb(player_, error_cb, this);
+
+ player_set_completed_cb(player_, PlaybackCompleteCb, this);
+ player_set_buffering_cb(player_, ChangedBufferingStatusCb, this);
+ player_set_interrupted_cb(player_, InterruptCb, this);
+ player_set_error_cb(player_, ErrorCb, this);
#if defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT)
#if defined(TIZEN_LEGACY_V_2_2_1)
- player_set_x11_display_visible (player_, true);
+ player_set_x11_display_visible (player_, true);
#else
- player_set_display_visible (player_, true);
+ player_set_display_visible (player_, true);
#endif
#endif
- if(url_.SchemeIsFile())
- is_file_url_ = true;
- manager()->OnReadyStateChange(GetPlayerId(),
- MediaPlayerEfl::ReadyStateHaveEnoughData);
- manager()->OnNetworkStateChange(GetPlayerId(),
- MediaPlayerEfl::NetworkStateLoaded);
-
- } else {
- HandleError(ret, "player_create");
- }
+ manager()->OnReadyStateChange(GetPlayerId(),
+ MediaPlayerEfl::ReadyStateHaveEnoughData);
+ manager()->OnNetworkStateChange(GetPlayerId(),
+ MediaPlayerEfl::NetworkStateLoading);
}
MediaPlayerBridgeCapi::~MediaPlayerBridgeCapi() {
- VLOG(1) << __FUNCTION__ << " : Player Id = " << GetPlayerId();
}
void MediaPlayerBridgeCapi::Destroy() {
- VLOG(1) << __FUNCTION__ << " : Player Id = " << GetPlayerId();
if (IsPlayerDestructing())
return;
destructing_ = true;
#endif
player_destroy(player_);
#if defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT)
- if (m_damage) {
- ecore_x_damage_free(m_damage);
- m_damage = 0;
+ if (damage_) {
+ ecore_x_damage_free(damage_);
+ damage_ = 0;
}
- if (m_damageHandler) {
- ecore_event_handler_del(m_damageHandler);
- m_damageHandler = NULL;
+ if (damage_handler_) {
+ ecore_event_handler_del(damage_handler_);
+ damage_handler_ = NULL;
}
if (efl_pixmap_.get()) {
efl_pixmap_ = NULL;
}
void MediaPlayerBridgeCapi::Play() {
- VLOG(1) << __FUNCTION__ << " : Player Id = " << GetPlayerId();
if (GetPlayerState() == PLAYER_STATE_IDLE) {
- if(delayed_player_state_ != 0) {
- delayed_player_state_ = DELAYED_PLAYER_STATE_PLAY;
+ if (delayed_player_state_ != PLAYER_STATE_DELAYED_NULL) {
+ delayed_player_state_ = PLAYER_STATE_DELAYED_PLAY;
return;
}
- delayed_player_state_ = DELAYED_PLAYER_STATE_PLAY;
- int ret = player_prepare_async(player_, player_prepared_cb, this);
+ delayed_player_state_ = PLAYER_STATE_DELAYED_PLAY;
+ int ret = player_prepare_async(player_, PlayerPreparedCb, this);
if (ret != PLAYER_ERROR_NONE)
HandleError(ret, "player_prepare_async");
return;
}
if (is_seeking_) {
- delayed_player_state_ = DELAYED_PLAYER_STATE_PLAY;
+ delayed_player_state_ = PLAYER_STATE_DELAYED_PLAY;
return;
}
}
if (player_start(player_) != PLAYER_ERROR_NONE) {
- LOG(ERROR) <<"Play() -> |player_start| failed";
+ LOG(ERROR) << "|player_start| failed";
return;
}
#if defined(OS_TIZEN_MOBILE)
- if (device_power_request_lock(POWER_LOCK_DISPLAY, 0) != DEVICE_ERROR_NONE)
- LOG(ERROR) <<"Play() -> |device_power_request_lock| failed";
+ WakeUpDisplayAndAcquireDisplayLock();
#endif
StartCurrentTimeUpdateTimer();
if (!is_file_url_)
is_end_reached_ = false;
}
-void MediaPlayerBridgeCapi::Pause(bool is_media_related_action) {
- VLOG(1) << __FUNCTION__ << " : Player Id = " << GetPlayerId();
+void MediaPlayerBridgeCapi::Pause(bool /* is_media_related_action */) {
if (GetPlayerState() == PLAYER_STATE_IDLE) {
- if(delayed_player_state_ != 0) {
- delayed_player_state_ = DELAYED_PLAYER_STATE_PAUSE;
+ if (delayed_player_state_ != PLAYER_STATE_DELAYED_NULL) {
+ delayed_player_state_ = PLAYER_STATE_DELAYED_PAUSE;
return;
}
- delayed_player_state_ = DELAYED_PLAYER_STATE_PAUSE;
- int ret = player_prepare_async(player_, player_prepared_cb, this);
+ delayed_player_state_ = PLAYER_STATE_DELAYED_PAUSE;
+ int ret = player_prepare_async(player_, PlayerPreparedCb, this);
if (ret != PLAYER_ERROR_NONE)
HandleError(ret, "player_prepare_async");
return;
}
if (player_pause(player_) != PLAYER_ERROR_NONE) {
- LOG(ERROR) << "Pause() -> |player_pause| failed";
+ LOG(ERROR) << "|player_pause| failed";
return;
}
StartBufferingUpdateTimer();
#if defined(OS_TIZEN_MOBILE)
- if (device_power_release_lock(POWER_LOCK_DISPLAY) != DEVICE_ERROR_NONE)
- LOG(ERROR) << "|device_power_release_lock| request failed";
+ ReleaseDisplayLock();
#endif
StopCurrentTimeUpdateTimer();
}
void MediaPlayerBridgeCapi::SetRate(double rate) {
- VLOG(1) << __FUNCTION__ << " : Player Id = " << GetPlayerId();
if (playback_rate_ == rate)
return;
return;
}
- // Fixme: SetRate is always failing
- if (player_set_playback_rate(player_, (float)rate) != PLAYER_ERROR_NONE)
- LOG(ERROR) <<"|player_set_playback_rate|failed";
- else {
+ // FIXME: SetRate is always failing.
+ if (player_set_playback_rate(
+ player_,
+ static_cast<float>(rate)) != PLAYER_ERROR_NONE) {
+ LOG(ERROR) << "|player_set_playback_rate| failed";
+ } else {
// If previous rate was zero and requested rate is non-zero, change the
- // playback rate and call play
- if(playback_rate_ == 0.0 && rate != 0.0) {
+ // playback rate and call play.
+ if (playback_rate_ == 0.0) {
playback_rate_ = rate;
Play();
} else {
}
void MediaPlayerBridgeCapi::Seek(const double time) {
- VLOG(1) << __FUNCTION__ << " : Player Id = " << GetPlayerId();
#if defined(TIZEN_LEGACY_V_2_2_1)
- int err = player_set_position(player_,
- ConvertSecondsToMilliSeconds(time), seek_complete_cb, this);
+ int err = player_set_position(player_, ConvertSecondsToMilliSeconds(time),
+ SeekCompletedCb, this);
#else
int err = player_set_play_position(player_,
- ConvertSecondsToMilliSeconds(time), true, seek_complete_cb, this);
+ ConvertSecondsToMilliSeconds(time),
+ true, SeekCompletedCb, this);
#endif
+
if (err != PLAYER_ERROR_NONE) {
- LOG(ERROR) <<"|player_set_playback_rate|failed";
+ LOG(ERROR) << "|player_set_playback_rate| failed";
manager()->OnTimeUpdate(GetPlayerId(), GetCurrentTime());
manager()->OnTimeChanged(GetPlayerId());
return;
}
void MediaPlayerBridgeCapi::SetVolume(double volume) {
- VLOG(1) << __FUNCTION__ << " : Player Id = " << GetPlayerId()
- << " : Volume : " << volume;
-
if (GetPlayerState() == PLAYER_STATE_NONE)
return;
int audio_bit_rate = 0;
media_type_ = 0;
- int err = player_get_audio_stream_info(player_,
- &sample_rate, &channel, &audio_bit_rate);
+ int err = player_get_audio_stream_info(player_, &sample_rate, &channel,
+ &audio_bit_rate);
if (err != PLAYER_ERROR_NONE) {
HandleError(err, "player_get_audio_stream_info");
return;
}
- VLOG(1) << "Audio Information: sample_rate = " << sample_rate
- << " , channel = " << channel
- << " , audio_bit_rate = " << audio_bit_rate;
-
// Audio stream is present if sample rate is valid.
if (sample_rate > 0)
media_type_ |= MEDIA_AUDIO_MASK;
// FIXME : player_get_video_size() always returns zero if using media_packet.
-// If the platform issue is resolved, Please Remove it.
+// Remove it once the platform issue is resolved.
#if defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT)
err = player_get_video_size(player_, &player_width_, &player_height_);
if (err != PLAYER_ERROR_NONE) {
media_type_ |= MEDIA_VIDEO_MASK;
manager()->OnMediaDataChange(GetPlayerId(), video_format_, player_height_,
- player_width_, media_type_);
+ player_width_, media_type_);
}
void MediaPlayerBridgeCapi::UpdateDuration() {
int duration = 0;
player_get_duration(player_, &duration);
+ duration = ConvertMilliSecondsToSeconds(duration);
- if (duration_ != ConvertMilliSecondsToSeconds(duration)) {
- duration_ = ConvertMilliSecondsToSeconds(duration);
+ if (duration_ != duration) {
+ duration_ = duration;
manager()->OnDurationChange(GetPlayerId(), duration_);
}
// No need to buffer 'local file'. Update buffered percentage.
- if(is_file_url_) {
+ if (is_file_url_) {
std::vector<media::MediaPlayerEfl::TimeRanges> buffer_range;
media::MediaPlayerEfl::TimeRanges range;
range.start = 0;
if (IsPlayerDestructing())
return;
- int start, current;
- if (player_get_streaming_download_progress(player_,
- &start, ¤t) == PLAYER_ERROR_NONE) {
+ int start = 0, current = 0;
+ if (player_get_streaming_download_progress(
+ player_, &start, ¤t) == PLAYER_ERROR_NONE) {
if (current == 100) {
StopBufferingUpdateTimer();
manager()->OnNetworkStateChange(GetPlayerId(),
- MediaPlayerEfl::NetworkStateLoaded);
+ MediaPlayerEfl::NetworkStateLoaded);
}
std::vector<media::MediaPlayerEfl::TimeRanges> buffer_range;
media::MediaPlayerEfl::TimeRanges range;
range.start = 0;
- range.end = static_cast<double>(current) * duration_ / 100
- * base::Time::kMicrosecondsPerSecond;
+
+ // Get current% of |duration_| and convert into microseconds
+ range.end =
+ ((duration_ * current) / 100) * base::Time::kMicrosecondsPerSecond;
buffer_range.push_back(range);
manager()->OnBufferUpdate(GetPlayerId(), buffer_range);
}
}
void MediaPlayerBridgeCapi::PlaybackCompleteUpdate() {
- VLOG(1) << __FUNCTION__ << " : Player Id = " << GetPlayerId();
is_end_reached_ = true;
#if defined(OS_TIZEN_MOBILE)
- if (device_power_release_lock(POWER_LOCK_DISPLAY) != DEVICE_ERROR_NONE)
- LOG(ERROR) << "|device_power_release_lock| request failed";
+ ReleaseDisplayLock();
#endif
StopCurrentTimeUpdateTimer();
if (!is_file_url_)
StartBufferingUpdateTimer();
- if (delayed_player_state_ == DELAYED_PLAYER_STATE_PLAY) {
- ExecuteDelayedPlayerState();
- }
+ ExecuteDelayedPlayerState();
}
void MediaPlayerBridgeCapi::UpdateSeekState(bool state) {
is_seeking_ = state;
}
-void MediaPlayerBridgeCapi::CompletedPrepare() {
+void MediaPlayerBridgeCapi::PlayerPrepared() {
UpdateMediaType();
if (media_type_ == 0)
return;
SetPixmap();
#endif
manager()->OnReadyStateChange(GetPlayerId(),
- MediaPlayerEfl::ReadyStateHaveEnoughData);
+ MediaPlayerEfl::ReadyStateHaveEnoughData);
manager()->OnNetworkStateChange(GetPlayerId(),
- MediaPlayerEfl::NetworkStateLoaded);
+ MediaPlayerEfl::NetworkStateLoaded);
ExecuteDelayedPlayerState();
}
player_get_play_position(player_, &postion);
#endif
base::TimeDelta timestamp = base::TimeDelta::FromMilliseconds(postion);
- manager()->OnPlatformSurfaceUpdated(GetPlayerId(), pixmap_id_, timestamp);
+ manager()->OnPlatformSurfaceUpdated(GetPlayerId(), efl_pixmap_->GetId(),
+ timestamp);
}
void MediaPlayerBridgeCapi::SetPixmap() {
- VLOG(1) << __FUNCTION__ << " : Player Id = " << GetPlayerId();
-
if ((media_type_ & MEDIA_VIDEO_MASK) && !efl_pixmap_.get()) {
- efl_pixmap_ = gfx::EflPixmap::Create(gfx::EflPixmap::SURFACE,
- gfx::Size(player_width_, player_height_));
+ efl_pixmap_ = gfx::EflPixmap::Create(
+ gfx::EflPixmap::SURFACE, gfx::Size(player_width_, player_height_));
if (!efl_pixmap_.get()) {
- HandleError(0, " PixmapSurfaceTizen::create");
- return ;
+ HandleError(0, "PixmapSurfaceTizen::create");
+ return;
}
- is_pixmap_used_ = true;
- pixmap_id_ = efl_pixmap_->GetId();
//Register to get notification from ecore for damage updates.
- m_damage = ecore_x_damage_new(pixmap_id_,
- ECORE_X_DAMAGE_REPORT_RAW_RECTANGLES);
- m_damageHandler = ecore_event_handler_add(ECORE_X_EVENT_DAMAGE_NOTIFY,
- notify_damage_updated_cb, this);
+ damage_ = ecore_x_damage_new(efl_pixmap_->GetId(),
+ ECORE_X_DAMAGE_REPORT_RAW_RECTANGLES);
+ damage_handler_ = ecore_event_handler_add(ECORE_X_EVENT_DAMAGE_NOTIFY,
+ NotifyDamageUpdatedCb, this);
}
-
- manager()->OnReadyStateChange(GetPlayerId(),
- MediaPlayerEfl::ReadyStateHaveEnoughData);
- manager()->OnNetworkStateChange(GetPlayerId(),
- MediaPlayerEfl::NetworkStateLoaded);
}
#else
void MediaPlayerBridgeCapi::MediaPacketUpdated(media_packet_h packet) {
tbm_surface_h surface;
media_packet_get_tbm_surface(packet, &surface);
- VLOG(1) << "surface : " << surface;
SendFrame(surface);
previous_packet_ = packet;
}
LOG(ERROR) << "tbm_surface_get_info() failed";
return;
}
- VLOG(1) << "size : " << suf_info.size << " , format : " << suf_info.format
- << "width : " << suf_info.width << ", height :" << suf_info.height;
+
+ // CAPI doesn't give out resolution change notification.
if (player_height_ != suf_info.height || player_width_ != suf_info.width) {
player_height_ = suf_info.height;
player_width_ = suf_info.width;
video_format_ = suf_info.format;
manager()->OnMediaDataChange(GetPlayerId(), video_format_, player_height_,
- player_width_, media_type_);
+ player_width_, media_type_);
}
base::SharedMemory shared_memory;
}
base::SharedMemoryHandle foreign_memory_handle;
- if (!shared_memory.ShareToProcess(
- base::Process::Current().Handle(), &foreign_memory_handle)) {
+ if (!shared_memory.ShareToProcess(base::Process::Current().Handle(),
+ &foreign_memory_handle)) {
LOG(ERROR) << "Shared Memory handle could not be obtained";
return;
}
#endif
base::TimeDelta timestamp = base::TimeDelta::FromMilliseconds(position);
memcpy(shared_memory.memory(), suf_info.planes[0].ptr, shared_memory_size);
- manager()->OnNewFrameAvailable(
- GetPlayerId(), foreign_memory_handle, shared_memory_size, timestamp);
+ manager()->OnNewFrameAvailable(GetPlayerId(), foreign_memory_handle,
+ shared_memory_size, timestamp);
}
#endif
void MediaPlayerBridgeCapi::HandleBufferingStatus(int percent) {
- if (IsPlayerDestructing())
+ if (IsPlayerDestructing() || is_paused_ || is_seeking_)
return;
- if (percent == 100 && !is_paused_ && !is_seeking_) {
- if (GetPlayerState() == PLAYER_STATE_PAUSED) {
- VLOG(1) << __FUNCTION__ << " : Player Id = " << GetPlayerId()
- << " : Playing MediaPlayer as buffer reached 100%";
- if (player_start(player_) != PLAYER_ERROR_NONE) {
- LOG(ERROR) << "HandleBufferingStatus:player_start failed";
- return;
- }
- StartCurrentTimeUpdateTimer();
-
- if (!is_file_url_)
- StartBufferingUpdateTimer();
-
- manager()->OnReadyStateChange(GetPlayerId(),
- MediaPlayerEfl::ReadyStateHaveEnoughData);
- manager()->OnNetworkStateChange(GetPlayerId(),
- MediaPlayerEfl::NetworkStateLoading);
+ if (percent == 100) {
+ if (GetPlayerState() != PLAYER_STATE_PAUSED)
+ return;
+ if (player_start(player_) != PLAYER_ERROR_NONE) {
+ LOG(ERROR) << "|player_start| failed";
return;
}
- }
+ StartCurrentTimeUpdateTimer();
- if (percent != 100 && !is_paused_ && !is_seeking_) {
- if (GetPlayerState() == PLAYER_STATE_PLAYING) {
- VLOG(1) << __FUNCTION__ << " : Player Id = " << GetPlayerId()
- << " : Pausing MediaPlayer as buffer is < 100%";
- if (player_pause(player_) != PLAYER_ERROR_NONE) {
- LOG(ERROR) << "HandleBufferingStatus:player_pause failed";
- return;
- }
- StopCurrentTimeUpdateTimer();
- manager()->OnReadyStateChange(GetPlayerId(),
- MediaPlayerEfl::ReadyStateHaveCurrentData);
- manager()->OnNetworkStateChange(GetPlayerId(),
- MediaPlayerEfl::NetworkStateLoading);
+ if (!is_file_url_)
+ StartBufferingUpdateTimer();
+
+ manager()->OnReadyStateChange(GetPlayerId(),
+ MediaPlayerEfl::ReadyStateHaveEnoughData);
+ } else {
+ if (GetPlayerState() != PLAYER_STATE_PLAYING)
+ return;
+ if (player_pause(player_) != PLAYER_ERROR_NONE) {
+ LOG(ERROR) << "|player_pause| failed";
+ return;
}
+
+ StopCurrentTimeUpdateTimer();
+ manager()->OnReadyStateChange(GetPlayerId(),
+ MediaPlayerEfl::ReadyStateHaveCurrentData);
}
+ manager()->OnNetworkStateChange(GetPlayerId(),
+ MediaPlayerEfl::NetworkStateLoading);
}
// Helper method which prints errors occured while calling CAPI api's.
void MediaPlayerBridgeCapi::HandleError(int err, char const* from) {
- int index;
- for (index = 0; index < ERROR_MAX; index++) {
+ int index = 0;
+ for (index = 0; index < ERROR_MAX; ++index) {
if (errorlist[index].error_code == err) {
- LOG(ERROR) << "Stoping playback of media due to Error code : "<<err
- <<" Error message : "<<errorlist[index].error_message
- <<" from " << from;
+ LOG(ERROR) << "Stoping playback of media due to Error code : " << err
+ << " Error message : " << errorlist[index].error_message
+ << " from " << from;
break;
}
}
if (index == ERROR_MAX)
LOG(ERROR) << "Stoping playback of media due to Unknown error : "
- <<err <<" from " << from;
+ << err << " from " << from;
StopBufferingUpdateTimer();
StopCurrentTimeUpdateTimer();
manager()->OnNetworkStateChange(GetPlayerId(),
- MediaPlayerEfl::NetworkStateDecodeError);
+ MediaPlayerEfl::NetworkStateDecodeError);
-#ifdef OS_TIZEN_MOBILE
- if (device_power_release_lock(POWER_LOCK_DISPLAY) != DEVICE_ERROR_NONE)
- LOG(ERROR) << "|device_power_release_lock| request failed";
+#if defined(OS_TIZEN_MOBILE)
+ ReleaseDisplayLock();
#endif
}
player_state_e MediaPlayerBridgeCapi::GetPlayerState() {
- player_state_e state;
- player_get_state(player_,&state);
+ player_state_e state = PLAYER_STATE_NONE;
+ player_get_state(player_, &state);
return state;
}
void MediaPlayerBridgeCapi::ExecuteDelayedPlayerState() {
switch (delayed_player_state_) {
- case DELAYED_PLAYER_STATE_PLAY :
- VLOG(1) << "Executing the delayed play command";
+ case PLAYER_STATE_DELAYED_PLAY :
Play();
break;
- case DELAYED_PLAYER_STATE_PAUSE :
- VLOG(1) << "Executing the delayed pause command";
+ case PLAYER_STATE_DELAYED_PAUSE :
Pause(false);
break;
- default :
+ default:
break;
}
}
void MediaPlayerBridgeCapi::OnMediaPacketUpdated(media_packet_h packet) {
main_loop_->PostTask(
FROM_HERE, base::Bind(&MediaPlayerBridgeCapi::MediaPacketUpdated,
- base::Unretained(this),
- packet));
+ base::Unretained(this), packet));
}
#endif
base::Unretained(this)));
}
-void MediaPlayerBridgeCapi::OnCompletedPrepare() {
+void MediaPlayerBridgeCapi::OnPlayerPrepared() {
main_loop_->PostTask(
- FROM_HERE, base::Bind(&MediaPlayerBridgeCapi::CompletedPrepare,
+ FROM_HERE, base::Bind(&MediaPlayerBridgeCapi::PlayerPrepared,
base::Unretained(this)));
}
void MediaPlayerBridgeCapi::OnHandleBufferingStatus(int percent) {
main_loop_->PostTask(
FROM_HERE, base::Bind(&MediaPlayerBridgeCapi::HandleBufferingStatus,
- base::Unretained(this),
- percent));
+ base::Unretained(this), percent));
}
void MediaPlayerBridgeCapi::OnHandleError(int error_code, const char *msg) {
main_loop_->PostTask(
FROM_HERE, base::Bind(&MediaPlayerBridgeCapi::HandleError,
- base::Unretained(this),
- error_code,
- msg));
+ base::Unretained(this), error_code, msg));
}
} // namespace media