12 #include "DVDMessageQueue.h"    15 #include "IVideoPlayer.h"    16 #include "VideoPlayerAudioID3.h"    17 #include "VideoPlayerRadioRDS.h"    18 #include "VideoPlayerSubtitle.h"    19 #include "VideoPlayerTeletext.h"    20 #include "cores/IPlayer.h"    21 #include "cores/MenuType.h"    22 #include "cores/VideoPlayer/Interface/TimingConstants.h"    23 #include "cores/VideoPlayer/VideoRenderers/RenderManager.h"    24 #include "guilib/DispResource.h"    25 #include "threads/SystemClock.h"    26 #include "threads/Thread.h"    31 #include <unordered_map>    46     dts = DVD_NOPTS_VALUE;
    49     menuType = MenuType::NONE;
    73   std::string player_state; 
    79   std::vector<std::pair<std::string, int64_t>> chapters; 
   101 #define DVDSTATE_NORMAL           0x00000001 // normal dvd state   102 #define DVDSTATE_STILL            0x00000002 // currently displaying a still frame   103 #define DVDSTATE_WAIT             0x00000003 // waiting for demuxer read error   104 #define DVDSTATE_SEEK             0x00000004 // we are finishing a seek request   119   unsigned int packets;
   120   IDVDStreamPlayer::ESyncState syncState;
   124   const StreamType type;
   149     source = STREAM_SOURCE_NONE;
   150     dts = DVD_NOPTS_VALUE;
   151     dur = DVD_NOPTS_VALUE;
   157     syncState = IDVDStreamPlayer::SYNC_STARTING;
   158     starttime = DVD_NOPTS_VALUE;
   159     startpts = DVD_NOPTS_VALUE;
   160     lastdts = DVD_NOPTS_VALUE;
   161     avsync = AV_SYNC_FORCE;
   166     if(dts == DVD_NOPTS_VALUE)
   167       return DVD_NOPTS_VALUE;
   168     if(dur == DVD_NOPTS_VALUE)
   179   StreamType type = STREAM_NONE;
   181   std::string filename;
   182   std::string filename2;  
   183   std::string language;
   185   StreamFlags flags = StreamFlags::FLAG_NONE;
   188   int64_t demuxerId = -1;
   197   std::string stereo_mode;
   198   float aspect_ratio = 0.0f;
   199   StreamHdrType hdrType = StreamHdrType::HDR_TYPE_NONE;
   207   int TypeIndexOf(StreamType type, 
int source, int64_t demuxerId, 
int id) 
const;
   208   int CountTypeOfSource(StreamType type, StreamSource source) 
const;
   209   int CountType(StreamType type) 
const;
   213   void Clear(StreamType type, StreamSource source);
   214   int Source(StreamSource source, 
const std::string& filename);
   216   void Update(
const std::shared_ptr<CDVDInputStream>& input, 
CDVDDemux* demuxer);
   217   void Update(
const std::shared_ptr<CDVDInputStream>& input,
   219               const std::string& filename2);
   221   std::vector<SelectionStream> Get(StreamType type);
   222   template<
typename Compare> std::vector<SelectionStream> Get(StreamType type, Compare compare)
   224     std::vector<SelectionStream> streams = Get(type);
   225     std::stable_sort(streams.begin(), streams.end(), compare);
   229   std::vector<SelectionStream> m_Streams;
   257   bool CloseFile(
bool reopen = 
false) 
override;
   258   bool IsPlaying() 
const override;
   259   void Pause() 
override;
   260   bool HasVideo() 
const override;
   261   bool HasAudio() 
const override;
   262   bool HasRDS() 
const override;
   263   bool HasID3() 
const override;
   264   bool IsPassthrough() 
const override;
   265   bool CanSeek() 
const override;
   266   void Seek(
bool bPlus, 
bool bLargeStep, 
bool bChapterOverride) 
override;
   267   bool SeekScene(
bool bPlus = 
true) 
override;
   268   void SeekPercentage(
float iPercent) 
override;
   269   float GetCachePercentage() 
const override;
   271   void SetDynamicRangeCompression(
long drc) 
override;
   272   bool CanPause() 
const override;
   273   void SetAVDelay(
float fValue = 0.0f) 
override;
   274   float GetAVDelay() 
override;
   275   bool IsInMenu() 
const override;
   281   MenuType GetSupportedMenuType() 
const override;
   283   void SetSubTitleDelay(
float fValue = 0.0f) 
override;
   284   float GetSubTitleDelay() 
override;
   285   int GetSubtitleCount() 
const override;
   286   int GetSubtitle() 
override;
   288   void SetSubtitle(
int iStream) 
override;
   289   bool GetSubtitleVisible() 
