diff --git a/mcfw/src_bios6/links_m3video/codec_utils/src/utils_encdec.c b/mcfw/src_bios6/links_m3video/codec_utils/src/utils_encdec.c old mode 100644 new mode 100755 index 0b991f1..b00b3a8 --- a/mcfw/src_bios6/links_m3video/codec_utils/src/utils_encdec.c +++ b/mcfw/src_bios6/links_m3video/codec_utils/src/utils_encdec.c @@ -157,38 +157,54 @@ EncDec_ResolutionClass Utils_encdecGetResolutionClass(UInt32 width, UTILS_assert((width <= UTILS_ENCDEC_RESOLUTION_CLASS_16MP_WIDTH) && (height <= UTILS_ENCDEC_RESOLUTION_CLASS_16MP_HEIGHT)); - if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_1080P_WIDTH) || - (height > UTILS_ENCDEC_RESOLUTION_CLASS_1080P_HEIGHT)) - { - resClass = UTILS_ENCDEC_RESOLUTION_CLASS_16MP; - } - else - { - if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_720P_WIDTH) || - (height > UTILS_ENCDEC_RESOLUTION_CLASS_720P_HEIGHT)) + if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_9MP_WIDTH) || + (height > UTILS_ENCDEC_RESOLUTION_CLASS_9MP_HEIGHT)) + { + resClass = UTILS_ENCDEC_RESOLUTION_CLASS_16MP; + } + else + { + if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_4MP_WIDTH) || + (height > UTILS_ENCDEC_RESOLUTION_CLASS_4MP_HEIGHT)) { - resClass = UTILS_ENCDEC_RESOLUTION_CLASS_1080P; + resClass = UTILS_ENCDEC_RESOLUTION_CLASS_9MP; } else { - if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_D1_WIDTH) || - (height > UTILS_ENCDEC_RESOLUTION_CLASS_D1_HEIGHT)) - { - resClass = UTILS_ENCDEC_RESOLUTION_CLASS_720P; - } - else - { - if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_CIF_WIDTH) || - (height > UTILS_ENCDEC_RESOLUTION_CLASS_CIF_HEIGHT)) + if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_1080P_WIDTH) || + (height > UTILS_ENCDEC_RESOLUTION_CLASS_1080P_HEIGHT)) + { + resClass = UTILS_ENCDEC_RESOLUTION_CLASS_4MP; + } + else + { + if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_720P_WIDTH) || + (height > UTILS_ENCDEC_RESOLUTION_CLASS_720P_HEIGHT)) { - resClass = UTILS_ENCDEC_RESOLUTION_CLASS_D1; + resClass = UTILS_ENCDEC_RESOLUTION_CLASS_1080P; } else { - resClass = UTILS_ENCDEC_RESOLUTION_CLASS_CIF; - } + if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_D1_WIDTH) || + (height > UTILS_ENCDEC_RESOLUTION_CLASS_D1_HEIGHT)) + { + resClass = UTILS_ENCDEC_RESOLUTION_CLASS_720P; + } + else + { + if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_CIF_WIDTH) || + (height > UTILS_ENCDEC_RESOLUTION_CLASS_CIF_HEIGHT)) + { + resClass = UTILS_ENCDEC_RESOLUTION_CLASS_D1; + } + else + { + resClass = UTILS_ENCDEC_RESOLUTION_CLASS_CIF; + } + } + } } - } + } } return resClass; } @@ -215,6 +231,8 @@ Int Utils_encdecGetCodecLevel(UInt32 codingFormat, switch (Utils_encdecGetResolutionClass(maxWidth, maxHeight)) { case UTILS_ENCDEC_RESOLUTION_CLASS_16MP: + case UTILS_ENCDEC_RESOLUTION_CLASS_9MP: + case UTILS_ENCDEC_RESOLUTION_CLASS_4MP: if (isEnc) *pLevel = IH264_LEVEL_51; else diff --git a/mcfw/src_bios6/links_m3video/codec_utils/utils_encdec.h b/mcfw/src_bios6/links_m3video/codec_utils/utils_encdec.h index 232d710..697a21c 100755 --- a/mcfw/src_bios6/links_m3video/codec_utils/utils_encdec.h +++ b/mcfw/src_bios6/links_m3video/codec_utils/utils_encdec.h @@ -50,6 +50,8 @@ typedef enum EncDec_ResolutionClass { UTILS_ENCDEC_RESOLUTION_CLASS_FIRST = 0, UTILS_ENCDEC_RESOLUTION_CLASS_16MP = UTILS_ENCDEC_RESOLUTION_CLASS_FIRST, + UTILS_ENCDEC_RESOLUTION_CLASS_9MP, + UTILS_ENCDEC_RESOLUTION_CLASS_4MP, UTILS_ENCDEC_RESOLUTION_CLASS_1080P, UTILS_ENCDEC_RESOLUTION_CLASS_720P, UTILS_ENCDEC_RESOLUTION_CLASS_D1, @@ -81,6 +83,12 @@ typedef struct EncDec_AlgorithmActivityLog { #define UTILS_ENCDEC_RESOLUTION_CLASS_16MP_WIDTH (4*1024) #define UTILS_ENCDEC_RESOLUTION_CLASS_16MP_HEIGHT (4*1024) +#define UTILS_ENCDEC_RESOLUTION_CLASS_9MP_WIDTH (3*1024) +#define UTILS_ENCDEC_RESOLUTION_CLASS_9MP_HEIGHT (3*1024) + +#define UTILS_ENCDEC_RESOLUTION_CLASS_4MP_WIDTH (2*1024) +#define UTILS_ENCDEC_RESOLUTION_CLASS_4MP_HEIGHT (2*1024) + #define UTILS_ENCDEC_RESOLUTION_CLASS_1080P_WIDTH (1920) #define UTILS_ENCDEC_RESOLUTION_CLASS_1080P_HEIGHT (1080) diff --git a/mcfw/src_bios6/links_m3video/iva_dec/decLink_common.c b/mcfw/src_bios6/links_m3video/iva_dec/decLink_common.c index e2ff82e..8ca61c3 100755 --- a/mcfw/src_bios6/links_m3video/iva_dec/decLink_common.c +++ b/mcfw/src_bios6/links_m3video/iva_dec/decLink_common.c @@ -359,6 +359,26 @@ static Int32 DecLink_codecPopulateOutFrmFormat(DecLink_Obj *pObj, UInt32 chId) pFormat->pitch[0] = VpsUtils_align(pFormat->width, VPS_BUFFER_ALIGNMENT); break; + case UTILS_ENCDEC_RESOLUTION_CLASS_4MP: // 4MP + pFormat->width = + UTILS_ENCDEC_GET_PADDED_WIDTH + (UTILS_ENCDEC_RESOLUTION_CLASS_4MP_WIDTH); + pFormat->height = + UTILS_ENCDEC_GET_PADDED_HEIGHT + (UTILS_ENCDEC_RESOLUTION_CLASS_4MP_HEIGHT); + pFormat->pitch[0] = + VpsUtils_align(pFormat->width, VPS_BUFFER_ALIGNMENT); + break; + case UTILS_ENCDEC_RESOLUTION_CLASS_9MP: // 9MP + pFormat->width = + UTILS_ENCDEC_GET_PADDED_WIDTH + (UTILS_ENCDEC_RESOLUTION_CLASS_9MP_WIDTH); + pFormat->height = + UTILS_ENCDEC_GET_PADDED_HEIGHT + (UTILS_ENCDEC_RESOLUTION_CLASS_9MP_HEIGHT); + pFormat->pitch[0] = + VpsUtils_align(pFormat->width, VPS_BUFFER_ALIGNMENT); + break; case UTILS_ENCDEC_RESOLUTION_CLASS_16MP: // 16MP pFormat->width = UTILS_ENCDEC_GET_PADDED_WIDTH @@ -1308,6 +1328,24 @@ static Int32 DecLink_codecMapCh2ResolutionPool(DecLink_Obj * pObj, UInt32 chId) } if ((status != DEC_LINK_S_SUCCESS) && (pObj->createArgs.chCreateParams[chId].targetMaxWidth <= + UTILS_ENCDEC_RESOLUTION_CLASS_4MP_WIDTH) && + (pObj->createArgs.chCreateParams[chId].targetMaxHeight <= + UTILS_ENCDEC_RESOLUTION_CLASS_4MP_HEIGHT)) + { + pOutObj->outChObj[chId].reslutionClass = UTILS_ENCDEC_RESOLUTION_CLASS_4MP; + status = DEC_LINK_S_SUCCESS; + } + if ((status != DEC_LINK_S_SUCCESS) && + (pObj->createArgs.chCreateParams[chId].targetMaxWidth <= + UTILS_ENCDEC_RESOLUTION_CLASS_9MP_WIDTH) && + (pObj->createArgs.chCreateParams[chId].targetMaxHeight <= + UTILS_ENCDEC_RESOLUTION_CLASS_9MP_HEIGHT)) + { + pOutObj->outChObj[chId].reslutionClass = UTILS_ENCDEC_RESOLUTION_CLASS_9MP; + status = DEC_LINK_S_SUCCESS; + } + if ((status != DEC_LINK_S_SUCCESS) && + (pObj->createArgs.chCreateParams[chId].targetMaxWidth <= UTILS_ENCDEC_RESOLUTION_CLASS_16MP_WIDTH) && (pObj->createArgs.chCreateParams[chId].targetMaxHeight <= UTILS_ENCDEC_RESOLUTION_CLASS_16MP_HEIGHT)) @@ -2348,6 +2386,8 @@ static Int32 DecLink_PrepareBatch (DecLink_Obj *pObj, UInt32 tskId, switch (pObj->outObj.outChObj[channelId].reslutionClass) { case UTILS_ENCDEC_RESOLUTION_CLASS_16MP: + case UTILS_ENCDEC_RESOLUTION_CLASS_9MP: + case UTILS_ENCDEC_RESOLUTION_CLASS_4MP: case UTILS_ENCDEC_RESOLUTION_CLASS_1080P: /*If the element has resolution between 1080p and 720p, only 1 channels possible per Batch*/ @@ -2438,6 +2478,10 @@ static Int32 DecLink_PrepareBatch (DecLink_Obj *pObj, UInt32 tskId, if ((UTILS_ENCDEC_RESOLUTION_CLASS_16MP == pObj->outObj.outChObj[newObjChannelId].reslutionClass) || + (UTILS_ENCDEC_RESOLUTION_CLASS_9MP == + pObj->outObj.outChObj[newObjChannelId].reslutionClass) || + (UTILS_ENCDEC_RESOLUTION_CLASS_4MP == + pObj->outObj.outChObj[newObjChannelId].reslutionClass) || (UTILS_ENCDEC_RESOLUTION_CLASS_1080P == pObj->outObj.outChObj[newObjChannelId].reslutionClass)) { diff --git a/mcfw/src_linux/links/ipcBitsOut/ipcBitsOutLink_tsk.c b/mcfw/src_linux/links/ipcBitsOut/ipcBitsOutLink_tsk.c index 51124bb..51f1915 100755 --- a/mcfw/src_linux/links/ipcBitsOut/ipcBitsOutLink_tsk.c +++ b/mcfw/src_linux/links/ipcBitsOut/ipcBitsOutLink_tsk.c @@ -19,6 +19,8 @@ typedef enum EncDec_ResolutionClass { UTILS_ENCDEC_RESOLUTION_CLASS_FIRST = 0, UTILS_ENCDEC_RESOLUTION_CLASS_16MP = UTILS_ENCDEC_RESOLUTION_CLASS_FIRST, + UTILS_ENCDEC_RESOLUTION_CLASS_9MP, + UTILS_ENCDEC_RESOLUTION_CLASS_4MP, UTILS_ENCDEC_RESOLUTION_CLASS_1080P, UTILS_ENCDEC_RESOLUTION_CLASS_720P, UTILS_ENCDEC_RESOLUTION_CLASS_D1, @@ -31,6 +33,12 @@ typedef enum EncDec_ResolutionClass { #define UTILS_ENCDEC_RESOLUTION_CLASS_16MP_WIDTH (4*1024) #define UTILS_ENCDEC_RESOLUTION_CLASS_16MP_HEIGHT (4*1024) +#define UTILS_ENCDEC_RESOLUTION_CLASS_9MP_WIDTH (3*1024) +#define UTILS_ENCDEC_RESOLUTION_CLASS_9MP_HEIGHT (3*1024) + +#define UTILS_ENCDEC_RESOLUTION_CLASS_4MP_WIDTH (2*1024) +#define UTILS_ENCDEC_RESOLUTION_CLASS_4MP_HEIGHT (2*1024) + #define UTILS_ENCDEC_RESOLUTION_CLASS_1080P_WIDTH (1920) #define UTILS_ENCDEC_RESOLUTION_CLASS_1080P_HEIGHT (1080) @@ -101,35 +109,51 @@ EncDec_ResolutionClass ipcbitsoutlink_get_resolution_class(UInt32 width, UTILS_assert((width <= UTILS_ENCDEC_RESOLUTION_CLASS_16MP_WIDTH) && (height <= UTILS_ENCDEC_RESOLUTION_CLASS_16MP_HEIGHT)); - if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_1080P_WIDTH) || - (height > UTILS_ENCDEC_RESOLUTION_CLASS_1080P_HEIGHT)) + if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_9MP_WIDTH) || + (height > UTILS_ENCDEC_RESOLUTION_CLASS_9MP_HEIGHT)) { resClass = UTILS_ENCDEC_RESOLUTION_CLASS_16MP; } else { - if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_720P_WIDTH) || - (height > UTILS_ENCDEC_RESOLUTION_CLASS_720P_HEIGHT)) + if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_4MP_WIDTH) || + (height > UTILS_ENCDEC_RESOLUTION_CLASS_4MP_HEIGHT)) { - resClass = UTILS_ENCDEC_RESOLUTION_CLASS_1080P; + resClass = UTILS_ENCDEC_RESOLUTION_CLASS_9MP; } else { - if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_D1_WIDTH) || - (height > UTILS_ENCDEC_RESOLUTION_CLASS_D1_HEIGHT)) + if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_1080P_WIDTH) || + (height > UTILS_ENCDEC_RESOLUTION_CLASS_1080P_HEIGHT)) { - resClass = UTILS_ENCDEC_RESOLUTION_CLASS_720P; + resClass = UTILS_ENCDEC_RESOLUTION_CLASS_4MP; } else { - if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_CIF_WIDTH) || - (height > UTILS_ENCDEC_RESOLUTION_CLASS_CIF_HEIGHT)) + if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_720P_WIDTH) || + (height > UTILS_ENCDEC_RESOLUTION_CLASS_720P_HEIGHT)) { - resClass = UTILS_ENCDEC_RESOLUTION_CLASS_D1; + resClass = UTILS_ENCDEC_RESOLUTION_CLASS_1080P; } else { - resClass = UTILS_ENCDEC_RESOLUTION_CLASS_CIF; + if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_D1_WIDTH) || + (height > UTILS_ENCDEC_RESOLUTION_CLASS_D1_HEIGHT)) + { + resClass = UTILS_ENCDEC_RESOLUTION_CLASS_720P; + } + else + { + if ((width > UTILS_ENCDEC_RESOLUTION_CLASS_CIF_WIDTH) || + (height > UTILS_ENCDEC_RESOLUTION_CLASS_CIF_HEIGHT)) + { + resClass = UTILS_ENCDEC_RESOLUTION_CLASS_D1; + } + else + { + resClass = UTILS_ENCDEC_RESOLUTION_CLASS_CIF; + } + } } } } @@ -149,6 +173,14 @@ Int ipcbitsoutlink_get_resolution_class_info(EncDec_ResolutionClass resClass, *pWidth = UTILS_ENCDEC_RESOLUTION_CLASS_16MP_WIDTH; *pHeight = UTILS_ENCDEC_RESOLUTION_CLASS_16MP_HEIGHT; break; + case UTILS_ENCDEC_RESOLUTION_CLASS_9MP: + *pWidth = UTILS_ENCDEC_RESOLUTION_CLASS_9MP_WIDTH; + *pHeight = UTILS_ENCDEC_RESOLUTION_CLASS_9MP_HEIGHT; + break; + case UTILS_ENCDEC_RESOLUTION_CLASS_4MP: + *pWidth = UTILS_ENCDEC_RESOLUTION_CLASS_4MP_WIDTH; + *pHeight = UTILS_ENCDEC_RESOLUTION_CLASS_4MP_HEIGHT; + break; case UTILS_ENCDEC_RESOLUTION_CLASS_1080P: *pWidth = UTILS_ENCDEC_RESOLUTION_CLASS_1080P_WIDTH; *pHeight = UTILS_ENCDEC_RESOLUTION_CLASS_1080P_HEIGHT;