Allow decoders to choose a desired colorspace

This commit is contained in:
Cameron Gutman 2019-12-14 15:25:56 -08:00
parent 88930a9de4
commit 160684f23e
7 changed files with 21 additions and 0 deletions

View File

@ -284,6 +284,8 @@ bool Session::populateDecoderProperties(SDL_Window* window)
m_VideoCallbacks.capabilities |= decoder->getDecoderCapabilities(); m_VideoCallbacks.capabilities |= decoder->getDecoderCapabilities();
m_StreamConfig.colorSpace = decoder->getDecoderColorspace();
delete decoder; delete decoder;
return true; return true;

View File

@ -44,6 +44,7 @@ public:
virtual bool initialize(PDECODER_PARAMETERS params) = 0; virtual bool initialize(PDECODER_PARAMETERS params) = 0;
virtual bool isHardwareAccelerated() = 0; virtual bool isHardwareAccelerated() = 0;
virtual int getDecoderCapabilities() = 0; virtual int getDecoderCapabilities() = 0;
virtual int getDecoderColorspace() = 0;
virtual int submitDecodeUnit(PDECODE_UNIT du) = 0; virtual int submitDecodeUnit(PDECODE_UNIT du) = 0;
virtual void renderFrameOnMainThread() = 0; virtual void renderFrameOnMainThread() = 0;
}; };

View File

@ -31,6 +31,11 @@ public:
return 0; return 0;
} }
virtual int getDecoderColorspace() {
// Rec 601 is default
return COLORSPACE_REC_601;
}
virtual FramePacingConstraint getFramePacingConstraint() { virtual FramePacingConstraint getFramePacingConstraint() {
// No pacing preference // No pacing preference
return PACING_ANY; return PACING_ANY;

View File

@ -50,6 +50,11 @@ int FFmpegVideoDecoder::getDecoderCapabilities()
return m_BackendRenderer->getDecoderCapabilities(); return m_BackendRenderer->getDecoderCapabilities();
} }
int FFmpegVideoDecoder::getDecoderColorspace()
{
return m_FrontendRenderer->getDecoderColorspace();
}
enum AVPixelFormat FFmpegVideoDecoder::ffGetFormat(AVCodecContext* context, enum AVPixelFormat FFmpegVideoDecoder::ffGetFormat(AVCodecContext* context,
const enum AVPixelFormat* pixFmts) const enum AVPixelFormat* pixFmts)
{ {

View File

@ -17,6 +17,7 @@ public:
virtual bool initialize(PDECODER_PARAMETERS params) override; virtual bool initialize(PDECODER_PARAMETERS params) override;
virtual bool isHardwareAccelerated() override; virtual bool isHardwareAccelerated() override;
virtual int getDecoderCapabilities() override; virtual int getDecoderCapabilities() override;
virtual int getDecoderColorspace() override;
virtual int submitDecodeUnit(PDECODE_UNIT du) override; virtual int submitDecodeUnit(PDECODE_UNIT du) override;
virtual void renderFrameOnMainThread() override; virtual void renderFrameOnMainThread() override;

View File

@ -31,6 +31,12 @@ SLVideoDecoder::getDecoderCapabilities()
return 0; return 0;
} }
int
SLVideoDecoder::getDecoderColorspace()
{
return COLORSPACE_REC_709;
}
bool bool
SLVideoDecoder::initialize(PDECODER_PARAMETERS params) SLVideoDecoder::initialize(PDECODER_PARAMETERS params)
{ {

View File

@ -12,6 +12,7 @@ public:
virtual bool initialize(PDECODER_PARAMETERS params); virtual bool initialize(PDECODER_PARAMETERS params);
virtual bool isHardwareAccelerated(); virtual bool isHardwareAccelerated();
virtual int getDecoderCapabilities(); virtual int getDecoderCapabilities();
virtual int getDecoderColorspace();
virtual int submitDecodeUnit(PDECODE_UNIT du); virtual int submitDecodeUnit(PDECODE_UNIT du);
// Unused since rendering is done directly from the decode thread // Unused since rendering is done directly from the decode thread