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;
343 void TriggerUpdateResolution()
override;
344 bool IsRenderingVideo()
const override;
345 bool Supports(EINTERLACEMETHOD method)
const override;
346 EINTERLACEMETHOD GetDeinterlacingMethodDefault()
const override;
347 bool Supports(ESCALINGMETHOD method)
const override;
348 bool Supports(ERENDERFEATURE feature)
const override;
350 unsigned int RenderCaptureAlloc()
override;
351 void RenderCapture(
unsigned int captureId,
unsigned int width,
unsigned int height,
int flags)
override;
352 void RenderCaptureRelease(
unsigned int captureId)
override;
353 bool RenderCaptureGetPixels(
unsigned int captureId,
unsigned int millis, uint8_t *buffer,
unsigned int size)
override;
356 void OnLostDisplay()
override;
357 void OnResetDisplay()
override;
359 bool IsCaching()
const override;
360 int GetCacheLevel()
const override;
362 int OnDiscNavResult(
void* pData,
int iMessage)
override;
363 void GetVideoResolution(
unsigned int &width,
unsigned int &height)
override;
368 void SetUpdateStreamDetails();
373 void OnStartup()
override;
374 void OnExit()
override;
375 void Process()
override;
376 void VideoParamsChange()
override;
377 void GetDebugInfo(std::string &audio, std::string &video, std::string &general)
override;
378 void UpdateClockSync(
bool enabled)
override;
380 void UpdateRenderBuffers(
int queued,
int discard,
int free)
override;
381 void UpdateGuiRender(
bool gui)
override;
382 void UpdateVideoRender(
bool video)
override;
384 void CreatePlayers();
385 void DestroyPlayers();
388 bool OpenStream(
CCurrentStream& current, int64_t demuxerId,
int iStream,
int source,
bool reset =
true);
399 void AdaptForcedSubtitles();
411 int AddSubtitleFile(
const std::string& filename,
const std::string& subfilename =
"");
420 void SetSubtitleVisibleInternal(
bool bVisible);
425 void SetPlaySpeed(
int iSpeed);
436 void SetCaching(ECacheState state);
438 double GetQueueTime();
441 void FlushBuffers(
double pts,
bool accurate,
bool sync);
443 void HandleMessages();
444 void HandlePlaySpeed();
445 bool IsInMenuInternal()
const;
446 void SynchronizeDemuxer();
447 void CheckAutoSceneSkip();
451 void UpdateCorrection(
DemuxPacket* pkt,
double correction);
454 void SendPlayerMessage(std::shared_ptr<CDVDMsg> pMsg,
unsigned int target);
462 bool OpenInputStream();
463 bool OpenDemuxStream();
465 void OpenDefaultStreams(
bool reset =
true);
467 void UpdatePlayState(
double timeout);
468 void GetGeneralInfo(std::string& strVideoInfo);
469 int64_t GetUpdatedTime();
471 float GetPercentage();
473 void UpdateContent();
474 void UpdateContentState();
476 void UpdateFileItemStreamDetails(
CFileItem& item);
477 int GetPreviousChapter();
479 bool m_players_created;
483 bool m_bAbortRequest;
485 bool m_bCloseRequest;
487 ECacheState m_caching;
490 std::unique_ptr<CProcessInfo> m_processInfo;
500 std::vector<ProgramInfo> m_programs;
504 mutable CCriticalSection m_section;
506 std::vector<ProgramInfo> m_programs;
507 int m_videoIndex{-1};
508 int m_audioIndex{-1};
509 int m_subtitleIndex{-1};
513 int m_streamPlayerSpeed;
514 int m_demuxerSpeed = DVD_PLAYSPEED_NORMAL;
519 double lastseekpts{0.0};
520 double lastabstime{0.0};
522 void Reset(
double pts)
525 if (pts != DVD_NOPTS_VALUE)
535 std::unique_ptr<CJobQueue> m_outboundEvents;
542 std::unique_ptr<CVideoPlayerAudioID3> m_VideoPlayerAudioID3;
547 std::shared_ptr<CDVDInputStream> m_pInputStream;
548 std::unique_ptr<CDVDDemux> m_pDemuxer;
549 std::shared_ptr<CDVDDemux> m_pSubtitleDemuxer;
550 std::unordered_map<int64_t, std::shared_ptr<CDVDDemux>> m_subtitleDemuxerMap;
551 std::unique_ptr<CDVDDemuxCC> m_pCCDemuxer;
559 state = DVDSTATE_NORMAL;
560 iSelectedSPUStream = -1;
561 iSelectedAudioStream = -1;
562 iSelectedVideoStream = -1;
563 iDVDStillTime = std::chrono::milliseconds::zero();
564 iDVDStillStartTime = {};
570 std::chrono::milliseconds
572 std::chrono::time_point<std::chrono::steady_clock>
574 int iSelectedSPUStream;
575 int iSelectedAudioStream;
576 int iSelectedVideoStream;
580 mutable CCriticalSection m_StateSection;
584 bool m_SkipCommercials;
589 bool m_UpdateStreamDetails;
591 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:555
Definition: VideoPlayer.h:35
Definition: DispResource.h:26
Definition: VideoPlayer.h:250
Definition: RenderInfo.h:19
Definition: VideoPlayerRadioRDS.h:36
Definition: VideoPlayer.h:502
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:515
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