|
vdr-plugin-softhddevice-drm-gles 1.6.2
|
Video Input Stream. More...
#include <videostream.h>
Protected Member Functions | |
| cVideoStream (cVideoRender *, cQueue< cDrmBuffer > *, cSoftHdConfig *, bool, std::function< void(AVFrame *)>) | |
| Create a video stream. | |
| virtual void | Action (void) |
| Decoding thread loop, which periodically tries to decode input. | |
Private Member Functions | |
| void | RenderFrame (AVFrame *) |
| Render a frame. | |
| void | CheckForcingFrameDecode (void) |
| Check, if we need to force the decoder to decode the frame (force a decoder drain) | |
| void | OpenDecoder (void) |
| Open the decoder including an H.264 parsing if needed. | |
| bool | ParseH264Packet (AVPacket *) |
| Parse an H.264 packet. | |
Private Attributes | |
| cSoftHdConfig * | m_pConfig |
| plugin config | |
| cVideoDecoder * | m_pDecoder |
| video decoder | |
| cVideoRender * | m_pRender |
| video renderer | |
| const char * | m_identifier |
| identifier string for logging | |
| std::function< void(AVFrame *)> | m_frameOutput |
| function to output the frame | |
| cQueue< cDrmBuffer > * | m_pDrmBufferQueue |
| pointer to renderer's DRM buffer queue | |
| cVideoFilter | m_videoFilter |
| pointer to deinterlace/scaling video filter thread | |
| std::mutex | m_mutex |
| mutex for decoding thread control | |
| bool | m_checkFilterThreadNeeded |
| set, if we have to check, if filter thread is needed at start of playback | |
| int | m_hardwareQuirks |
| hardware specific quirks | |
| bool | m_userDisabledDeinterlacer = false |
| set, if the user configured the deinterlace to be disabled | |
| bool | m_deinterlacerDeactivated |
| set, if the deinterlacer should be disabled temporarily (trickspeed, stillpicture, pip) | |
| bool | m_startDecodingWithIFrame = false |
| wait for an I-Frame to start h264 decoding | |
| bool | m_parseH264Dimensions = false |
| parse width and height when starting an h264 stream | |
| int | m_decoderFallbackToSwNumPkts = 22 |
| fallback to sw decoder if hw decoder fails after the given number of packets sent | |
| cQueue< AVPacket > | m_packets {VIDEO_PACKET_MAX} |
| AVPackets queue. | |
| enum AVCodecID | m_codecId = AV_CODEC_ID_NONE |
| current codec id | |
| AVCodecParameters * | m_pPar = nullptr |
| current codec parameters | |
| std::atomic< struct AVRational > | m_timebase |
| current codec timebase | |
| int | m_trickpkts |
| how many avpkt does the decoder need in trickspeed mode? | |
| int | m_sentTrickPkts = 0 |
| how many avpkt have been sent to the decoder in trickspeed mode? | |
| volatile bool | m_newStream = false |
| flag for new stream | |
| bool | m_interlaced |
| flag for interlaced stream | |
| int64_t | m_inputPts = AV_NOPTS_VALUE |
| PTS of the first packet in the input buffer. | |
| std::vector< std::string > | m_naluTypesAtStart |
| array of strings to log the H.264 frames at stream start | |
| int | m_numIFrames = 0 |
| counter for the arriving I-Frames at H.264 stream start | |
| int | m_logPackets = 0 |
| parse and log all frames until the number of given I-Frames arrived | |
| int | m_dropInvalidPackets = 0 |
| drop P-Frames with invalid references until the given number of I-Frames arrived | |
| std::set< int > | m_dpbFrames |
| private set of reference frames (internal short-time decoded picture buffer) | |
| int | m_maxFrameNum = 1 |
| = 1 << Log2MaxFrameNumMinus4 + 4 | |
| int | m_log2MaxFrameNumMinus4 = -4 |
| cache Log2MaxFrameNumMinus4 from a previous SPS parsing | |
| int | m_ppsNumRefIdxL0DefaultActiveMinus1 = -1 |
| cache NumRefIdxL0DefaultActiveMinuns1 from a previous PPS parsing | |
| int | m_ppsNumRefIdxL1DefaultActiveMinus1 = -1 |
| cache NumRefIdxL1DefaultActiveMinuns1 from a previous PPS parsing | |
| bool | m_isResend = false |
| track, if we already tried to send the AVPacket to the decoder if so, skip the parsing | |
Static Private Attributes | |
| static constexpr int | VIDEO_PACKET_MAX = 192 |
| max number of video packets held in the buffer | |
Video Input Stream.
Definition at line 57 of file videostream.h.
|
inline |
Definition at line 78 of file videostream.h.
References m_pDecoder.
Definition at line 98 of file videostream.h.
References m_userDisabledDeinterlacer.
Referenced by cSoftHdDevice::SetDisableDeint().
Definition at line 80 of file videostream.h.
References m_packets, and cQueue< T >::Size().
Referenced by cVideoRender::DisplayFrame(), cSoftHdDevice::Flush(), cVideoRender::LogDroppedDuped(), and cSoftHdDevice::PlayVideoPkts().
Definition at line 82 of file videostream.h.
References m_codecId.
Definition at line 86 of file videostream.h.
References m_inputPts.
Definition at line 89 of file videostream.h.
References VIDEO_PACKET_MAX.
Referenced by cSoftHdDevice::PlayVideoPkts().
Definition at line 74 of file videostream.h.
References m_mutex.
Referenced by cSoftHdDevice::Clear(), cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::ResetPipStream().
Definition at line 97 of file videostream.h.
References m_hardwareQuirks.
Definition at line 84 of file videostream.h.
References AV_NOPTS_VALUE, and m_inputPts.
Referenced by cSoftHdDevice::IsBufferingThresholdReached(), and cSoftHdDevice::OnEventReceived().
Definition at line 96 of file videostream.h.
References m_deinterlacerDeactivated.
Definition at line 81 of file videostream.h.
References m_packets, cQueue< T >::Size(), and VIDEO_PACKET_MAX.
Referenced by cSoftHdDevice::PlayPipVideo(), and cSoftHdDevice::Poll().
Definition at line 62 of file videostream.h.
|
inline |
Definition at line 93 of file videostream.h.
References m_checkFilterThreadNeeded.
Referenced by cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::OnLeavingState().
Definition at line 87 of file videostream.h.
References AV_NOPTS_VALUE, and m_inputPts.
Referenced by cSoftHdDevice::HandleStillPicture().
Definition at line 83 of file videostream.h.
References m_sentTrickPkts.
Referenced by cSoftHdDevice::OnLeavingState().
Definition at line 75 of file videostream.h.
References m_mutex.
Referenced by cSoftHdDevice::Clear(), cSoftHdDevice::OnEnteringState(), cSoftHdDevice::OnEventReceived(), and cSoftHdDevice::ResetPipStream().
Definition at line 101 of file videostream.h.
References m_decoderFallbackToSwNumPkts.
Referenced by cSoftHdDevice::SetDecoderFallbackToSw().
Reimplemented in cPipVideoStream.
Definition at line 95 of file videostream.h.
References m_deinterlacerDeactivated.
Referenced by CancelFilterThread(), cSoftHdDevice::HandleStillPicture(), cSoftHdDevice::OnEnteringState(), and cSoftHdDevice::OnLeavingState().
Definition at line 100 of file videostream.h.
References m_parseH264Dimensions.
Referenced by cSoftHdDevice::SetParseH264Dimensions().
Definition at line 99 of file videostream.h.
References m_startDecodingWithIFrame.
Referenced by cSoftHdDevice::SetDecoderNeedsIFrame().
|
private |
set, if we have to check, if filter thread is needed at start of playback
Definition at line 117 of file videostream.h.
Referenced by CancelFilterThread(), RenderFrame(), and ResetFilterThreadNeededCheck().
|
private |
current codec id
Definition at line 128 of file videostream.h.
Referenced by CloseDecoder(), DecodeInput(), FlushDecoder(), GetCodecId(), Open(), and OpenDecoder().
|
private |
fallback to sw decoder if hw decoder fails after the given number of packets sent
Definition at line 123 of file videostream.h.
Referenced by cVideoStream(), DecodeInput(), and SetDecoderFallbackToSwNumPkts().
|
private |
set, if the deinterlacer should be disabled temporarily (trickspeed, stillpicture, pip)
Definition at line 120 of file videostream.h.
Referenced by IsDeinterlacerDeactivated(), RenderFrame(), and SetDeinterlacerDeactivated().
|
private |
private set of reference frames (internal short-time decoded picture buffer)
Definition at line 143 of file videostream.h.
Referenced by CloseDecoder(), and ParseH264Packet().
|
private |
drop P-Frames with invalid references until the given number of I-Frames arrived
Definition at line 142 of file videostream.h.
Referenced by DecodeInput(), OpenDecoder(), and ParseH264Packet().
function to output the frame
Definition at line 112 of file videostream.h.
Referenced by RenderFrame().
|
private |
hardware specific quirks
Definition at line 118 of file videostream.h.
Referenced by cVideoStream(), FlushDecoder(), HardwareQuirks(), OpenDecoder(), RenderFrame(), and StartDecoder().
identifier string for logging
Definition at line 111 of file videostream.h.
Referenced by ClearVdrCoreToDecoderQueue(), CloseDecoder(), cVideoStream(), DecodeInput(), Exit(), FlushDecoder(), OpenDecoder(), ParseH264Packet(), RenderFrame(), and StartDecoder().
|
private |
PTS of the first packet in the input buffer.
Definition at line 136 of file videostream.h.
Referenced by ClearVdrCoreToDecoderQueue(), GetInputPts(), GetInputPtsMs(), HasInputPts(), PushAvPacket(), and ResetInputPts().
|
private |
flag for interlaced stream
Definition at line 134 of file videostream.h.
Referenced by CheckForcingFrameDecode(), and RenderFrame().
track, if we already tried to send the AVPacket to the decoder if so, skip the parsing
Definition at line 148 of file videostream.h.
Referenced by DecodeInput().
|
private |
cache Log2MaxFrameNumMinus4 from a previous SPS parsing
Definition at line 145 of file videostream.h.
Referenced by OpenDecoder(), and ParseH264Packet().
|
private |
parse and log all frames until the number of given I-Frames arrived
Definition at line 141 of file videostream.h.
Referenced by DecodeInput(), and OpenDecoder().
|
private |
= 1 << Log2MaxFrameNumMinus4 + 4
Definition at line 144 of file videostream.h.
Referenced by CloseDecoder(), and ParseH264Packet().
|
private |
mutex for decoding thread control
Definition at line 115 of file videostream.h.
|
private |
array of strings to log the H.264 frames at stream start
Definition at line 139 of file videostream.h.
Referenced by CloseDecoder(), DecodeInput(), and ParseH264Packet().
flag for new stream
Definition at line 133 of file videostream.h.
Referenced by DecodeInput(), Open(), and OpenDecoder().
|
private |
counter for the arriving I-Frames at H.264 stream start
Definition at line 140 of file videostream.h.
Referenced by CloseDecoder(), DecodeInput(), and ParseH264Packet().
|
private |
AVPackets queue.
Definition at line 126 of file videostream.h.
Referenced by ClearVdrCoreToDecoderQueue(), DecodeInput(), Flush(), GetAvPacketsFilled(), IsInputBufferFull(), OpenDecoder(), and PushAvPacket().
parse width and height when starting an h264 stream
Definition at line 122 of file videostream.h.
Referenced by OpenDecoder(), and SetParseH264Dimensions().
|
private |
plugin config
Definition at line 108 of file videostream.h.
Referenced by DecodeInput(), and OpenDecoder().
|
private |
video decoder
Definition at line 109 of file videostream.h.
Referenced by CheckForcingFrameDecode(), CloseDecoder(), DecodeInput(), Decoder(), Exit(), FlushDecoder(), GetVideoSize(), OpenDecoder(), RenderFrame(), and StartDecoder().
|
private |
pointer to renderer's DRM buffer queue
Definition at line 113 of file videostream.h.
Referenced by DecodeInput().
|
private |
current codec parameters
Definition at line 129 of file videostream.h.
Referenced by CloseDecoder(), DecodeInput(), FlushDecoder(), Open(), and OpenDecoder().
|
private |
cache NumRefIdxL0DefaultActiveMinuns1 from a previous PPS parsing
Definition at line 146 of file videostream.h.
Referenced by OpenDecoder(), and ParseH264Packet().
|
private |
cache NumRefIdxL1DefaultActiveMinuns1 from a previous PPS parsing
Definition at line 147 of file videostream.h.
Referenced by OpenDecoder(), and ParseH264Packet().
|
private |
video renderer
Definition at line 110 of file videostream.h.
Referenced by CheckForcingFrameDecode(), and DecodeInput().
|
private |
how many avpkt have been sent to the decoder in trickspeed mode?
Definition at line 132 of file videostream.h.
Referenced by CheckForcingFrameDecode(), DecodeInput(), and ResetTrickSpeedFramesSentCounter().
wait for an I-Frame to start h264 decoding
Definition at line 121 of file videostream.h.
Referenced by OpenDecoder(), and SetStartDecodingWithIFrame().
|
private |
current codec timebase
Definition at line 130 of file videostream.h.
Referenced by DecodeInput(), FlushDecoder(), GetInputPtsMs(), Open(), OpenDecoder(), and RenderFrame().
|
private |
how many avpkt does the decoder need in trickspeed mode?
Definition at line 131 of file videostream.h.
Referenced by CheckForcingFrameDecode(), and Open().
set, if the user configured the deinterlace to be disabled
Definition at line 119 of file videostream.h.
Referenced by DisableDeint(), and RenderFrame().
|
private |
pointer to deinterlace/scaling video filter thread
Definition at line 114 of file videostream.h.
Referenced by CancelFilterThread(), DecodeInput(), and RenderFrame().
max number of video packets held in the buffer
Definition at line 125 of file videostream.h.
Referenced by GetVideoPacketMax(), and IsInputBufferFull().