[TTVD] Fix overriding bidirectional flag for encrypted content 73/324573/3
authorJakub Gajownik <j.gajownik2@samsung.com>
Mon, 19 May 2025 18:26:39 +0000 (20:26 +0200)
committerBot Blink <blinkbot@samsung.com>
Tue, 20 May 2025 16:33:47 +0000 (16:33 +0000)
When content is encrypted, we cannot properly parse buffers
to check if it contains bidirectional frame. Before this
patch is assumed that in such situations, bidirectional
frames existance flag should be set, but some codecs doesn't
have them at all. Enabling additional logic might degrade
performance and stability of playback.

Bug: https://jira-eu.sec.samsung.net/browse/VDGAME-707
Change-Id: I2b89ee406cdb59515b72a49afba907913cd1736f
Signed-off-by: Jakub Gajownik <j.gajownik2@samsung.com>
media/filters/tizen/ttvd_video_decoder_impl.cc

index cd68ea5ecb48acd53beaccfa2c6d642360eebc3f..93d85467682e19b4e71f104946b2a737817a61cf 100644 (file)
@@ -125,6 +125,10 @@ size_t MaxForwardReferenceFrameDistance(MediaVideoCodec codec) {
   }
   return 0;
 }
+
+bool CanCodecHaveBidirectionalFrames(MediaVideoCodec codec) {
+  return MaxForwardReferenceFrameDistance(codec) > 0;
+}
 }  // namespace
 
 void DecodedCollectionOnGpu::NotifyModeChange(gfx::VideoOutputMode mode) {
@@ -2582,7 +2586,8 @@ void TTvdVideoDecoderImpl::UpdateConfigUsingBuffer(
     const DecoderBuffer& buffer) {
   UpdateConfig(&config_,
                base::span<const uint8_t>(buffer.data(), buffer.data_size()));
-  if (buffer.is_encrypted() && !config_.has_bidirectional_frames) {
+  if (buffer.is_encrypted() && !config_.has_bidirectional_frames &&
+      CanCodecHaveBidirectionalFrames(codec_)) {
     TIZEN_MEDIA_LOG(INFO)
         << "Encrypted buffer, assume it has bidirectional frames";
     config_.has_bidirectional_frames = true;