CathodeRetro::Internal::SignalDecoder
This is an internal class used by CathodeRetro::
to take a texture representing a set of composite or S-Video scanlines (the output of
SignalGenerator
) and decode it back into an RGB image.
If you are using the CathodeRetro::
class, you should not need to use this class directly.
For a description of what this class does, see Decoding A Fake NTSC Signal.
Public Members
Public Methods
Public Methods
- (constructor)
-
SignalDecoder( IGraphicsDevice *deviceIn, const SignalProperties &signalPropsIn)
Description
Construct a new instance of the Internal::
class.SignalDecoder Parameters
deviceIn
-
Type:
IGraphicsDevice *
Pointer to the graphics device instance that this instance should use for all of its drawing-related functionality. This pointer will be cached so the lifetime of
deviceIn
must extend past the lifetime of theInternal::
instance being created.SignalDecoder signalPropsIn
-
Type:
const Internal::
SignalProperties &Properties of the signal being decoded (typically the output of the
SignalGenerator::
method).SignalProperties
- SetKnobSettings
-
void SetKnobSettings( const TVKnobSettings &settings)
Description
Update the TV knob settings used by the decode process. Parameters
settings
-
Type:
const TVKnobSettings &
The new TV knob settings to use.
- CurrentFrameRGBOutput
-
const ITexture *CurrentFrameRGBOutput() const
Description
Return a pointer to the output of the last call to Decode
.Return Value
Type: const ITexture *
A pointer to
rgbTexture
, the texture containing the output of the last call toDecode
. - Decode
-
void Decode( const ITexture *inputSignal, const ITexture *inputPhases, const SignalLevels &levels)
Description
Decodes a texture of scanline signals (either composite or S-Video), given the per-scanline phase information, and converts it into an RGB image. Parameters
inputSignal
-
Type:
const ITexture *
Pointer to the input texture containing composite or S-Video scanlines, usually the output from the
SignalGenerator::
method.SignalTexture The dimensions of this texture are expected to match the
scanlineWidth
andscanlineCount
values of thesignalPropsIn
parameter passed to the constructor. inputPhases
-
Type:
const ITexture *
Pointer to an input texture containing the per-scanline colorburst phase offset values, usually the output from the
SignalGenerator::
method.PhasesTexture This texture's width should be
1
, and its height should match thescanlineCount
value of thesignalPropsIn
parameter passed to the constructor. levels
-
Type:
const Internal::
SignalLevels &Information about the various levels of the signal and the amount of temporal artifact reduction we should apply.
- OutputTextureWidth
-
uint32_t OutputTextureWidth() const
Description
Get the width of the decoded RGB texture that Decode
will render to.Return Value
Type: uint32_t
The width of the decoded RGB texture that
Decode
will render to.
Private Members
Private Structures
Private Methods
Private Fields
Private Structures
- CompositeToSVideoConstantData
-
Description
This structure maps to the constant buffer input to the decoder-composite-to-svideo shader. Refer to its page for documentation of the fields. - SVideoToModulatedChromaConstantData
-
Description
This structure maps to the constant buffer input to the decoder-svideo-to-modulated-chroma shader. Refer to its page for documentation of the fields. - SVideoToRGBConstantData
-
Description
This structure maps to the constant buffer input to the decoder-svideo-to-rgb shader. Refer to its page for documentation of the fields. - FilterRGBConstantData
-
Description
This structure maps to the constant buffer input to the decoder-filter-rgb shader. Refer to its page for documentation of the fields.
Private Methods
- CompositeToSVideo
-
void CompositeToSVideo( const ITexture *inputSignal, bool isDoubled)
Description
Run the composite-to-S-Video pass, which separates a composite signal into individual luma and chroma signals.
Called by
Decode
.Parameters
inputSignal
-
Type:
const ITexture *
The composite texture to separate.
isDoubled
-
Type:
bool
This is set to true if the texture is doubled for temporal aliasing reduction (which changes which textures this pass writes out to to ease GPU bandwidth).
- SVideoToRGB
-
void SVideoToRGB( const ITexture *sVideoTexture, const ITexture *inputPhases, const SignalLevels &levels)
Description
Does a QAM demodulation pass on an S-Video signal (with separate luma and chroma signals) to convert it into an RGB texture.
Called by
Decode
.Parameters
sVideoTexture
-
Type:
const ITexture *
A texture containing a series of S-Video scanlines (with separate luma and chroma channels) that we are going to demodulate.
inputPhases
-
Type:
const ITexture *
Pointer to an input texture containing the per-scanline colorburst phase offset values, usually the output from the
SignalGenerator::
method.PhasesTexture This texture's width should be
1
, and its height should match thescanlineCount
value of thesignalPropsIn
parameter passed to the constructor. levels
-
Type:
const Internal::
SignalLevels &Information about the various levels of the signal and the amount of temporal artifact reduction we should apply.
- FilterRGB
-
void FilterRGB()
Description
Runs the RGB filtering pass, which is a horizontal sharpen or blur filter based on the
sharpness
value ofknobSettings
.Called by
Decode
.
Private Fields
- device
-
IGraphicsDevice *device
Type
IGraphicsDevice *
Description
Pointer to the graphics device that should be used to create graphics objects and render. - rgbTexture
-
std::unique_ptr<IRenderTarget> rgbTexture
Type
std::unique_ptr<IRenderTarget>
Description
The RGB texture that holds the output of the entire Decode
process. - scratchRGBTexture
-
std::unique_ptr<IRenderTarget> scratchRGBTexture
Type
std::unique_ptr<IRenderTarget>
Description
A scratch RGB texture used as the output of
FilterRGB
.If
FilterRGB
is called, this pointer is swapped withrgbTexture
after running the filter, so thatrgbTexture
contains the final output. - signalProps
-
SignalProperties signalProps
Type
Internal::
SignalProperties Description
The signal properties that were given to use in the constructor. - knobSettings
-
TVKnobSettings knobSettings
Type
TVKnobSettings
Description
The TV knob settings given by the last call to SetKnobSettings
. - compositeToSVideoConstantBuffer
-
std::unique_ptr<IConstantBuffer> compositeToSVideoConstantBuffer
Type
std::unique_ptr<IConstantBuffer>
Description
The constant buffer that is used in CompositeToSVideo
as an input to the decoder-composite-to-svideo shader. - decodedSVideoTextureSingle
-
std::unique_ptr<IRenderTarget> decodedSVideoTextureSingle
Type
std::unique_ptr<IRenderTarget>
Description
The render target output of
CompositeToSVideo
if temporal aliasing reduction is not in use.It is an RG texture (R is luma and G is chroma).
- decodedSVideoTextureDouble
-
std::unique_ptr<IRenderTarget> decodedSVideoTextureDouble
Type
std::unique_ptr<IRenderTarget>
Description
The render target output of
CompositeToSVideo
if temporal aliasing reduction is in use.It is an RGBA texture: (R, G) is (luma, chroma) for signal 1 and (B, A) is (luma, chroma) for signal 2.
- modulatedChromaTextureSingle
-
std::unique_ptr<IRenderTarget> modulatedChromaTextureSingle
Type
std::unique_ptr<IRenderTarget>
Description
The output of the decoder-svideo-to-modulated-chroma shader used as the first step of
SVideoToRGB
, if temporal aliasing reduction is not in use.This is an RG texture, where R and G are the chroma waves per scanline multiplied by the carrier sine wave and its quadrature, as part of the demodulation.
- modulatedChromaTextureDouble
-
std::unique_ptr<IRenderTarget> modulatedChromaTextureDouble
Type
std::unique_ptr<IRenderTarget>
Description
The output of the decoder-svideo-to-modulated-chroma shader used as the first step of
SVideoToRGB
, if temporal aliasing reduction is in use.This is an RGBA texture, where R and G are the chroma waves per scanline multiplied by the carrier sine wave and its quadrature, as part of the demodulation. B and A are the same for the second signal.
- sVideoToModulatedChromaConstantBuffer
-
std::unique_ptr<IConstantBuffer> sVideoToModulatedChromaConstantBuffer
Type
std::unique_ptr<IConstantBuffer>
Description
The constant buffer that is used inSVideoToRGB
as an input to the decoder-svideo-to-modulated-chroma shader. - sVideoToRGBConstantBuffer
-
std::unique_ptr<IConstantBuffer> sVideoToRGBConstantBuffer
Type
std::unique_ptr<IConstantBuffer>
Description
The constant buffer that is used in SVideoToRGB
as an input to the decoder-svideo-to-rgb shader. - filterRGBConstantBuffer
-
std::unique_ptr<IConstantBuffer> filterRGBConstantBuffer
Type
std::unique_ptr<IConstantBuffer>
Description
The constant buffer that is used in FilterRGB
as an input to the decoder-filter-rgb shader.