const override;
   290   void SetSubtitleVisible(
bool bVisible) 
override;
   298   void SetSubtitleVerticalPosition(
const int value, 
bool save) 
override;
   300   void AddSubtitle(
const std::string& strSubPath) 
override;
   302   int GetAudioStreamCount() 
const override;
   303   int GetAudioStream() 
override;
   304   void SetAudioStream(
int iStream) 
override;
   306   int GetVideoStream() 
const override;
   307   int GetVideoStreamCount() 
const override;
   308   void GetVideoStreamInfo(
int streamId, 
VideoStreamInfo& info) 
const override;
   309   void SetVideoStream(
int iStream) 
override;
   311   int GetPrograms(std::vector<ProgramInfo>& programs) 
override;
   312   void SetProgram(
int progId) 
override;
   313   int GetProgramsCount() 
const override;
   315   std::shared_ptr<TextCacheStruct_t> GetTeletextCache() 
override;
   316   bool HasTeletextCache() 
const override;
   317   void LoadPage(
int p, 
int sp, 
unsigned char* buffer) 
override;
   319   int GetChapterCount() 
const override;
   320   int GetChapter() 
const override;
   321   void GetChapterName(std::string& strChapterName, 
int chapterIdx = -1) 
const override;
   322   int64_t GetChapterPos(
int chapterIdx = -1) 
const override;
   323   int  SeekChapter(
int iChapter) 
override;
   325   void SeekTime(int64_t iTime) 
override;
   326   bool SeekTimeRelative(int64_t iTime) 
override;
   327   void SetSpeed(
float speed) 
override;
   328   void SetTempo(
float tempo) 
override;
   329   bool SupportsTempo() 
const override;
   330   void FrameAdvance(
int frames) 
override;
   331   bool OnAction(
const CAction &action) 
override;
   333   void GetAudioStreamInfo(
int index, 
AudioStreamInfo& info) 
const override;
   335   std::string GetPlayerState() 
override;
   336   bool SetPlayerState(
const std::string& state) 
override;
   338   void FrameMove() 
override;
   339   void Render(
bool clear, uint32_t alpha = 255, 
bool gui = 
true) 
override;
   340   void FlushRenderer() 
override;
   341   void SetRenderViewMode(
int mode, 
float zoom, 
float par, 
float shift, 
bool stretch) 
override;
   342   float GetRenderAspectRatio() 
const override;
   344   unsigned int GetOrientation() 
const override;
   345   void TriggerUpdateResolution() 
override;
   346   bool IsRenderingVideo() 
const override;
   347   bool Supports(EINTERLACEMETHOD method) 
const override;
   348   EINTERLACEMETHOD GetDeinterlacingMethodDefault() 
const override;
   349   bool Supports(ESCALINGMETHOD method) 
const override;
   350   bool Supports(ERENDERFEATURE feature) 
const override;
   352   unsigned int RenderCaptureAlloc() 
override;
   353   void RenderCapture(
unsigned int captureId, 
unsigned int width, 
unsigned int height, 
int flags) 
override;
   354   void RenderCaptureRelease(
unsigned int captureId) 
override;
   355   bool RenderCaptureGetPixels(
unsigned int captureId, 
unsigned int millis, uint8_t *buffer, 
unsigned int size) 
override;
   358   void OnLostDisplay() 
override;
   359   void OnResetDisplay() 
override;
   361   bool IsCaching() 
const override;
   362   int GetCacheLevel() 
const override;
   364   int OnDiscNavResult(
void* pData, 
int iMessage) 
override;
   365   void GetVideoResolution(
unsigned int &width, 
unsigned int &height) 
override;
   370   void SetUpdateStreamDetails();
   375   void OnStartup() 
override;
   376   void OnExit() 
override;
   377   void Process() 
override;
   378   void VideoParamsChange() 
override;
   379   void GetDebugInfo(std::string &audio, std::string &video, std::string &general) 
override;
   380   void UpdateClockSync(
bool enabled) 
override;
   382   void UpdateRenderBuffers(
int queued, 
int discard, 
int free) 
override;
   383   void UpdateGuiRender(
bool gui) 
override;
   384   void UpdateVideoRender(
bool video) 
override;
   386   void CreatePlayers();
   387   void DestroyPlayers();
   390   bool OpenStream(
CCurrentStream& current, int64_t demuxerId, 
int iStream, 
int source, 
bool reset = 
true);
   401   void AdaptForcedSubtitles();
   413   int  AddSubtitleFile(
const std::string& filename, 
const std::string& subfilename = 
"");
   422   void SetSubtitleVisibleInternal(
bool bVisible);
   427   void SetPlaySpeed(
int iSpeed);
   438   void SetCaching(ECacheState state);
   440   double GetQueueTime();
   443   void FlushBuffers(
double pts, 
bool accurate, 
bool sync);
   445   void HandleMessages();
   446   void HandlePlaySpeed();
   447   bool IsInMenuInternal() 
