[videodb] remove unused seasons table from episode_view
[xbmc.git] / xbmc / cores / VideoPlayer / VideoPlayerVideo.h
blob298b132659cb601fe8bfe1f3234cc33d0cd57e92
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #pragma once
11 #include "DVDClock.h"
12 #include "DVDCodecs/Video/DVDVideoCodec.h"
13 #include "DVDMessageQueue.h"
14 #include "DVDOverlayContainer.h"
15 #include "DVDStreamInfo.h"
16 #include "IVideoPlayer.h"
17 #include "PTSTracker.h"
18 #include "cores/VideoPlayer/VideoRenderers/RenderManager.h"
19 #include "threads/Thread.h"
20 #include "utils/BitstreamStats.h"
22 #include <atomic>
24 #define DROP_DROPPED 1
25 #define DROP_VERYLATE 2
26 #define DROP_BUFFER_LEVEL 4
28 class CDemuxStreamVideo;
30 class CDroppingStats
32 public:
33 void Reset();
34 void AddOutputDropGain(double pts, int frames);
35 struct CGain
37 int frames;
38 double pts;
40 std::deque<CGain> m_gain;
41 int m_totalGain;
42 double m_lastPts;
45 class CVideoPlayerVideo : public CThread, public IDVDStreamPlayerVideo
47 public:
48 CVideoPlayerVideo(CDVDClock* pClock,
49 CDVDOverlayContainer* pOverlayContainer,
50 CDVDMessageQueue& parent,
51 CRenderManager& renderManager,
52 CProcessInfo& processInfo,
53 double messageQueueTimeSize);
54 ~CVideoPlayerVideo() override;
56 bool OpenStream(CDVDStreamInfo hint) override;
57 void CloseStream(bool bWaitForBuffers) override;
58 void Flush(bool sync) override;
59 bool AcceptsData() const override;
60 bool HasData() const override;
61 bool IsInited() const override;
62 void SendMessage(std::shared_ptr<CDVDMsg> pMsg, int priority = 0) override;
63 void FlushMessages() override;
65 void EnableSubtitle(bool bEnable) override { m_bRenderSubs = bEnable; }
66 bool IsSubtitleEnabled() override { return m_bRenderSubs; }
67 double GetSubtitleDelay() override { return m_iSubtitleDelay; }
68 void SetSubtitleDelay(double delay) override { m_iSubtitleDelay = delay; }
69 bool IsStalled() const override { return m_stalled; }
70 bool IsRewindStalled() const override { return m_rewindStalled; }
71 double GetCurrentPts() override;
72 double GetOutputDelay() override; /* returns the expected delay, from that a packet is put in queue */
73 std::string GetPlayerInfo() override;
74 int GetVideoBitrate() override;
75 void SetSpeed(int iSpeed) override;
77 // classes
78 CDVDOverlayContainer* m_pOverlayContainer;
79 CDVDClock* m_pClock;
81 protected:
83 enum EOutputState
85 OUTPUT_NORMAL,
86 OUTPUT_ABORT,
87 OUTPUT_DROPPED,
88 OUTPUT_AGAIN
91 void OnExit() override;
92 void Process() override;
94 bool ProcessDecoderOutput(double &frametime, double &pts);
95 void SendMessageBack(const std::shared_ptr<CDVDMsg>& pMsg, int priority = 0);
96 MsgQueueReturnCode GetMessage(std::shared_ptr<CDVDMsg>& pMsg,
97 std::chrono::milliseconds timeout,
98 int& priority);
100 EOutputState OutputPicture(const VideoPicture* src);
101 void ProcessOverlays(const VideoPicture* pSource, double pts);
102 void OpenStream(CDVDStreamInfo& hint, std::unique_ptr<CDVDVideoCodec> codec);
104 void ResetFrameRateCalc();
105 void CalcFrameRate();
106 int CalcDropRequirement(double pts);
108 double m_iSubtitleDelay;
110 int m_iLateFrames;
111 int m_iDroppedFrames;
112 int m_iDroppedRequest;
114 double m_fFrameRate; //framerate of the video currently playing
115 double m_fStableFrameRate; //place to store calculated framerates
116 int m_iFrameRateCount; //how many calculated framerates we stored in m_fStableFrameRate
117 bool m_bAllowDrop; //we can't drop frames until we've calculated the framerate
118 int m_iFrameRateErr; //how many frames we couldn't calculate the framerate, we give up after a while
119 int m_iFrameRateLength; //how many seconds we should measure the framerate
120 //this is increased exponentially from CVideoPlayerVideo::CalcFrameRate()
122 bool m_bFpsInvalid; // needed to ignore fps (e.g. dvd stills)
123 bool m_bRenderSubs;
124 float m_fForcedAspectRatio;
125 int m_speed;
126 std::atomic_bool m_stalled = false;
127 std::atomic_bool m_rewindStalled;
128 bool m_paused;
129 IDVDStreamPlayer::ESyncState m_syncState;
130 std::atomic_bool m_bAbortOutput;
132 BitstreamStats m_videoStats;
134 CDVDMessageQueue m_messageQueue;
135 CDVDMessageQueue& m_messageParent;
136 CDVDStreamInfo m_hints;
137 std::unique_ptr<CDVDVideoCodec> m_pVideoCodec;
138 CPtsTracker m_ptsTracker;
139 std::list<DVDMessageListItem> m_packets;
140 CDroppingStats m_droppingStats;
141 CRenderManager& m_renderManager;
142 VideoPicture m_picture;
144 EOutputState m_outputSate{OUTPUT_NORMAL};