diff --git a/codec/decoder/core/src/decoder.cpp b/codec/decoder/core/src/decoder.cpp index ab616995..88e599d4 100644 --- a/codec/decoder/core/src/decoder.cpp +++ b/codec/decoder/core/src/decoder.cpp @@ -516,9 +516,11 @@ int32_t DecoderConfigParam (PWelsDecoderContext pCtx, const SDecodingParam* kpPa memcpy (pCtx->pParam, kpParam, sizeof (SDecodingParam)); pCtx->eOutputColorFormat = pCtx->pParam->eOutputColorFormat; - int32_t iRet = DecoderSetCsp (pCtx, pCtx->pParam->eOutputColorFormat); - if (iRet) - return iRet; + if (!pCtx->bParseOnly) { + int32_t iRet = DecoderSetCsp (pCtx, pCtx->pParam->eOutputColorFormat); + if (iRet) + return iRet; + } pCtx->eErrorConMethod = pCtx->pParam->eEcActiveIdc; if (pCtx->bParseOnly) //parse only, disable EC method diff --git a/codec/decoder/plus/src/welsDecoderExt.cpp b/codec/decoder/plus/src/welsDecoderExt.cpp index a93a418b..edbf058d 100644 --- a/codec/decoder/plus/src/welsDecoderExt.cpp +++ b/codec/decoder/plus/src/welsDecoderExt.cpp @@ -258,6 +258,11 @@ long CWelsDecoder::SetOption (DECODER_OPTION eOptID, void* pOption) { return dsInitialOptExpected; if (eOptID == DECODER_OPTION_DATAFORMAT) { // Set color space of decoding output frame + if (m_pDecContext->bParseOnly) { + WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_WARNING, + "CWelsDecoder::SetOption for data format meaningless for parseonly."); + return cmResultSuccess; + } if (pOption == NULL) return cmInitParaError; diff --git a/test/api/encode_decode_api_test.cpp b/test/api/encode_decode_api_test.cpp index 17b27868..c13dead4 100644 --- a/test/api/encode_decode_api_test.cpp +++ b/test/api/encode_decode_api_test.cpp @@ -2337,7 +2337,7 @@ class DecodeParseAPI : public EncodeDecodeTestBase { decoder_->Uninitialize(); SDecodingParam decParam; memset (&decParam, 0, sizeof (SDecodingParam)); - decParam.eOutputColorFormat = videoFormatI420; + decParam.eOutputColorFormat = videoFormatRGB; decParam.uiTargetDqLayer = UCHAR_MAX; decParam.eEcActiveIdc = ERROR_CON_SLICE_COPY; decParam.bParseOnly = true;