const;
   448   void SynchronizeDemuxer();
   449   void CheckAutoSceneSkip();
   453   void UpdateCorrection(
DemuxPacket* pkt, 
double correction);
   456   void SendPlayerMessage(std::shared_ptr<CDVDMsg> pMsg, 
unsigned int target);
   464   bool OpenInputStream();
   465   bool OpenDemuxStream();
   467   void OpenDefaultStreams(
bool reset = 
true);
   469   void UpdatePlayState(
double timeout);
   470   void GetGeneralInfo(std::string& strVideoInfo);
   471   int64_t GetUpdatedTime();
   473   float GetPercentage();
   475   void UpdateContent();
   476   void UpdateContentState();
   478   void UpdateFileItemStreamDetails(
CFileItem& item);
   479   int GetPreviousChapter();
   481   bool m_players_created;
   485   bool m_bAbortRequest;
   487   bool m_bCloseRequest;
   489   ECacheState  m_caching;
   492   std::unique_ptr<CProcessInfo> m_processInfo;
   502   std::vector<ProgramInfo> m_programs;
   506     mutable CCriticalSection m_section;
   508     std::vector<ProgramInfo> m_programs;
   509     int m_videoIndex{-1};
   510     int m_audioIndex{-1};
   511     int m_subtitleIndex{-1};
   515   int m_streamPlayerSpeed;
   516   int m_demuxerSpeed = DVD_PLAYSPEED_NORMAL;
   521     double lastseekpts{0.0};
   522     double lastabstime{0.0};
   524     void Reset(
double pts)
   527       if (pts != DVD_NOPTS_VALUE)
   537   std::unique_ptr<CJobQueue> m_outboundEvents;
   544   std::unique_ptr<CVideoPlayerAudioID3> m_VideoPlayerAudioID3;
   549   std::shared_ptr<CDVDInputStream> m_pInputStream;
   550   std::unique_ptr<CDVDDemux> m_pDemuxer;
   551   std::shared_ptr<CDVDDemux> m_pSubtitleDemuxer;
   552   std::unordered_map<int64_t, std::shared_ptr<CDVDDemux>> m_subtitleDemuxerMap;
   553   std::unique_ptr<CDVDDemuxCC> m_pCCDemuxer;
   561       state                =  DVDSTATE_NORMAL;
   562       iSelectedSPUStream   = -1;
   563       iSelectedAudioStream = -1;
   564       iSelectedVideoStream = -1;
   565       iDVDStillTime = std::chrono::milliseconds::zero();
   566       iDVDStillStartTime = {};
   572     std::chrono::milliseconds
   574     std::chrono::time_point<std::chrono::steady_clock>
   576     int iSelectedSPUStream;   
   577     int iSelectedAudioStream; 
   578     int iSelectedVideoStream; 
   582   mutable CCriticalSection m_StateSection;
   586   bool m_SkipCommercials;
   591   bool m_UpdateStreamDetails;
   593   std::atomic<bool> m_displayLost;
 
Definition: IVideoPlayer.h:28
Definition: DVDDemux.h:221
Definition: StreamInfo.h:65
Definition: DVDStreamInfo.h:25
Definition: IVideoPlayer.h:36
Definition: VideoPlayer.h:557
Definition: VideoPlayer.h:35
Definition: DispResource.h:26
Definition: VideoPlayer.h:250
Definition: RenderInfo.h:19
Definition: VideoPlayerRadioRDS.h:36
Definition: VideoPlayer.h:504
Definition: DVDMessageQueue.h:48
Definition: VideoPlayerSubtitle.h:24
Definition: IVideoPlayer.h:75
Definition: VideoPlayer.h:106
Definition: SystemClock.h:31
Definition: StreamInfo.h:55
Definition: DVDDemux.h:157
Definition: VideoPlayer.h:177
Definition: VideoPlayer.h:517
Definition: DVDDemux.h:124
Definition: StreamInfo.h:62
Definition: VideoPlayerTeletext.h:18
Class encapsulating information regarding a particular user action to be sent to windows and controls...
Definition: Action.h:21
Definition: DispResource.h:14
Definition: RenderManager.h:54
Definition: DVDDemuxCC.h:19
Definition: VideoPlayer.h:202
Definition: ProcessInfo.h:26
Definition: IPlayerCallback.h:18
Definition: settings.py:1
Definition: DVDClock.h:18
Definition: VideoPlayer.h:239
Definition: DVDDemux.h:72
Definition: DemuxPacket.h:22
Definition: DVDOverlayContainer.h:19
Definition: VideoSettings.h:194
Definition: IVideoPlayer.h:102
Definition: RenderManager.h:38
Represents a file on a share. 
Definition: FileItem.h:102
Job Queue class to handle a queue of unique jobs to be processed sequentially. 
Definition: JobManager.h:63