Merge branch 'main' into ci/gilbok-lee/update_public
[platform/core/multimedia/esplusplayer.git] / src / esplusplayer / src / esplayer.cpp
old mode 100644 (file)
new mode 100755 (executable)
index fa1922e..9096ef6
@@ -1337,6 +1337,7 @@ void EsPlayer::ResetContextForClose_() {
   app_info_ = PlayerAppInfo();
   src_queue_size_ = SrcQueueSize();
   is_msg_task_stop_ = false;
+  key_system_acquired_ = false;
 }
 
 void EsPlayer::ResetContextForStop_() {
@@ -1372,8 +1373,12 @@ void EsPlayer::GetSrcQueueCurrentSize_(const TrackType& type,
         &time_size_);
   } else
     return;
-  *byte_size = boost::any_cast<std::uint64_t>(byte_size_);
-  *time_size = boost::any_cast<std::uint64_t>(time_size_);
+  try {
+    *byte_size = boost::any_cast<std::uint64_t>(byte_size_);
+    *time_size = boost::any_cast<std::uint64_t>(time_size_);
+  } catch (...) {
+    LOG_INFO_P(this, "any_cast failed");
+  }
   if (time_unit_type == kPlayerTimeUnitTypeMs)
     *time_size = util::ConvertNsToMs(*time_size);
   else if (time_unit_type == kPlayerTimeUnitTypeUs)
@@ -1660,6 +1665,19 @@ PacketSubmitStatus EsPlayer::SubmitEncryptedPacket(
     MakeGstBufferForEncryptedPacket_(gstbuffer, packet, drm_info);
     return PacketSubmitStatus::kSuccess;
   };
+  if (!key_system_acquired_ && drm_info.handle != 0) {
+    key_system_ = eme::IEME::getKeySystemName(drm_info.handle);
+    LOG_INFO("KeySystemName :: [%s] ", key_system_.c_str());
+    if (!state_manager_
+             .GetPreparingState()) {  // if the stream comes with clean data at
+                                      // the beginning, re-post kpi when we get
+                                      // key system.
+      kpi::CodecLogger logger;
+      kpi::EsCodecLoggerKeys event_keys = MakeKpiKeys_();
+      logger.SendKpi(true, event_keys);
+    }
+    key_system_acquired_ = true;
+  }
   return SubmitPacketCommon_(packet, submitpacket_op);
 }
 // LCOV_EXCL_STOP
@@ -3010,6 +3028,7 @@ kpi::EsCodecLoggerKeys EsPlayer::MakeKpiKeys_() {
     event_info.is_clean = true;
   } else {
     event_info.is_clean = false;
+    event_info.key_system = key_system_;
   }
 
   for (const auto& track : track_) {