13#ifndef __DRMDEVICE_OUTPUT_DEVICE_H
14#define __DRMDEVICE_OUTPUT_DEVICE_H
21#include <libavcodec/avcodec.h>
24#include <vdr/device.h>
26#include <vdr/status.h>
27#include <vdr/thread.h>
103 virtual void GetOsdSize(
int &,
int &,
double &);
119 virtual void Clear(
void);
120 virtual void Play(
void);
121 virtual void Freeze(
void);
124 virtual bool Flush(
int = 0);
125#if APIVERSNUM >= 30014
134 virtual void Replaying(
const cControl *,
const char *,
const char *,
bool);
int ConfigVideoAudioDelayMs
config audio delay
Output Device Implementation.
bool m_externalPlayerActive
true, if we detached for an external player
std::mutex m_sizeMutex
mutex to lock screen size (which is accessed by different threads)
virtual void TrickSpeed(int, bool)
Sets the device into a mode where replay is done slower.
cVideoRender * m_pRender
pointer to cVideoRender object
virtual bool CanReplay(void) const
Return true if this device can currently start a replay session.
cAudioDecoder * m_pAudioDecoder
pointer to cAudioDecoder object
bool m_initialized
true, if the plugin had a successful Initialize()
std::unique_ptr< cStateMachine > m_pStateMachine
void HandleStillPicture(const uchar *data, int size)
The still picture data received from VDR can contain multiple PES packets.
bool CheckAudioPlaybackStartConditions(void)
Returns true, if audio playback should start without respect to a/v-sync.
int m_audioChannelID
current audio channel ID
void SetVideoCodec(enum AVCodecID, AVCodecParameters *, AVRational)
Open a video codec.
void HandleDisplayModeChange(const sDrmMode &)
Set the display mode.
int MaxSizeGPUImageCache(void)
Get the maximum GPU image cache size.
void SetRenderPipActive(bool)
void SetPassthroughMask(int)
Set the passthrough mask (called from setup menu or conf)
int PlayPipVideo(const uchar *, int)
Play a video packet of the pip videostream.
virtual int PlayAudio(const uchar *, int, uchar)
Play an audio packet.
void EnterState(State)
Actions to be performed when entering a state.
void LeaveState(State)
Actions to be performed when leaving a state.
std::atomic< ChannelSwitchMode > m_channelSwitchMode
current channel switch mode
int PlayVideoPkts(AVPacket *)
Play a video packet.
void ResumeVideoThreads(void)
Resume the rendering and decoder thread.
void TriggerEvent(const Event &)
With this wrapper function, the device can directly act as an event reveiver.
bool HaltOpenGlThread(void)
Pause the OpenGL worker thread.
cAudioStream * Audio(void)
void SetEnableHdr(bool)
Enable HDR display mode.
int OglOsdIsDisabled(void)
Is the OpenGL/ES osd disabled?
void SetDrmCanDisplayPip(bool canDisplay)
std::atomic< bool > m_receivedAudio
flag if audio packets have been received
std::atomic< bool > m_draining
true, if the device is in draining mode (waiting for empty buffers)
virtual cSpuDecoder * GetSpuDecoder(void)
Get the device SPU decoder.
void PipChannelChange(int)
int64_t GetFirstAudioPtsMsToPlay()
Calculate the first audio PTS that should be played during synchronized playback.
cDvbSpuDecoder * m_pSpuDecoder
pointer to spu decoder
void Detach(void)
Detach the device.
void SetDecoderFallbackToSw(bool)
Force the decoder to fallback to software if the hardware decoder fails after the configured amount o...
virtual bool Flush(int=0)
Return true, if the output buffers are empty, false otherwise.
std::atomic< PlaybackMode > m_playbackMode
current playback mode
void FlushAudio(void)
Clear all audio data from the decoder and ringbuffer.
bool m_drmCanDisplayPip
true, if the drm device is able to display a pip video
virtual bool HasDecoder(void) const
Tells whether this device has an MPEG decoder.
int GetBufferFillLevelThresholdMs()
Returns the buffer fill level threshold in milliseconds.
bool m_needsMakePrimary
true, if device should be made a primary device after attach
virtual uchar * GrabImage(int &, bool, int, int, int)
Grabs the currently visible screen image.
void Stop(void)
Called by VDR when the plugin is stopped.
void ResetChannelId(void)
Reset the channel ID (restarts audio)
cDeviceConfig * m_pConfig
pointer to cDeviceConfig object
void SetOsdSize(int, int)
Set the OSD size.
void SetChannelSwitchMode(ChannelSwitchMode mode)
virtual ~cOutputDevice(void)
Destroy the device.
void ToggleRenderPipPosition(void)
void SetEnableOglOsd(void)
Enables OpenGL/ES Osd.
virtual void SetVideoDisplayFormat(eVideoDisplayFormat)
Sets the video display format.
void Attach(void)
Attach the device again.
bool Initialize(void)
Initialize the device.
void OsdDraw(int, int, int, int, int, const uint8_t *, int, int)
Draw an OSD pixmap.
void ResetVideoFilter(void)
Reset the video deinterlace filter.
virtual void Freeze(void)
Puts the device into "freeze frame" mode.
cAudioStream * m_pAudio
pointer to cAudioStream object
cGrabber * m_pGrab
pointer to grabber object
bool CheckPlaybackStartConditions(void)
Check, if all conditions are met to start the playback.
void ResumePlayback(void)
Resume playback again.
cHardwareDevice * m_pHardwareDevice
pointer to hardware device description
int GetMinBufferFillLevelThresholdMs(void)
bool IsVideoOnlyPlayback(void)
virtual void Play(void)
Sets the device into play mode (after a previous trick mode, or pause)
cEventHandler * m_pEventHandler
event handler thread
void PipChannelSwap(bool)
bool IsAudioOnlyPlayback(void)
virtual void ScaleVideo(const cRect &=cRect::Null)
Scale the currently shown video.
int64_t GetFirstVideoPtsMsToPlay()
int PlayVideoInternal(cVideoStream *, cReassemblyBufferVideo *, const uchar *, int, bool, bool)
Play a video packet.
void SetDetachForced(void)
bool FastChannelSwitchInTransferMode(void)
void SetRenderPipSize(void)
void SetDisplayMode(int)
Trigger a display mode change event if the mode changed.
std::mutex m_eventMutex
mutex to protect event queue
cReassemblyBufferAudio m_audioReassemblyBuffer
audio pes reassembly buffer
cJitterTracker m_videoJitterTracker
video jitter tracker
bool m_forceDetached
start the plugin in detached state
bool PipIsEnabled(void)
Returns true, if pip is currently enabled.
bool IsDetached(void) const
Returns true, if the device is detached.
void SetDisableDeint(void)
Disables deinterlacer (called from setup menu or conf)
void SetDrain(bool)
Set and log the drain state changes.
virtual void Replaying(const cControl *, const char *, const char *, bool)
Monitor a replay start or end.
static constexpr int MIN_BUFFER_FILL_LEVEL_THRESHOLD_MS
min buffering threshold in ms
cVideoStream * m_pPipStream
pointer to pip video stream
virtual void Clear(void)
Clears all video and audio data from the device.
bool IsOsdProviderSet(void) const
bool m_disablePip
true, if pip was disabled by the user
int GetVideoAudioDelayMs(void)
cPipHandler * m_pPipHandler
pointer to pip handler
virtual bool SetPlayMode(ePlayMode)
Sets the device into the given play mode.
void SetAudioCodec(enum AVCodecID, AVCodecParameters *, AVRational)
Open an audio codec.
void ResetOsdProvider(void)
std::atomic< bool > m_receivedValidVideo
flag if valid video packets have been received
void HaltVideoThreads(void)
Pause the rendering and decoder thread.
bool IsDetachForced(void)
Returns true, the a detached plugin start was forced.
std::atomic< bool > m_receivedVideo
flag if video packets have been received
cReassemblyBufferVideo m_pipReassemblyBuffer
pip pes reassembly buffer
cReassemblyBufferVideo m_videoReassemblyBuffer
video pes reassembly buffer
cJitterTracker m_audioJitterTracker
audio jitter tracker
void OsdClose(void)
Close the OSD.
void ResetPipStream(void)
Resets pip stream and render pipeline.
virtual void SetVideoFormat(bool)
Set the video format.
void SetTrickSpeed(double, bool, bool)
Set the trickspeed in the renderer.
virtual void GetVideoSize(int &, int &, double &)
Get the video size.
virtual int64_t GetSTC(void)
Gets the current System Time Counter, which can be used to synchronize audio, video and subtitles.
void GetStats(int *, int *, int *)
Get statistics from the renderer.
void SetScreenSize(int, int)
Set the screen size.
bool m_pipUseAlt
use alternative pip position
void SetDisableOglOsd(void)
Disables OpenGL/ES Osd (called from setup menu or conf)
int InitAudio(bool)
Init the audio lazily.
virtual void SetVolumeDevice(int)
Sets the audio volume on this device (Volume = 0...255).
virtual void MakePrimaryDevice(bool)
Informs a device that it will be the primary device.
void SetStartDetached(void)
void ResumeOpenGlThread(void)
Resume the OpenGL worker thread.
cVideoStream * VideoStream(void)
void PausePlayback(bool)
Pause the playback.
virtual int PlayVideo(const uchar *, int)
Play a video packet of the main videostream.
std::atomic< bool > m_receivedValidAudio
flag if valid audio packets have been received
bool FastChannelSwitchAudioInTransferMode(void)
int PlayAudioPkts(AVPacket *)
Play an audio packet.
cDeviceConfig * Config(void)
void ScheduleResyncAtPtsMs(int64_t)
Schedule aa a/v resync in the render thread at the given pts.
cDeviceOsdProvider * m_pOsdProvider
pointer to cDeviceOsdProvider object
virtual cString DeviceName(void) const
virtual bool Poll(cPoller &, int=0)
Return true if the device itself or any of the file handles in poller is ready for further action.
virtual cRect CanScaleVideo(const cRect &, int taCenter)
Ask the output, if it can scale video.
cVideoRender * Render(void)
void PipSwapPosition(void)
bool SchedulePlaybackStart(void)
Schedules the playback start.
void ResumeFromPause(void)
Resume playback from pause state.
int Start(void)
Called by VDR when the plugin is started.
virtual void GetOsdSize(int &, int &, double &)
Returns the width, height and aspect ratio the OSD should have.
virtual void ChannelSwitch(const cDevice *, int, bool)
Monitor a channel switch triggered by VDR (cStatus::ChannelSwitch())
virtual void StillPicture(const uchar *, int)
Display the given I-frame as a still picture.
cVideoStream * m_pVideoStream
pointer to main video stream
int m_volume
track the volume in the device (for attach)
Audio Stream Reassembly Buffer.
Video Stream Reassembly Buffer.
State Machine Implementation.
Plugin Configuration Header File.
std::variant< PlayEvent, PauseEvent, StopEvent, TrickSpeedEvent, StillPictureEvent, DetachEvent, AttachEvent, BufferUnderrunEvent, BufferingThresholdReachedEvent, ScheduleResyncAtPtsMsEvent, ResyncEvent, DisplayChangeEvent > Event
ChannelSwitchMode
Channel switch modes.
@ CHANNEL_SWITCH_FAST_AUDIO
Describes a hardware device.
Jitter Tracking of Incoming Packets Header File.
PES Packet Parser Header File.
Device State Machine and Event Handler Header File.
Holds possible display configurations.