LCOV - code coverage report
Current view: top level - media/server/gstplayer/source/tasks/generic - GenericPlayerTaskFactory.cpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 98.0 % 98 96
Test Date: 2026-06-17 06:35:35 Functions: 97.7 % 43 42

            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              : #include "tasks/generic/GenericPlayerTaskFactory.h"
      20              : #include "IMediaPipeline.h"
      21              : #include "tasks/generic/AttachSamples.h"
      22              : #include "tasks/generic/AttachSource.h"
      23              : #include "tasks/generic/CheckAudioUnderflow.h"
      24              : #include "tasks/generic/DeepElementAdded.h"
      25              : #include "tasks/generic/EnoughData.h"
      26              : #include "tasks/generic/Eos.h"
      27              : #include "tasks/generic/FinishSetupSource.h"
      28              : #include "tasks/generic/FirstFrameReceived.h"
      29              : #include "tasks/generic/Flush.h"
      30              : #include "tasks/generic/HandleBusMessage.h"
      31              : #include "tasks/generic/NeedData.h"
      32              : #include "tasks/generic/Pause.h"
      33              : #include "tasks/generic/Ping.h"
      34              : #include "tasks/generic/Play.h"
      35              : #include "tasks/generic/ProcessAudioGap.h"
      36              : #include "tasks/generic/ReadShmDataAndAttachSamples.h"
      37              : #include "tasks/generic/RemoveSource.h"
      38              : #include "tasks/generic/RenderFrame.h"
      39              : #include "tasks/generic/ReportPosition.h"
      40              : #include "tasks/generic/SetBufferingLimit.h"
      41              : #include "tasks/generic/SetImmediateOutput.h"
      42              : #include "tasks/generic/SetLowLatency.h"
      43              : #include "tasks/generic/SetMute.h"
      44              : #include "tasks/generic/SetPlaybackRate.h"
      45              : #include "tasks/generic/SetPosition.h"
      46              : #include "tasks/generic/SetSourcePosition.h"
      47              : #include "tasks/generic/SetStreamSyncMode.h"
      48              : #include "tasks/generic/SetSubtitleOffset.h"
      49              : #include "tasks/generic/SetSync.h"
      50              : #include "tasks/generic/SetSyncOff.h"
      51              : #include "tasks/generic/SetTextTrackIdentifier.h"
      52              : #include "tasks/generic/SetUseBuffering.h"
      53              : #include "tasks/generic/SetVideoGeometry.h"
      54              : #include "tasks/generic/SetVolume.h"
      55              : #include "tasks/generic/SetupElement.h"
      56              : #include "tasks/generic/SetupSource.h"
      57              : #include "tasks/generic/Shutdown.h"
      58              : #include "tasks/generic/Stop.h"
      59              : #include "tasks/generic/SwitchSource.h"
      60              : #include "tasks/generic/SynchroniseSubtitleClock.h"
      61              : #include "tasks/generic/Underflow.h"
      62              : #include "tasks/generic/UpdatePlaybackGroup.h"
      63              : 
      64              : namespace firebolt::rialto::server
      65              : {
      66           42 : GenericPlayerTaskFactory::GenericPlayerTaskFactory(
      67              :     IGstGenericPlayerClient *client, const std::shared_ptr<firebolt::rialto::wrappers::IGstWrapper> &gstWrapper,
      68              :     const std::shared_ptr<firebolt::rialto::wrappers::IGlibWrapper> &glibWrapper,
      69              :     const std::shared_ptr<firebolt::rialto::wrappers::IRdkGstreamerUtilsWrapper> &rdkGstreamerUtilsWrapper,
      70           42 :     const std::shared_ptr<IGstTextTrackSinkFactory> &gstTextTrackSinkFactory)
      71           42 :     : m_client{client}, m_gstWrapper{gstWrapper}, m_glibWrapper{glibWrapper},
      72           84 :       m_rdkGstreamerUtilsWrapper{rdkGstreamerUtilsWrapper}, m_gstTextTrackSinkFactory{gstTextTrackSinkFactory}
      73              : {
      74           42 : }
      75              : 
      76              : std::unique_ptr<IPlayerTask>
      77            1 : GenericPlayerTaskFactory::createAttachSamples(GenericPlayerContext &context, IGstGenericPlayerPrivate &player,
      78              :                                               const IMediaPipeline::MediaSegmentVector &mediaSegments) const
      79              : {
      80            1 :     return std::make_unique<tasks::generic::AttachSamples>(context, m_gstWrapper, player, mediaSegments);
      81              : }
      82              : 
      83              : std::unique_ptr<IPlayerTask>
      84            1 : GenericPlayerTaskFactory::createAttachSource(GenericPlayerContext &context, IGstGenericPlayerPrivate &player,
      85              :                                              const std::unique_ptr<IMediaPipeline::MediaSource> &source) const
      86              : {
      87            1 :     return std::make_unique<tasks::generic::AttachSource>(context, m_gstWrapper, m_glibWrapper,
      88            2 :                                                           m_gstTextTrackSinkFactory, player, source);
      89              : }
      90              : 
      91            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createDeepElementAdded(GenericPlayerContext &context,
      92              :                                                                               IGstGenericPlayerPrivate &player,
      93              :                                                                               GstBin *pipeline, GstBin *bin,
      94              :                                                                               GstElement *element) const
      95              : {
      96            2 :     return std::make_unique<tasks::generic::DeepElementAdded>(context, player, m_gstWrapper, m_glibWrapper, pipeline,
      97            2 :                                                               bin, element);
      98              : }
      99              : 
     100            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createEnoughData(GenericPlayerContext &context, GstAppSrc *src) const
     101              : {
     102            1 :     return std::make_unique<tasks::generic::EnoughData>(context, src);
     103              : }
     104              : 
     105            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createEos(GenericPlayerContext &context,
     106              :                                                                  IGstGenericPlayerPrivate &player,
     107              :                                                                  const firebolt::rialto::MediaSourceType &type) const
     108              : {
     109            1 :     return std::make_unique<tasks::generic::Eos>(context, player, m_gstWrapper, type);
     110              : }
     111              : 
     112            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createFinishSetupSource(GenericPlayerContext &context,
     113              :                                                                                IGstGenericPlayerPrivate &player) const
     114              : {
     115            1 :     return std::make_unique<tasks::generic::FinishSetupSource>(context, player, m_client);
     116              : }
     117              : 
     118            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createHandleBusMessage(GenericPlayerContext &context,
     119              :                                                                               IGstGenericPlayerPrivate &player,
     120              :                                                                               GstMessage *message,
     121              :                                                                               const IFlushWatcher &flushWatcher) const
     122              : {
     123            2 :     return std::make_unique<tasks::generic::HandleBusMessage>(context, player, m_client, m_gstWrapper, m_glibWrapper,
     124            2 :                                                               message, flushWatcher);
     125              : }
     126              : 
     127            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createNeedData(GenericPlayerContext &context,
     128              :                                                                       IGstGenericPlayerPrivate &player,
     129              :                                                                       GstAppSrc *src) const
     130              : {
     131            1 :     return std::make_unique<tasks::generic::NeedData>(context, player, m_client, src);
     132              : }
     133              : 
     134            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createPause(GenericPlayerContext &context,
     135              :                                                                    IGstGenericPlayerPrivate &player) const
     136              : {
     137            1 :     return std::make_unique<tasks::generic::Pause>(context, player);
     138              : }
     139              : 
     140            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createPlay(IGstGenericPlayerPrivate &player) const
     141              : {
     142            1 :     return std::make_unique<tasks::generic::Play>(player);
     143              : }
     144              : 
     145            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createReadShmDataAndAttachSamples(
     146              :     GenericPlayerContext &context, IGstGenericPlayerPrivate &player, const std::shared_ptr<IDataReader> &dataReader) const
     147              : {
     148            1 :     return std::make_unique<tasks::generic::ReadShmDataAndAttachSamples>(context, m_gstWrapper, player, dataReader);
     149              : }
     150              : 
     151              : std::unique_ptr<IPlayerTask>
     152            1 : GenericPlayerTaskFactory::createRemoveSource(GenericPlayerContext &context, IGstGenericPlayerPrivate &player,
     153              :                                              const firebolt::rialto::MediaSourceType &type) const
     154              : {
     155            1 :     return std::make_unique<tasks::generic::RemoveSource>(context, player, m_client, m_gstWrapper, type);
     156              : }
     157              : 
     158            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createReportPosition(GenericPlayerContext &context,
     159              :                                                                             IGstGenericPlayerPrivate &player) const
     160              : {
     161            1 :     return std::make_unique<tasks::generic::ReportPosition>(context, m_client, m_gstWrapper, player);
     162              : }
     163              : 
     164            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createCheckAudioUnderflow(GenericPlayerContext &context,
     165              :                                                                                  IGstGenericPlayerPrivate &player) const
     166              : {
     167            1 :     return std::make_unique<tasks::generic::CheckAudioUnderflow>(context, player, m_client, m_gstWrapper);
     168              : }
     169              : 
     170            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createSetPlaybackRate(GenericPlayerContext &context,
     171              :                                                                              double rate) const
     172              : {
     173            1 :     return std::make_unique<tasks::generic::SetPlaybackRate>(context, m_gstWrapper, m_glibWrapper, rate);
     174              : }
     175              : 
     176            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createSetPosition(GenericPlayerContext &context,
     177              :                                                                          IGstGenericPlayerPrivate &player,
     178              :                                                                          std::int64_t position) const
     179              : {
     180            1 :     return std::make_unique<tasks::generic::SetPosition>(context, player, m_client, m_gstWrapper, position);
     181              : }
     182              : 
     183            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createSetupElement(GenericPlayerContext &context,
     184              :                                                                           IGstGenericPlayerPrivate &player,
     185              :                                                                           GstElement *element) const
     186              : {
     187            1 :     return std::make_unique<tasks::generic::SetupElement>(context, m_gstWrapper, m_glibWrapper, player, element);
     188              : }
     189              : 
     190            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createSetupSource(GenericPlayerContext &context,
     191              :                                                                          IGstGenericPlayerPrivate &player,
     192              :                                                                          GstElement *source) const
     193              : {
     194            1 :     return std::make_unique<tasks::generic::SetupSource>(context, player, source);
     195              : }
     196              : 
     197            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createSetVideoGeometry(GenericPlayerContext &context,
     198              :                                                                               IGstGenericPlayerPrivate &player,
     199              :                                                                               const Rectangle &rectangle) const
     200              : {
     201            1 :     return std::make_unique<tasks::generic::SetVideoGeometry>(context, player, rectangle);
     202              : }
     203              : 
     204            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createSetVolume(GenericPlayerContext &context,
     205              :                                                                        IGstGenericPlayerPrivate &player,
     206              :                                                                        double targetVolume, uint32_t volumeDuration,
     207              :                                                                        firebolt::rialto::EaseType easeType) const
     208              : {
     209            1 :     return std::make_unique<tasks::generic::SetVolume>(context, player, m_gstWrapper, m_glibWrapper,
     210            1 :                                                        m_rdkGstreamerUtilsWrapper, targetVolume, volumeDuration,
     211            2 :                                                        easeType);
     212              : }
     213              : 
     214            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createSetMute(GenericPlayerContext &context,
     215              :                                                                      IGstGenericPlayerPrivate &player,
     216              :                                                                      const MediaSourceType &mediaSourceType,
     217              :                                                                      bool mute) const
     218              : {
     219            1 :     return std::make_unique<tasks::generic::SetMute>(context, player, m_gstWrapper, m_glibWrapper, mediaSourceType, mute);
     220              : }
     221              : 
     222              : std::unique_ptr<IPlayerTask>
     223            1 : GenericPlayerTaskFactory::createSetTextTrackIdentifier(GenericPlayerContext &context,
     224              :                                                        const std::string &textTrackIdentifier) const
     225              : {
     226            1 :     return std::make_unique<tasks::generic::SetTextTrackIdentifier>(context, m_glibWrapper, textTrackIdentifier);
     227              : }
     228              : 
     229            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createSetLowLatency(GenericPlayerContext &context,
     230              :                                                                            IGstGenericPlayerPrivate &player,
     231              :                                                                            bool lowLatency) const
     232              : {
     233            1 :     return std::make_unique<tasks::generic::SetLowLatency>(context, player, lowLatency);
     234              : }
     235              : 
     236            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createSetSync(GenericPlayerContext &context,
     237              :                                                                      IGstGenericPlayerPrivate &player, bool sync) const
     238              : {
     239            1 :     return std::make_unique<tasks::generic::SetSync>(context, player, sync);
     240              : }
     241              : 
     242            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createSetSyncOff(GenericPlayerContext &context,
     243              :                                                                         IGstGenericPlayerPrivate &player,
     244              :                                                                         bool syncOff) const
     245              : {
     246            1 :     return std::make_unique<tasks::generic::SetSyncOff>(context, player, syncOff);
     247              : }
     248              : 
     249              : std::unique_ptr<IPlayerTask>
     250            1 : GenericPlayerTaskFactory::createSetStreamSyncMode(GenericPlayerContext &context, IGstGenericPlayerPrivate &player,
     251              :                                                   const firebolt::rialto::MediaSourceType &type,
     252              :                                                   int32_t streamSyncMode) const
     253              : {
     254            1 :     return std::make_unique<tasks::generic::SetStreamSyncMode>(context, player, type, streamSyncMode);
     255              : }
     256              : 
     257            2 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createShutdown(IGstGenericPlayerPrivate &player) const
     258              : {
     259            2 :     return std::make_unique<tasks::generic::Shutdown>(player);
     260              : }
     261              : 
     262            2 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createStop(GenericPlayerContext &context,
     263              :                                                                   IGstGenericPlayerPrivate &player) const
     264              : {
     265            2 :     return std::make_unique<tasks::generic::Stop>(context, player);
     266              : }
     267              : 
     268            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createUnderflow(GenericPlayerContext &context,
     269              :                                                                        IGstGenericPlayerPrivate &player,
     270              :                                                                        bool underflowEnabled,
     271              :                                                                        MediaSourceType sourceType) const
     272              : {
     273            1 :     return std::make_unique<tasks::generic::Underflow>(context, player, m_client, underflowEnabled, sourceType);
     274              : }
     275              : 
     276            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createFirstFrameReceived(GenericPlayerContext &context,
     277              :                                                                                 IGstGenericPlayerPrivate &player,
     278              :                                                                                 MediaSourceType sourceType) const
     279              : {
     280            1 :     return std::make_unique<tasks::generic::FirstFrameReceived>(context, player, m_client, sourceType);
     281              : }
     282              : 
     283            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createUpdatePlaybackGroup(GenericPlayerContext &context,
     284              :                                                                                  IGstGenericPlayerPrivate &player,
     285              :                                                                                  GstElement *typefind,
     286              :                                                                                  const GstCaps *caps) const
     287              : {
     288            2 :     return std::make_unique<tasks::generic::UpdatePlaybackGroup>(context, player, m_gstWrapper, m_glibWrapper, typefind,
     289            2 :                                                                  caps);
     290              : }
     291              : 
     292            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createRenderFrame(GenericPlayerContext &context,
     293              :                                                                          IGstGenericPlayerPrivate &player) const
     294              : {
     295            1 :     return std::make_unique<tasks::generic::RenderFrame>(context, player);
     296              : }
     297              : 
     298            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createPing(std::unique_ptr<IHeartbeatHandler> &&heartbeatHandler) const
     299              : {
     300            1 :     return std::make_unique<tasks::generic::Ping>(std::move(heartbeatHandler));
     301              : }
     302              : 
     303            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createFlush(GenericPlayerContext &context,
     304              :                                                                    IGstGenericPlayerPrivate &player,
     305              :                                                                    const firebolt::rialto::MediaSourceType &type,
     306              :                                                                    bool resetTime, bool isAsync) const
     307              : {
     308            1 :     return std::make_unique<tasks::generic::Flush>(context, player, m_client, m_gstWrapper, type, resetTime, isAsync);
     309              : }
     310              : 
     311              : std::unique_ptr<IPlayerTask>
     312            1 : GenericPlayerTaskFactory::createSetSourcePosition(GenericPlayerContext &context,
     313              :                                                   const firebolt::rialto::MediaSourceType &type, std::int64_t position,
     314              :                                                   bool resetTime, double appliedRate, uint64_t stopPosition) const
     315              : {
     316            2 :     return std::make_unique<tasks::generic::SetSourcePosition>(context, m_glibWrapper, type, position, resetTime,
     317            2 :                                                                appliedRate, stopPosition);
     318              : }
     319              : 
     320            0 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createSetSubtitleOffset(GenericPlayerContext &context,
     321              :                                                                                std::int64_t position) const
     322              : {
     323            0 :     return std::make_unique<tasks::generic::SetSubtitleOffset>(context, m_glibWrapper, position);
     324              : }
     325              : 
     326            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createProcessAudioGap(GenericPlayerContext &context,
     327              :                                                                              std::int64_t position,
     328              :                                                                              std::uint32_t duration,
     329              :                                                                              std::int64_t discontinuityGap,
     330              :                                                                              bool audioAac) const
     331              : {
     332            1 :     return std::make_unique<tasks::generic::ProcessAudioGap>(context, m_gstWrapper, m_glibWrapper,
     333            1 :                                                              m_rdkGstreamerUtilsWrapper, position, duration,
     334            2 :                                                              discontinuityGap, audioAac);
     335              : }
     336              : 
     337              : std::unique_ptr<IPlayerTask>
     338            1 : GenericPlayerTaskFactory::createSetImmediateOutput(GenericPlayerContext &context, IGstGenericPlayerPrivate &player,
     339              :                                                    const firebolt::rialto::MediaSourceType &type,
     340              :                                                    bool immediateOutput) const
     341              : {
     342            1 :     return std::make_unique<tasks::generic::SetImmediateOutput>(context, player, type, immediateOutput);
     343              : }
     344              : 
     345            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createSetBufferingLimit(GenericPlayerContext &context,
     346              :                                                                                IGstGenericPlayerPrivate &player,
     347              :                                                                                std::uint32_t limit) const
     348              : {
     349            1 :     return std::make_unique<tasks::generic::SetBufferingLimit>(context, player, limit);
     350              : }
     351              : 
     352            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createSetUseBuffering(GenericPlayerContext &context,
     353              :                                                                              IGstGenericPlayerPrivate &player,
     354              :                                                                              bool useBuffering) const
     355              : {
     356            1 :     return std::make_unique<tasks::generic::SetUseBuffering>(context, player, useBuffering);
     357              : }
     358              : 
     359              : std::unique_ptr<IPlayerTask>
     360            1 : GenericPlayerTaskFactory::createSwitchSource(IGstGenericPlayerPrivate &player,
     361              :                                              const std::unique_ptr<IMediaPipeline::MediaSource> &source) const
     362              : {
     363            1 :     return std::make_unique<tasks::generic::SwitchSource>(player, source);
     364              : }
     365              : 
     366            1 : std::unique_ptr<IPlayerTask> GenericPlayerTaskFactory::createSynchroniseSubtitleClock(GenericPlayerContext &context,
     367              :                                                                                       IGstGenericPlayerPrivate &player) const
     368              : {
     369            1 :     return std::make_unique<tasks::generic::SynchroniseSubtitleClock>(context, player, m_gstWrapper, m_glibWrapper);
     370              : }
     371              : } // namespace firebolt::rialto::server
        

Generated by: LCOV version 2.0-1