}
MediaSourcePlayerCapi* player = static_cast<MediaSourcePlayerCapi*>(data);
- if (!player || player->IsPlayerDestructing()) {
- media_packet_destroy(packet);
- LOG(ERROR) << "media_packet_decoded_cb - player handle is null";
- return;
- }
player->OnMediaPacketUpdated(packet);
}
#endif
media_packet_(NULL),
#endif
audio_format_(NULL),
- video_format_(NULL) {
+ video_format_(NULL),
+ weak_factory_(this) {
demuxer_->Initialize(this);
audio_buffer_queue_.clear();
video_buffer_queue_.clear();
void MediaSourcePlayerCapi::OnMediaPacketUpdated(media_packet_h packet) {
task_runner_->PostTask(
FROM_HERE, base::Bind(&MediaSourcePlayerCapi::DeliverMediaPacket,
- base::Unretained(this), packet));
+ weak_factory_.GetWeakPtr(), packet));
}
#endif // TIZEN_VIDEO_HOLE
destructing_ = true;
Release();
player_destroy(player_);
+ player_ = NULL;
task_runner_->DeleteSoon(FROM_HERE, this);
}
video_buffer_queue_.clear();
if (player_) {
player_unset_completed_cb(player_);
+ player_unset_media_packet_video_frame_decoded_cb(player_);
player_unprepare(player_);
}
manager()->OnSuspendComplete(GetPlayerId());
void MediaSourcePlayerCapi::OnDemuxerConfigsAvailable(
const DemuxerConfigs& configs) {
- if (IsPlayerDestructing())
- return;
if (!player_)
return;
if (player_prepared_) {
task_runner_->PostTask(
FROM_HERE, base::Bind(&MediaSourcePlayerCapi::Pause,
- base::Unretained(this), true));
+ weak_factory_.GetWeakPtr(), true));
}
task_runner_->PostTask(
FROM_HERE, base::Bind(&MediaSourcePlayerCapi::ReadDemuxedData,
- base::Unretained(this), type));
+ weak_factory_.GetWeakPtr(), type));
} else if (!underflow_status) {
if (type == media::DemuxerStream::VIDEO) {
should_feed_video_ = underflow_status;
(!should_feed_video_ || eos_video_)) {
task_runner_->PostTask(
FROM_HERE, base::Bind(&MediaSourcePlayerCapi::Play,
- base::Unretained(this)));
+ weak_factory_.GetWeakPtr()));
}
}
}
void MediaSourcePlayerCapi::OnPrepareComplete() {
task_runner_->PostTask(
FROM_HERE, base::Bind(&MediaSourcePlayerCapi::PrepareComplete,
- base::Unretained(this)));
+ weak_factory_.GetWeakPtr()));
}
void MediaSourcePlayerCapi::OnPlaybackComplete() {
task_runner_->PostTask(
FROM_HERE, base::Bind(&MediaSourcePlayerCapi::PlaybackComplete,
- base::Unretained(this)));
+ weak_factory_.GetWeakPtr()));
}
void MediaSourcePlayerCapi::OnSeekComplete() {
task_runner_->PostTask(
FROM_HERE, base::Bind(&MediaSourcePlayerCapi::SeekComplete,
- base::Unretained(this)));
+ weak_factory_.GetWeakPtr()));
}
void MediaSourcePlayerCapi::OnHandleBufferingMessage(int percent) {
task_runner_->PostTask(
FROM_HERE, base::Bind(&MediaSourcePlayerCapi::HandleBufferingMessage,
- base::Unretained(this),
+ weak_factory_.GetWeakPtr(),
percent));
}
task_runner_->PostTask(
FROM_HERE, base::Bind(&MediaSourcePlayerCapi::ReadDemuxedData,
- base::Unretained(this), type));
+ weak_factory_.GetWeakPtr(), type));
}
void MediaSourcePlayerCapi::OnUpdateDataStatus(
task_runner_->PostTask(
FROM_HERE, base::Bind(&MediaSourcePlayerCapi::HandleUnderFlowStatus,
- base::Unretained(this),
+ weak_factory_.GetWeakPtr(),
type,
underflow_status));
}
void MediaSourcePlayerCapi::OnPlayerError(int error_code, const char* msg) {
task_runner_->PostTask(
FROM_HERE, base::Bind(&MediaSourcePlayerCapi::HandlePlayerError,
- base::Unretained(this), error_code, msg));
+ weak_factory_.GetWeakPtr(), error_code, msg));
}
} // namespace media