commit
37fa5f554e
@ -64,7 +64,7 @@ class ISVCEncoder {
|
||||
virtual int EXTAPI Uninitialize() = 0;
|
||||
|
||||
/*
|
||||
* return: EVideoFrameType [IDR: videoFrameTypeIDR; P: videoFrameTypeP; ERROR: videoFrameTypeInvalid]
|
||||
* return: 0 - success; otherwise -failed;
|
||||
*/
|
||||
virtual int EXTAPI EncodeFrame (const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo) = 0;
|
||||
/*
|
||||
|
@ -75,6 +75,7 @@ typedef enum {
|
||||
cmUnkonwReason,
|
||||
cmMallocMemeError, /*Malloc a memory error*/
|
||||
cmInitExpected, /*Initial action is expected*/
|
||||
cmUnsupportedData,
|
||||
} CM_RETURN;
|
||||
|
||||
|
||||
|
@ -1730,8 +1730,8 @@ int32_t InitSliceSettings (SWelsSvcCodingParam* pCodingParam, const int32_t kiCp
|
||||
break;
|
||||
case SM_AUTO_SLICE:
|
||||
iMaxSliceCount = MAX_SLICES_NUM;
|
||||
pDlp->sSliceCfg.sSliceArgument.uiSliceNum = kiCpuCores;
|
||||
if (pDlp->sSliceCfg.sSliceArgument.uiSliceNum > iMaxSliceCount){
|
||||
pDlp->sSliceCfg.sSliceArgument.uiSliceNum = kiCpuCores;
|
||||
if (pDlp->sSliceCfg.sSliceArgument.uiSliceNum > iMaxSliceCount){
|
||||
pDlp->sSliceCfg.sSliceArgument.uiSliceNum = iMaxSliceCount;
|
||||
}
|
||||
if (pDlp->sSliceCfg.sSliceArgument.uiSliceNum == 1) {
|
||||
|
@ -508,11 +508,28 @@ int32_t CWelsH264SVCEncoder::RawData2SrcPic (const uint8_t* pSrc) {
|
||||
*/
|
||||
int CWelsH264SVCEncoder::EncodeFrame (const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo) {
|
||||
if (! (kpSrcPic && m_pEncContext && m_bInitialFlag)) {
|
||||
return videoFrameTypeInvalid;
|
||||
return cmInitParaError;
|
||||
}
|
||||
|
||||
const int32_t kiEncoderReturn = EncodeFrameInternal(kpSrcPic, pBsInfo);
|
||||
|
||||
switch (kiEncoderReturn) {
|
||||
case ENC_RETURN_MEMALLOCERR:
|
||||
WelsUninitEncoderExt (&m_pEncContext);
|
||||
return cmMallocMemeError;
|
||||
case ENC_RETURN_SUCCESS:
|
||||
case ENC_RETURN_CORRECTED:
|
||||
break;//continue processing
|
||||
case ENC_RETURN_UNSUPPORTED_PARA:
|
||||
return cmUnsupportedData;
|
||||
break;
|
||||
case ENC_RETURN_UNEXPECTED:
|
||||
return cmUnkonwReason;
|
||||
default:
|
||||
WelsLog (m_pEncContext, WELS_LOG_ERROR, "unexpected return(%d) from WelsEncoderEncodeExt()!\n", kiEncoderReturn);
|
||||
return cmUnkonwReason;
|
||||
}
|
||||
|
||||
int32_t uiFrameType = videoFrameTypeInvalid;
|
||||
uiFrameType = EncodeFrameInternal(kpSrcPic, pBsInfo);
|
||||
|
||||
#ifdef REC_FRAME_COUNT
|
||||
++ m_uiCountFrameNum;
|
||||
@ -523,8 +540,7 @@ int CWelsH264SVCEncoder::EncodeFrame (const SSourcePicture* kpSrcPic, SFrameBSIn
|
||||
#ifdef DUMP_SRC_PICTURE
|
||||
DumpSrcPicture (pSrc);
|
||||
#endif // DUMP_SRC_PICTURE
|
||||
|
||||
return uiFrameType;
|
||||
return cmResultSuccess;
|
||||
}
|
||||
|
||||
|
||||
@ -539,18 +555,12 @@ int CWelsH264SVCEncoder::EncodeFrameInternal(const SSourcePicture* pSrcPic, SFr
|
||||
const int32_t kiEncoderReturn = WelsEncoderEncodeExt (m_pEncContext, pBsInfo, pSrcPic);
|
||||
XMMREG_PROTECT_LOAD(CWelsH264SVCEncoder);
|
||||
|
||||
switch (kiEncoderReturn) {
|
||||
case ENC_RETURN_MEMALLOCERR:
|
||||
if(kiEncoderReturn == ENC_RETURN_MEMALLOCERR) {
|
||||
WelsUninitEncoderExt (&m_pEncContext);
|
||||
return videoFrameTypeInvalid;
|
||||
case ENC_RETURN_SUCCESS:
|
||||
case ENC_RETURN_CORRECTED:
|
||||
break;//continue processing
|
||||
case ENC_RETURN_UNSUPPORTED_PARA:
|
||||
case ENC_RETURN_UNEXPECTED:
|
||||
return videoFrameTypeInvalid;
|
||||
default:
|
||||
WelsLog (m_pEncContext, WELS_LOG_ERROR, "unexpected return(%d) from WelsEncoderEncodeExt()!\n", kiEncoderReturn);
|
||||
}
|
||||
else if((kiEncoderReturn != ENC_RETURN_SUCCESS)&&(kiEncoderReturn == ENC_RETURN_CORRECTED)){
|
||||
WelsLog (m_pEncContext, WELS_LOG_ERROR, "unexpected return(%d) from EncodeFrameInternal()!\n", kiEncoderReturn);
|
||||
return videoFrameTypeInvalid;
|
||||
}
|
||||
|
||||
@ -576,8 +586,6 @@ int CWelsH264SVCEncoder::EncodeFrameInternal(const SSourcePicture* pSrcPic, SFr
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
///////////////////for test
|
||||
#ifdef OUTPUT_BIT_STREAM
|
||||
if (iFrameType != videoFrameTypeInvalid && iFrameType != videoFrameTypeSkip) {
|
||||
@ -625,7 +633,7 @@ int CWelsH264SVCEncoder::EncodeFrameInternal(const SSourcePicture* pSrcPic, SFr
|
||||
DumpSrcPicture (pSrcPicList[0]->pData[0]);
|
||||
#endif // DUMP_SRC_PICTURE
|
||||
|
||||
return iFrameType;
|
||||
return kiEncoderReturn;
|
||||
|
||||
}
|
||||
|
||||
|
@ -83,8 +83,8 @@ void BaseEncoderTest::EncodeStream(InputStream* in, int width, int height,
|
||||
pic.pData[2] = pic.pData[1] + (width*height>>2);
|
||||
while (in->read(buf.data(), frameSize) == frameSize) {
|
||||
rv = encoder_->EncodeFrame(&pic, &info);
|
||||
ASSERT_TRUE(rv != videoFrameTypeInvalid);
|
||||
if (rv != videoFrameTypeSkip && cbk != NULL) {
|
||||
ASSERT_TRUE(rv == cmResultSuccess);
|
||||
if (info.eOutputFrameType != videoFrameTypeSkip && cbk != NULL) {
|
||||
cbk->onEncodeFrame(info);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user