const double kSeekBufferingWaitInSec = 2;
// Iframe time offset for demuxer.
-const double kDemuxerSeekIFrameTime = 0.5;
+const double kDemuxerSeekIFrameTime = (0.5);
+
+// Appsrc Buffering size
+const unsigned long long max_size = 2097152; // 2MB
+
+// Appsrc minimum buffering level
+const unsigned int min_threshold = 30;
+
} // namespace
static_cast<MediaSourcePlayerCapi*>(user_data);
if (!player || player->IsPlayerDestructing())
return;
- player->OnReadDemuxedData(media::DemuxerStream::VIDEO, true);
+ player->OnReadDemuxedData(media::DemuxerStream::VIDEO);
}
static void OnCapiAudioBufStatusCB(unsigned int size, void* user_data) {
static_cast<MediaSourcePlayerCapi*>(user_data);
if (!player || player->IsPlayerDestructing())
return;
- player->OnReadDemuxedData(media::DemuxerStream::AUDIO, true);
+ player->OnReadDemuxedData(media::DemuxerStream::AUDIO);
}
#else
if (!player || player->IsPlayerDestructing())
return;
if (status == PLAYER_MEDIA_STREAM_BUFFER_UNDERRUN) {
- player->OnReadDemuxedData(media::DemuxerStream::AUDIO, true);
+ player->OnUpdateDataStatus(media::DemuxerStream::AUDIO, true);
} else if (status == PLAYER_MEDIA_STREAM_BUFFER_OVERFLOW) {
- player->OnReadDemuxedData(media::DemuxerStream::AUDIO, false);
+ player->OnUpdateDataStatus(media::DemuxerStream::AUDIO, false);
}
}
if (!player || player->IsPlayerDestructing())
return;
if (status == PLAYER_MEDIA_STREAM_BUFFER_UNDERRUN) {
- player->OnReadDemuxedData(media::DemuxerStream::VIDEO, true);
+ player->OnUpdateDataStatus(media::DemuxerStream::VIDEO, true);
} else if (status == PLAYER_MEDIA_STREAM_BUFFER_OVERFLOW) {
- player->OnReadDemuxedData(media::DemuxerStream::VIDEO, false);
+ player->OnUpdateDataStatus(media::DemuxerStream::VIDEO, false);
}
}
#endif // USE_LEGACY_PLAYER_CAPI
#endif
void OnPlaybackCompleteCB(void* user_data) {
+ LOG(INFO) << "On playback complete Call back";
MediaSourcePlayerCapi* player =
static_cast<MediaSourcePlayerCapi*>(user_data);
player->OnPlaybackComplete();
}
+void OnPlayerErrorCB(int error_code, void* user_data) {
+ MediaSourcePlayerCapi* player =
+ static_cast<MediaSourcePlayerCapi*>(user_data);
+
+ if (!player)
+ return;
+
+ player->OnPlayerError(error_code, "OnPlayerErrorCB");
+}
+
+void MediaSourcePlayerCapi::OnPlayerError(int error_code, const char* msg) {
+ task_runner_->PostTask(
+ FROM_HERE, base::Bind(&MediaSourcePlayerCapi::handlePlayerError,
+ base::Unretained(this), error_code, msg));
+}
+
void MediaSourcePlayerCapi::OnPlaybackComplete() {
task_runner_->PostTask(
FROM_HERE, base::Bind(&MediaSourcePlayerCapi::PlaybackComplete,
}
void MediaSourcePlayerCapi::OnPrepareComplete() {
- LOG(INFO) << __FUNCTION__;
task_runner_->PostTask(
FROM_HERE, base::Bind(&MediaSourcePlayerCapi::PrepareComplete,
base::Unretained(this)));
}
MediaSourcePlayerCapi::MediaSourcePlayerCapi(
- int player_id,
- scoped_ptr<DemuxerEfl> demuxer,
- MediaPlayerManager* manager)
+ int player_id, scoped_ptr<DemuxerEfl> demuxer, MediaPlayerManager* manager)
: MediaPlayerEfl(player_id, manager),
demuxer_(demuxer.Pass()),
task_runner_(base::ThreadTaskRunnerHandle::Get()),
is_end_reached_(false),
error_occured_(false),
player_prepared_(false),
- media_packet_(NULL),
- m_videoFormat(NULL),
- m_audioFormat(NULL),
Eos_video(false),
Eos_audio(false),
+ media_packet_(NULL),
#if defined(TIZEN_VIDEO_HOLE)
native_window_(0),
#else
previous_packet_(NULL),
+ m_videoFormat(NULL),
+ m_audioFormat(NULL),
#endif
seek_offset_(0) {
demuxer_->Initialize(this);
handlePlayerError(ret, "player_set_sound_type");
return;
}
-
+ ret = player_set_error_cb(player_, OnPlayerErrorCB, this);
+ if (ret != PLAYER_ERROR_NONE) {
+ handlePlayerError(ret, "player_set_error_cb");
+ return;
+ }
ret = player_set_completed_cb(player_, OnPlaybackCompleteCB, this);
if (ret != PLAYER_ERROR_NONE) {
handlePlayerError(ret, "player_set_completed_cb");
// Helper method which prints errors occured while calling CAPI api's.
void MediaSourcePlayerCapi::handlePlayerError(int err, char const* from) {
- int index;
- for (index = 0; index < ERROR_MAX; index++) {
+ int index = 0;
+ for (; 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;
+ << " 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;
+ StopCurrentTimeUpdateTimer();
+ HandleError(MediaPlayerEfl::NetworkStateDecodeError);
}
void MediaSourcePlayerCapi::HandleError(
void MediaSourcePlayerCapi::HandleBufferingMessage(int percent) {
if (IsPlayerDestructing())
return;
- // add code if required
+ // FIXME: add code if required
return;
}
// Initiate play for internal seeks.
if (GetPlayerState() != PLAYER_STATE_PLAYING)
- task_runner_->PostTask(FROM_HERE,
- base::Bind(&MediaSourcePlayerCapi::Play,
- base::Unretained(this)));
+ task_runner_->PostTask(
+ FROM_HERE, base::Bind(&MediaSourcePlayerCapi::Play,
+ base::Unretained(this)));
manager()->OnTimeUpdate(GetPlayerId(), GetCurrentTime());
task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&MediaSourcePlayerCapi::OnTimeChanged,
- base::Unretained(this)));
+ FROM_HERE, base::Bind(&MediaSourcePlayerCapi::OnTimeChanged,
+ base::Unretained(this)));
}
void MediaSourcePlayerCapi::UpdateSeekState(MediaSeekState state) {
ret = player_set_position(player_,
ConvertSecondsToMilliSeconds(seek_offset_), OnSeekCompleteCB, this);
#else
- ret = player_set_play_position(player_,
- ConvertSecondsToMilliSeconds(seek_offset_), true, OnSeekCompleteCB, this);
+ ret = player_set_play_position(
+ player_, ConvertSecondsToMilliSeconds(seek_offset_),
+ true, OnSeekCompleteCB, this);
#endif
seek_offset_ = 0.0;
audio_buffer_queue_.clear();
video_buffer_queue_.clear();
- OnReadDemuxedData(media::DemuxerStream::AUDIO, true);
- OnReadDemuxedData(media::DemuxerStream::VIDEO, true);
+ OnReadDemuxedData(media::DemuxerStream::AUDIO);
+ OnReadDemuxedData(media::DemuxerStream::VIDEO);
}
#if defined(TIZEN_VIDEO_HOLE)
return;
Display* native_display = static_cast<Display*>(ecore_x_display_get());
- if (!XMoveResizeWindow(native_display, native_window_, x, y, width, height)) {
+ if (!XMoveResizeWindow(
+ native_display, native_window_, x, y, width, height)) {
return;
}
if (previous_packet_)
media_packet_destroy(previous_packet_);
- tbm_surface_h surface;
+ tbm_surface_h surface = nullptr;
media_packet_get_tbm_surface(packet, &surface);
SendFrame(surface);
previous_packet_ = packet;
}
void MediaSourcePlayerCapi::SendFrame(tbm_surface_h surface) {
- tbm_surface_info_s suf_info;
+ tbm_surface_info_s suf_info = {0, };
int ret = tbm_surface_get_info(surface, &suf_info);
if (ret != TBM_SURFACE_ERROR_NONE) {
LOG(ERROR) << "tbm_surface_get_info() failed";
return;
}
- if (height_ != suf_info.height ||
- width_ != suf_info.width ||
+ if (height_ != suf_info.height || width_ != suf_info.width ||
video_format_ == 0) {
height_ = suf_info.height;
width_ = suf_info.width;
return;
}
- int position;
+ int position = 0;
#if defined(USE_LEGACY_PLAYER_CAPI)
player_get_position(player_, &position);
#else
#endif // TIZEN_VIDEO_HOLE
void MediaSourcePlayerCapi::SetVolume(double volume) {
- if (GetPlayerState() == PLAYER_STATE_NONE)
+ if (GetPlayerState() <= PLAYER_STATE_IDLE)
return;
if (player_set_volume(player_, volume, volume) != PLAYER_ERROR_NONE)
}
void MediaSourcePlayerCapi::StartCurrentTimeUpdateTimer() {
- if (!current_time_update_timer_.IsRunning()) {
- current_time_update_timer_.Start(
- FROM_HERE,
- base::TimeDelta::FromMilliseconds(kDurationUpdateInterval),
- this,
- &MediaSourcePlayerCapi::OnCurrentTimeUpdateTimerFired);
- }
+ if (current_time_update_timer_.IsRunning())
+ return;
+
+ current_time_update_timer_.Start(
+ FROM_HERE,
+ base::TimeDelta::FromMilliseconds(kDurationUpdateInterval),
+ this,
+ &MediaSourcePlayerCapi::OnCurrentTimeUpdateTimerFired);
}
void MediaSourcePlayerCapi::StopCurrentTimeUpdateTimer() {
return;
}
-
#if defined(OS_TIZEN_MOBILE)
WakeUpDisplayAndAcquireDisplayLock();
#endif
- int ret = player_start(player_);
- if (ret != PLAYER_ERROR_NONE) {
- handlePlayerError(ret, "player_start()");
- return;
- }
- playing_ = true;
- StartCurrentTimeUpdateTimer();
+ int ret = player_start(player_);
+ if (ret != PLAYER_ERROR_NONE) {
+ handlePlayerError(ret, "player_start()");
+ return;
+ }
+ playing_ = true;
+ StartCurrentTimeUpdateTimer();
}
void MediaSourcePlayerCapi::Pause(bool is_media_related_action) {
if (media_packet_)
media_packet_destroy(media_packet_);
media_packet_ = NULL;
+ if (previous_packet_)
+ media_packet_destroy(previous_packet_);
+ previous_packet_ = NULL;
#endif
}
return;
}
- media_format_mimetype_e audiomimeType;
+ media_format_mimetype_e audiomimeType = MEDIA_FORMAT_MP3;
if (configs.audio_codec == kCodecAAC)
audiomimeType = MEDIA_FORMAT_AAC;
- else if (configs.audio_codec == kCodecMP3)
- audiomimeType = MEDIA_FORMAT_MP3;
- LOG(INFO) << "samplerate " <<samplerate << " channel "
- << channel << " audiomimeType " << audiomimeType;
+ LOG(INFO) << "samplerate: " << samplerate
+ << ", channel: " << channel
+ << ", audiomimeType: " << audiomimeType;
media_format_set_audio_mime(m_audioFormat, audiomimeType);
media_format_set_audio_channel(m_audioFormat, channel);
media_format_set_audio_samplerate(m_audioFormat, samplerate);
ret = player_set_media_stream_info(player_, PLAYER_STREAM_TYPE_AUDIO,
- m_audioFormat);
+ m_audioFormat);
if (ret != PLAYER_ERROR_NONE) {
LOG(ERROR) << "player_set_audio_stream_info Error: " << ret;
return;
return;
}
- media_format_mimetype_e videomimeType;
- if (configs.video_codec == kCodecH264)
- videomimeType = MEDIA_FORMAT_H264_SP;
+ media_format_mimetype_e videomimeType = MEDIA_FORMAT_H264_SP;
media_format_set_video_mime(m_videoFormat, videomimeType);
media_format_set_video_width(m_videoFormat, width_);
media_format_set_video_height(m_videoFormat, height_);
- LOG(INFO) << "width " <<width_ << " height " << height_
- << " videomimeType " << videomimeType;
+ LOG(INFO) << "width: " << width_
+ << ", height: " << height_
+ << ", videomimeType: " << videomimeType;
ret = player_set_media_stream_info(player_,
PLAYER_STREAM_TYPE_VIDEO,
return;
}
+ // FIXME(Kodam): This property should be updated based on dynamic
+ // resolution change
+ player_set_media_stream_buffer_max_size(
+ player_, PLAYER_STREAM_TYPE_VIDEO, max_size);
+ player_set_media_stream_buffer_min_threshold(
+ player_, PLAYER_STREAM_TYPE_VIDEO, min_threshold);
ret = player_set_media_stream_buffer_status_cb(player_,
PLAYER_STREAM_TYPE_VIDEO,
OnCapiVideoBufStatusCB,
// Audio stream is present if sample rate is valid.
if (samplerate > 0)
media_type_ |= MEDIA_AUDIO_MASK;
+
// Video stream is present if both video width and height are valid.
if (width_ > 0 && height_ > 0)
media_type_ |= MEDIA_VIDEO_MASK;
return;
}
}
- // Need to check where is the exact place for this code.
+
+ // FIXME(Venu): Need to check where is the exact place for this code.
// For make it work added this below code
manager()->OnReadyStateChange(GetPlayerId(),
- MediaPlayerEfl::ReadyStateHaveEnoughData);
+ MediaPlayerEfl::ReadyStateHaveEnoughData);
}
void MediaSourcePlayerCapi::ReadDemuxedData(
demuxer_->RequestDemuxerData(type);
}
-void MediaSourcePlayerCapi::OnReadDemuxedData(
- media::DemuxerStream::Type type, bool status) {
+// FIXME(Venu): Handle on main thread in first place.
+void MediaSourcePlayerCapi::OnUpdateDataStatus(
+ media::DemuxerStream::Type type, bool underflow_status) {
if (IsPlayerDestructing()) {
LOG(ERROR) << "CAPI player deinitializing. Just return";
return;
}
+
if (type == media::DemuxerStream::VIDEO) {
- should_feed_video_ = status;
+ HandleUnderFlowStatus(media::DemuxerStream::VIDEO,
+ underflow_status, should_feed_video_);
} else if (type == media::DemuxerStream::AUDIO) {
- should_feed_audio_ = status;
+ HandleUnderFlowStatus(media::DemuxerStream::AUDIO,
+ underflow_status, should_feed_audio_);
}
- if (status) {
+}
+
+void MediaSourcePlayerCapi::HandleUnderFlowStatus(
+ media::DemuxerStream::Type type, bool underflow_status, bool should_feed_) {
+ if (underflow_status && !should_feed_) {
+ if (type == media::DemuxerStream::VIDEO) {
+ should_feed_video_ = underflow_status;
+ LOG(INFO) << "Video Underflow " << should_feed_video_
+ << " call CAPI Pause";
+ } else if (type == media::DemuxerStream::AUDIO) {
+ should_feed_audio_ = underflow_status;
+ LOG(INFO) << "Audio Underflow " << should_feed_audio_
+ << " call CAPI Pause";
+ }
+ if (player_prepared_) {
+ task_runner_->PostTask(
+ FROM_HERE, base::Bind(&MediaSourcePlayerCapi::Pause,
+ base::Unretained(this), true));
+ }
task_runner_->PostTask(
FROM_HERE, base::Bind(&MediaSourcePlayerCapi::ReadDemuxedData,
base::Unretained(this), type));
+ } else if (!underflow_status && should_feed_) {
+ if (type == media::DemuxerStream::VIDEO) {
+ should_feed_video_ = underflow_status;
+ LOG(INFO) << "Video Overflow " << should_feed_video_
+ << " call CAPI Play";
+ } else if (type == media::DemuxerStream::AUDIO) {
+ should_feed_audio_ = underflow_status;
+ LOG(INFO) << "Audio Overflow " << should_feed_audio_
+ << " call CAPI Play";
+ }
+
+ // FIXME(Kodam): Distinguish from user triggered PAUSE.
+ if(!should_feed_audio_ && !should_feed_video_) {
+ task_runner_->PostTask(
+ FROM_HERE, base::Bind(&MediaSourcePlayerCapi::Play,
+ base::Unretained(this)));
+ }
}
}
+void MediaSourcePlayerCapi::OnReadDemuxedData(
+ media::DemuxerStream::Type type) {
+ if (IsPlayerDestructing()) {
+ LOG(ERROR) << "CAPI player deinitializing. Just return";
+ return;
+ }
+ task_runner_->PostTask(
+ FROM_HERE, base::Bind(&MediaSourcePlayerCapi::ReadDemuxedData,
+ base::Unretained(this), type));
+}
+
void MediaSourcePlayerCapi::OnDemuxerDataAvailable(
base::SharedMemoryHandle foreign_memory_handle,
const media::DemuxedBufferMetaData& meta_data) {
LOG(ERROR) << "ERROR : Size of shared memory is Zero";
return;
}
-
+#if defined(USE_LEGACY_PLAYER_CAPI)
if (should_feed_audio_ && should_feed_video_ &&
!playing_ && player_prepared_ && (seek_state_ == MEDIA_SEEK_NONE)) {
- Play();
+ if (GetPlayerState() != PLAYER_STATE_PAUSED)
+ Play();
}
-
+#endif
ReadFromQueueIfAny(meta_data.type);
if (meta_data.type == media::DemuxerStream::AUDIO && !should_feed_audio_) {
return;
}
-#if defined(USE_LEGACY_PLAYER_CAPI)
- int ret = PLAYER_ERROR_NONE;
- if (meta_data.type == media::DemuxerStream::AUDIO) {
- ret = player_submit_packet(player_,
- static_cast<uint8*>shared_memory.memory(),
- size, timestamp, PLAYER_TRACK_TYPE_AUDIO);
- } else if (meta_data.type == media::DemuxerStream::VIDEO) {
- ret = player_submit_packet(player_,
- static_cast<uint8*>shared_memory.memory(),
- size, timestamp, PLAYER_TRACK_TYPE_VIDEO);
- }
- if (ret != PLAYER_ERROR_NONE) {
- LOG(ERROR) << "player_submit_packet() Error: " << ret;
- return;
- }
-#else
if (meta_data.type == media::DemuxerStream::AUDIO) {
- if (media_packet_create_alloc(m_audioFormat, NULL, NULL, &media_packet_)
+ if (media_packet_create_from_external_memory(
+ m_audioFormat, static_cast<void*>(shared_memory.memory()),
+ meta_data.size, NULL, NULL, &media_packet_)
!= MEDIA_PACKET_ERROR_NONE) {
- LOG(ERROR) << "media_packet_create_alloc failed\n";
- media_format_unref(m_audioFormat);
+ LOG(ERROR) << "Audio media_packet_create_from_external_memory failed";
return;
}
} else if (meta_data.type == media::DemuxerStream::VIDEO) {
- if (media_packet_create_alloc(m_videoFormat, NULL, NULL, &media_packet_)
+ if (media_packet_create_from_external_memory(
+ m_videoFormat, static_cast<void*>(shared_memory.memory()),
+ meta_data.size, NULL, NULL, &media_packet_)
!= MEDIA_PACKET_ERROR_NONE) {
- LOG(ERROR) << "media_packet_create_alloc failed\n";
- media_format_unref(m_videoFormat);
+ LOG(ERROR) << "Video media_packet_create_from_external_memory failed";
return;
}
}
- uint8_t* data = NULL;
- if (media_packet_get_buffer_data_ptr(media_packet_,
- reinterpret_cast<void**>(&data))
- != MEDIA_PACKET_ERROR_NONE) {
- LOG(ERROR) << "media_packet_get_buffer_data_ptr failed\n";
- return;
- }
-
- if (media_packet_set_buffer_size(media_packet_, meta_data.size)
- != MEDIA_PACKET_ERROR_NONE) {
- LOG(ERROR) << "media_packet_set_buffer_size failed\n";
- return;
- }
if (media_packet_set_pts(media_packet_, meta_data.timestamp.InMilliseconds())
!= MEDIA_PACKET_ERROR_NONE) {
- LOG(ERROR) << "media_packet_set_pts failed\n";
+ LOG(ERROR) << "media_packet_set_pts failed";
return;
}
-
- memcpy(data, shared_memory.memory(), meta_data.size);
-
if (player_push_media_stream(player_, media_packet_)
- != PLAYER_ERROR_NONE) {
+ != MEDIA_PACKET_ERROR_NONE)
LOG(ERROR) << "player_push_media_stream failed";
- return;
- }
if (meta_data.type == media::DemuxerStream::AUDIO)
media_format_unref(m_audioFormat);
if (media_packet_)
media_packet_destroy(media_packet_);
media_packet_ = NULL;
-#endif
+
if (meta_data.type == media::DemuxerStream::AUDIO)
- OnReadDemuxedData(media::DemuxerStream::AUDIO, should_feed_audio_);
+ OnReadDemuxedData(media::DemuxerStream::AUDIO);
else if (meta_data.type == media::DemuxerStream::VIDEO)
- OnReadDemuxedData(media::DemuxerStream::VIDEO, should_feed_video_);
-
+ OnReadDemuxedData(media::DemuxerStream::VIDEO);
return;
}
switch (meta_data.status) {
case media::DemuxerStream::kAborted:
- if (meta_data.type == media::DemuxerStream::AUDIO)
- OnReadDemuxedData(media::DemuxerStream::AUDIO, should_feed_audio_);
- else if (meta_data.type == media::DemuxerStream::VIDEO)
- OnReadDemuxedData(media::DemuxerStream::VIDEO, should_feed_video_);
- break;
-
+ LOG(WARNING) << "[BROWSER] : DemuxerStream::kAborted, Stream type = "
+ << meta_data.type;
case media::DemuxerStream::kConfigChanged:
if (meta_data.type == media::DemuxerStream::AUDIO)
- OnReadDemuxedData(media::DemuxerStream::AUDIO, should_feed_audio_);
+ OnReadDemuxedData(media::DemuxerStream::AUDIO);
else if (meta_data.type == media::DemuxerStream::VIDEO)
- OnReadDemuxedData(media::DemuxerStream::VIDEO, should_feed_video_);
+ OnReadDemuxedData(media::DemuxerStream::VIDEO);
break;
case media::DemuxerStream::kOk:
}
void MediaSourcePlayerCapi::SendEosToCapi(
- const media::DemuxedBufferMetaData& meta_data) {
+ const media::DemuxedBufferMetaData& meta_data) {
+ int ret = PLAYER_ERROR_NONE;
#if defined(USE_LEGACY_PLAYER_CAPI)
if (meta_data.type == media::DemuxerStream::AUDIO)
- player_submit_packet(player_, NULL, 0, 0, PLAYER_TRACK_TYPE_AUDIO);
+ ret = player_submit_packet(player_, NULL, 0, 0, PLAYER_TRACK_TYPE_AUDIO);
else if (meta_data.type == media::DemuxerStream::VIDEO)
- player_submit_packet(player_, NULL, 0, 0, PLAYER_TRACK_TYPE_VIDEO);
+ ret = player_submit_packet(player_, NULL, 0, 0, PLAYER_TRACK_TYPE_VIDEO);
+ if (ret != PLAYER_ERROR_NONE)
+ handlePlayerError(ret, "player_submit_packet()");
#else
if (meta_data.type == media::DemuxerStream::AUDIO) {
if (!Eos_audio) {
if (media_packet_create(m_audioFormat, NULL, NULL, &media_packet_)
!= MEDIA_PACKET_ERROR_NONE) {
- LOG(ERROR) << "media_packet_create_alloc failed\n";
- media_format_unref(m_audioFormat);
+ LOG(ERROR) << "Audio media_packet_create failed";
return;
}
Eos_audio = true;
} else {
- LOG(ERROR) << "Audio EOS Already Pushed";
- return;
+ LOG(ERROR) << "Audio EOS Already Pushed";
+ return;
}
} else if (meta_data.type == media::DemuxerStream::VIDEO) {
- if (!Eos_video) {
- if (media_packet_create(m_videoFormat, NULL, NULL, &media_packet_)
- != MEDIA_PACKET_ERROR_NONE) {
- LOG(ERROR) << "media_packet_create_alloc failed\n";
- media_format_unref(m_videoFormat);
- return;
- }
- Eos_video = true;
- } else {
- LOG(ERROR) << "Video EOS Already Pushed";
- return;
+ if (!Eos_video) {
+ if (media_packet_create(m_videoFormat, NULL, NULL, &media_packet_)
+ != MEDIA_PACKET_ERROR_NONE) {
+ LOG(ERROR) << "Video media_packet_create failed";
+ return;
}
+ Eos_video = true;
+ } else {
+ LOG(ERROR) << "Video EOS Already Pushed";
+ return;
+ }
}
- media_packet_set_flags(media_packet_, MEDIA_PACKET_END_OF_STREAM);
- if (player_push_media_stream(player_, media_packet_) != PLAYER_ERROR_NONE) {
+ if (media_packet_set_flags(media_packet_, MEDIA_PACKET_END_OF_STREAM)
+ != MEDIA_PACKET_ERROR_NONE)
+ LOG(ERROR) << "media_packet_set_flags failed";
+
+ if (player_push_media_stream(player_, media_packet_)
+ != MEDIA_PACKET_ERROR_NONE)
LOG(ERROR) << "player_push_media_stream failed";
- return;
- }
if (meta_data.type == media::DemuxerStream::AUDIO)
media_format_unref(m_audioFormat);
if (media_packet_)
media_packet_destroy(media_packet_);
media_packet_ = NULL;
+
#endif
return;
}
void MediaSourcePlayerCapi::ReadFromQueueIfAny(
DemuxerStream::Type type) {
- uint8_t* data = NULL;
+ void* data = NULL;
if (error_occured_) {
LOG(ERROR) << "error occured in capi";
return;
uint64 size = static_cast<uint64>(decoder_buffer.get()->data_size());
uint64 timestamp =
- static_cast<uint64>(decoder_buffer.get()->timestamp().InMicroseconds() *
- 1000);
-#if defined(USE_LEGACY_PLAYER_CAPI)
- int ret;
+ static_cast<uint64>(decoder_buffer.get()->timestamp().InMilliseconds());
if (type == media::DemuxerStream::AUDIO) {
- ret = player_submit_packet(player_,
- decoder_buffer.get()->writable_data(),
- size, timestamp, PLAYER_TRACK_TYPE_AUDIO);
- } else if (type == media::DemuxerStream::VIDEO) {
- ret = player_submit_packet(player_,
- decoder_buffer.get()->writable_data(),
- size, timestamp, PLAYER_TRACK_TYPE_VIDEO);
- }
- if (ret != PLAYER_ERROR_NONE) {
- LOG(ERROR) << "player_submit_packet() Error: " << ret;
- return;
- }
-#else
- if (type == media::DemuxerStream::AUDIO) {
- if (media_packet_create_alloc(m_audioFormat, NULL, NULL, &media_packet_)
+ if (media_packet_create_from_external_memory(
+ m_audioFormat,
+ static_cast<void*>(decoder_buffer.get()->writable_data()),
+ size, NULL, NULL, &media_packet_)
!= MEDIA_PACKET_ERROR_NONE) {
- LOG(ERROR) << "Audio media_packet_create_alloc failed\n";
- media_format_unref(m_audioFormat);
+ LOG(ERROR) << "Audio media_packet_create_from_external_memory failed";
return;
}
} else if (type == media::DemuxerStream::VIDEO) {
- if (media_packet_create_alloc(m_videoFormat, NULL, NULL, &media_packet_)
- != MEDIA_PACKET_ERROR_NONE) {
- LOG(ERROR) << "Video media_packet_create_alloc failed\n";
- media_format_unref(m_videoFormat);
- return;
- }
- }
-
- if (media_packet_get_buffer_data_ptr(media_packet_,
- reinterpret_cast<void**>(&data))
- != MEDIA_PACKET_ERROR_NONE) {
- LOG(ERROR) << "media_packet_get_buffer_data_ptr failed\n";
- return;
- }
- memcpy(data, decoder_buffer.get()->writable_data(), size);
-
- if (media_packet_set_buffer_size(media_packet_, (uint64)size)
- != MEDIA_PACKET_ERROR_NONE) {
- LOG(ERROR) << "media_packet_set_buffer_size failed\n";
- return;
+ if (media_packet_create_from_external_memory(
+ m_videoFormat,
+ static_cast<void*>(decoder_buffer.get()->writable_data()),
+ size, NULL, NULL, &media_packet_)
+ != MEDIA_PACKET_ERROR_NONE) {
+ LOG(ERROR) << "Video media_packet_create_from_external_memory failed";
+ return;
+ }
}
if (media_packet_set_pts(media_packet_, timestamp)
!= MEDIA_PACKET_ERROR_NONE) {
- LOG(ERROR) << "media_packet_set_pts failed\n";
+ LOG(ERROR) << "media_packet_set_pts failed";
return;
}
+
if (player_push_media_stream(player_, media_packet_)
- != PLAYER_ERROR_NONE) {
+ != MEDIA_PACKET_ERROR_NONE)
LOG(ERROR) << "player_push_media_stream failed";
- return;
- }
if (type == media::DemuxerStream::AUDIO)
media_format_unref(m_audioFormat);
if (media_packet_)
media_packet_destroy(media_packet_);
media_packet_ = NULL;
-#endif
+
ReadFromQueueIfAny(type);
return;
}
else if (meta_data.type == media::DemuxerStream::VIDEO)
video_buffer_queue_.push_back(buffer);
}
+
} // namespace media