LCOV - code coverage report
Current view: top level - media/server/ipc/source - MediaPipelineClient.cpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 55.1 % 118 65
Test Date: 2025-02-18 13:13:53 Functions: 64.7 % 17 11

            Line data    Source code
       1              : /*
       2              :  * If not stated otherwise in this file or this component's LICENSE file the
       3              :  * following copyright and licenses apply:
       4              :  *
       5              :  * Copyright 2022 Sky UK
       6              :  *
       7              :  * Licensed under the Apache License, Version 2.0 (the "License");
       8              :  * you may not use this file except in compliance with the License.
       9              :  * You may obtain a copy of the License at
      10              :  *
      11              :  * http://www.apache.org/licenses/LICENSE-2.0
      12              :  *
      13              :  * Unless required by applicable law or agreed to in writing, software
      14              :  * distributed under the License is distributed on an "AS IS" BASIS,
      15              :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      16              :  * See the License for the specific language governing permissions and
      17              :  * limitations under the License.
      18              :  */
      19              : 
      20              : #include "MediaPipelineClient.h"
      21              : #include "RialtoServerLogging.h"
      22              : #include "mediapipelinemodule.pb.h"
      23              : #include <IIpcServer.h>
      24              : 
      25              : namespace
      26              : {
      27              : firebolt::rialto::PlaybackStateChangeEvent_PlaybackState
      28            1 : convertPlaybackState(const firebolt::rialto::PlaybackState &playbackState)
      29              : {
      30            1 :     switch (playbackState)
      31              :     {
      32            0 :     case firebolt::rialto::PlaybackState::UNKNOWN:
      33              :     {
      34            0 :         return firebolt::rialto::PlaybackStateChangeEvent_PlaybackState_UNKNOWN;
      35              :     }
      36            0 :     case firebolt::rialto::PlaybackState::IDLE:
      37              :     {
      38            0 :         return firebolt::rialto::PlaybackStateChangeEvent_PlaybackState_IDLE;
      39              :     }
      40            1 :     case firebolt::rialto::PlaybackState::PLAYING:
      41              :     {
      42            1 :         return firebolt::rialto::PlaybackStateChangeEvent_PlaybackState_PLAYING;
      43              :     }
      44            0 :     case firebolt::rialto::PlaybackState::PAUSED:
      45              :     {
      46            0 :         return firebolt::rialto::PlaybackStateChangeEvent_PlaybackState_PAUSED;
      47              :     }
      48            0 :     case firebolt::rialto::PlaybackState::SEEKING:
      49              :     {
      50            0 :         return firebolt::rialto::PlaybackStateChangeEvent_PlaybackState_SEEKING;
      51              :     }
      52            0 :     case firebolt::rialto::PlaybackState::SEEK_DONE:
      53              :     {
      54            0 :         return firebolt::rialto::PlaybackStateChangeEvent_PlaybackState_SEEK_DONE;
      55              :     }
      56            0 :     case firebolt::rialto::PlaybackState::STOPPED:
      57              :     {
      58            0 :         return firebolt::rialto::PlaybackStateChangeEvent_PlaybackState_STOPPED;
      59              :     }
      60            0 :     case firebolt::rialto::PlaybackState::END_OF_STREAM:
      61              :     {
      62            0 :         return firebolt::rialto::PlaybackStateChangeEvent_PlaybackState_END_OF_STREAM;
      63              :     }
      64            0 :     case firebolt::rialto::PlaybackState::FAILURE:
      65              :     {
      66            0 :         return firebolt::rialto::PlaybackStateChangeEvent_PlaybackState_FAILURE;
      67              :     }
      68              :     }
      69            0 :     return firebolt::rialto::PlaybackStateChangeEvent_PlaybackState_UNKNOWN;
      70              : }
      71              : 
      72              : firebolt::rialto::NetworkStateChangeEvent_NetworkState
      73            1 : convertNetworkState(const firebolt::rialto::NetworkState &networkState)
      74              : {
      75            1 :     switch (networkState)
      76              :     {
      77            0 :     case firebolt::rialto::NetworkState::UNKNOWN:
      78              :     {
      79            0 :         return firebolt::rialto::NetworkStateChangeEvent_NetworkState_UNKNOWN;
      80              :     }
      81            0 :     case firebolt::rialto::NetworkState::IDLE:
      82              :     {
      83            0 :         return firebolt::rialto::NetworkStateChangeEvent_NetworkState_IDLE;
      84              :     }
      85            0 :     case firebolt::rialto::NetworkState::BUFFERING:
      86              :     {
      87            0 :         return firebolt::rialto::NetworkStateChangeEvent_NetworkState_BUFFERING;
      88              :     }
      89            0 :     case firebolt::rialto::NetworkState::BUFFERING_PROGRESS:
      90              :     {
      91            0 :         return firebolt::rialto::NetworkStateChangeEvent_NetworkState_BUFFERING_PROGRESS;
      92              :     }
      93            1 :     case firebolt::rialto::NetworkState::BUFFERED:
      94              :     {
      95            1 :         return firebolt::rialto::NetworkStateChangeEvent_NetworkState_BUFFERED;
      96              :     }
      97            0 :     case firebolt::rialto::NetworkState::STALLED:
      98              :     {
      99            0 :         return firebolt::rialto::NetworkStateChangeEvent_NetworkState_STALLED;
     100              :     }
     101            0 :     case firebolt::rialto::NetworkState::FORMAT_ERROR:
     102              :     {
     103            0 :         return firebolt::rialto::NetworkStateChangeEvent_NetworkState_FORMAT_ERROR;
     104              :     }
     105            0 :     case firebolt::rialto::NetworkState::NETWORK_ERROR:
     106              :     {
     107            0 :         return firebolt::rialto::NetworkStateChangeEvent_NetworkState_NETWORK_ERROR;
     108              :     }
     109            0 :     case firebolt::rialto::NetworkState::DECODE_ERROR:
     110              :     {
     111            0 :         return firebolt::rialto::NetworkStateChangeEvent_NetworkState_DECODE_ERROR;
     112              :     }
     113              :     }
     114            0 :     return firebolt::rialto::NetworkStateChangeEvent_NetworkState_UNKNOWN;
     115              : }
     116              : 
     117            1 : firebolt::rialto::PlaybackErrorEvent_PlaybackError convertPlaybackError(const firebolt::rialto::PlaybackError &playbackError)
     118              : {
     119            1 :     switch (playbackError)
     120              :     {
     121            0 :     case firebolt::rialto::PlaybackError::UNKNOWN:
     122              :     {
     123            0 :         return firebolt::rialto::PlaybackErrorEvent_PlaybackError_UNKNOWN;
     124              :     }
     125            1 :     case firebolt::rialto::PlaybackError::DECRYPTION:
     126              :     {
     127            1 :         return firebolt::rialto::PlaybackErrorEvent_PlaybackError_DECRYPTION;
     128              :     }
     129              :     }
     130            0 :     return firebolt::rialto::PlaybackErrorEvent_PlaybackError_UNKNOWN;
     131              : }
     132              : } // namespace
     133              : 
     134              : namespace firebolt::rialto::server::ipc
     135              : {
     136           20 : MediaPipelineClient::MediaPipelineClient(int sessionId, const std::shared_ptr<::firebolt::rialto::ipc::IClient> &ipcClient)
     137           20 :     : m_sessionId{sessionId}, m_ipcClient{ipcClient}
     138              : {
     139              : }
     140              : 
     141              : MediaPipelineClient::~MediaPipelineClient() {}
     142              : 
     143            0 : void MediaPipelineClient::notifyDuration(int64_t duration)
     144              : {
     145            0 :     RIALTO_SERVER_LOG_WARN("Notify Duration not supported");
     146              : }
     147              : 
     148            1 : void MediaPipelineClient::notifyPosition(int64_t position)
     149              : {
     150            1 :     RIALTO_SERVER_LOG_DEBUG("Sending PositionChangeEvent");
     151              : 
     152            1 :     auto event = std::make_shared<firebolt::rialto::PositionChangeEvent>();
     153            1 :     event->set_session_id(m_sessionId);
     154            1 :     event->set_position(position);
     155              : 
     156            1 :     m_ipcClient->sendEvent(event);
     157              : }
     158              : 
     159            0 : void MediaPipelineClient::notifyNativeSize(uint32_t width, uint32_t height, double aspect)
     160              : {
     161            0 :     RIALTO_SERVER_LOG_WARN("Notify Native Size not supported");
     162              : }
     163              : 
     164            1 : void MediaPipelineClient::notifyNetworkState(NetworkState state)
     165              : {
     166            1 :     RIALTO_SERVER_LOG_DEBUG("Sending NetworkStateChangeEvent");
     167              : 
     168            1 :     auto event = std::make_shared<firebolt::rialto::NetworkStateChangeEvent>();
     169            1 :     event->set_session_id(m_sessionId);
     170            1 :     event->set_state(convertNetworkState(state));
     171              : 
     172            1 :     m_ipcClient->sendEvent(event);
     173              : }
     174              : 
     175            1 : void MediaPipelineClient::notifyPlaybackState(PlaybackState state)
     176              : {
     177            1 :     RIALTO_SERVER_LOG_DEBUG("Sending PlaybackStateChangeEvent...");
     178              : 
     179            1 :     auto event = std::make_shared<firebolt::rialto::PlaybackStateChangeEvent>();
     180            1 :     event->set_session_id(m_sessionId);
     181            1 :     event->set_state(convertPlaybackState(state));
     182              : 
     183            1 :     m_ipcClient->sendEvent(event);
     184              : }
     185              : 
     186            0 : void MediaPipelineClient::notifyVideoData(bool hasData)
     187              : {
     188            0 :     RIALTO_SERVER_LOG_WARN("Notify Video Data not supported");
     189              : }
     190              : 
     191            0 : void MediaPipelineClient::notifyAudioData(bool hasData)
     192              : {
     193            0 :     RIALTO_SERVER_LOG_WARN("Notify Audio Data not supported");
     194              : }
     195              : 
     196            1 : void MediaPipelineClient::notifyNeedMediaData(int32_t sourceId, size_t frameCount, uint32_t needDataRequestId,
     197              :                                               const std::shared_ptr<MediaPlayerShmInfo> &shmInfo)
     198              : {
     199            1 :     RIALTO_SERVER_LOG_DEBUG("Sending NeedMediaDataEvent...");
     200              : 
     201            1 :     auto event = std::make_shared<firebolt::rialto::NeedMediaDataEvent>();
     202            1 :     event->set_session_id(m_sessionId);
     203            1 :     event->set_source_id(sourceId);
     204            1 :     event->set_request_id(needDataRequestId);
     205            1 :     event->set_frame_count(frameCount);
     206            1 :     event->mutable_shm_info()->set_max_metadata_bytes(shmInfo->maxMetadataBytes);
     207            1 :     event->mutable_shm_info()->set_metadata_offset(shmInfo->metadataOffset);
     208            1 :     event->mutable_shm_info()->set_media_data_offset(shmInfo->mediaDataOffset);
     209            1 :     event->mutable_shm_info()->set_max_media_bytes(shmInfo->maxMediaBytes);
     210              : 
     211            1 :     m_ipcClient->sendEvent(event);
     212              : }
     213              : 
     214            0 : void MediaPipelineClient::notifyCancelNeedMediaData(int32_t sourceId)
     215              : {
     216            0 :     RIALTO_SERVER_LOG_WARN("Notify Cancel Need Media Data not supported");
     217              : }
     218              : 
     219            1 : void MediaPipelineClient::notifyQos(int32_t sourceId, const QosInfo &qosInfo)
     220              : {
     221            1 :     RIALTO_SERVER_LOG_DEBUG("Sending QosEvent...");
     222              : 
     223            1 :     auto event = std::make_shared<firebolt::rialto::QosEvent>();
     224            1 :     event->set_session_id(m_sessionId);
     225            1 :     event->set_source_id(sourceId);
     226            1 :     event->mutable_qos_info()->set_processed(qosInfo.processed);
     227            1 :     event->mutable_qos_info()->set_dropped(qosInfo.dropped);
     228              : 
     229            1 :     m_ipcClient->sendEvent(event);
     230              : }
     231              : 
     232            0 : void MediaPipelineClient::notifyBufferUnderflow(int32_t sourceId)
     233              : {
     234            0 :     RIALTO_SERVER_LOG_DEBUG("Sending BufferUnderflowEvent...");
     235              : 
     236            0 :     auto event = std::make_shared<firebolt::rialto::BufferUnderflowEvent>();
     237            0 :     event->set_session_id(m_sessionId);
     238            0 :     event->set_source_id(sourceId);
     239              : 
     240            0 :     m_ipcClient->sendEvent(event);
     241              : }
     242              : 
     243            1 : void MediaPipelineClient::notifyPlaybackError(int32_t sourceId, PlaybackError error)
     244              : {
     245            1 :     RIALTO_SERVER_LOG_DEBUG("Sending notifyPlaybackError...");
     246              : 
     247            1 :     auto event = std::make_shared<firebolt::rialto::PlaybackErrorEvent>();
     248            1 :     event->set_session_id(m_sessionId);
     249            1 :     event->set_source_id(sourceId);
     250            1 :     event->set_error(convertPlaybackError(error));
     251              : 
     252            1 :     m_ipcClient->sendEvent(event);
     253              : }
     254              : 
     255            1 : void MediaPipelineClient::notifySourceFlushed(int32_t sourceId)
     256              : {
     257            1 :     RIALTO_SERVER_LOG_DEBUG("Sending SourceFlushedEvent...");
     258              : 
     259            1 :     auto event = std::make_shared<firebolt::rialto::SourceFlushedEvent>();
     260            1 :     event->set_session_id(m_sessionId);
     261            1 :     event->set_source_id(sourceId);
     262              : 
     263            1 :     m_ipcClient->sendEvent(event);
     264              : }
     265              : } // namespace firebolt::rialto::server::ipc
        

Generated by: LCOV version 2.0-1