123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- // SPDX-License-Identifier: GPL-2.0
- /*
- * Copyright (C) 2021 StarFive Technology Co., Ltd.
- */
- #include "SF_OMX_video_common.h"
- OMX_ERRORTYPE GetStateCommon(OMX_IN OMX_HANDLETYPE hComponent, OMX_OUT OMX_STATETYPE *pState)
- {
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- OMX_COMPONENTTYPE *pOMXComponent = NULL;
- SF_OMX_COMPONENT *pSfOMXComponent = NULL;
- ComponentState state;
- FunctionIn();
- if (hComponent == NULL)
- {
- ret = OMX_ErrorBadParameter;
- goto EXIT;
- }
- pOMXComponent = (OMX_COMPONENTTYPE *)hComponent;
- pSfOMXComponent = pOMXComponent->pComponentPrivate;
- state = pSfOMXComponent->functions->ComponentGetState(pSfOMXComponent->hSFComponentExecoder);
- LOG(SF_LOG_INFO, "state = %d\r\n", state);
- switch (state)
- {
- case COMPONENT_STATE_CREATED:
- case COMPONENT_STATE_PREPARED:
- case COMPONENT_STATE_NONE:
- *pState = OMX_StateLoaded;
- break;
- case COMPONENT_STATE_TERMINATED:
- *pState = OMX_StateIdle;
- break;
- case COMPONENT_STATE_EXECUTED:
- *pState = OMX_StateExecuting;
- break;
- default:
- LOG(SF_LOG_WARN, "unknown state:%d \r\n", state);
- ret = OMX_ErrorUndefined;
- break;
- }
- EXIT:
- FunctionOut();
- return ret;
- }
- OMX_ERRORTYPE ComponentClearCommon(SF_OMX_COMPONENT *hComponent)
- {
- hComponent->functions->ComponentRelease(hComponent->hSFComponentExecoder);
- hComponent->functions->ComponentDestroy(hComponent->hSFComponentExecoder, NULL);
- hComponent->functions->DeInitLog();
- dlclose(hComponent->soHandle);
- free(hComponent->functions);
- free(hComponent->testConfig);
- free(hComponent->config);
- free(hComponent->lsnCtx);
- free(hComponent->pOMXComponent);
- for (int i = 0; i < 2; i++)
- {
- OMX_PARAM_PORTDEFINITIONTYPE *pPortDefinition = &hComponent->portDefinition[i];
- free(pPortDefinition->format.video.cMIMEType);
- }
- return OMX_ErrorNone;
- }
- BOOL CheckEncTestConfig(TestEncConfig *testConfig)
- {
- FunctionIn();
- if ((testConfig->compareType & (1 << MODE_SAVE_ENCODED)) && testConfig->bitstreamFileName[0] == 0)
- {
- testConfig->compareType &= ~(1 << MODE_SAVE_ENCODED);
- LOG(SF_LOG_ERR, "You want to Save bitstream data. Set the path\r\n");
- return FALSE;
- }
- if ((testConfig->compareType & (1 << MODE_COMP_ENCODED)) && testConfig->ref_stream_path[0] == 0)
- {
- testConfig->compareType &= ~(1 << MODE_COMP_ENCODED);
- LOG(SF_LOG_ERR, "You want to Compare bitstream data. Set the path\r\n");
- return FALSE;
- }
- FunctionOut();
- return TRUE;
- }
- BOOL CheckDecTestConfig(TestDecConfig *testConfig)
- {
- BOOL isValidParameters = TRUE;
- /* Check parameters */
- if (testConfig->skipMode < 0 || testConfig->skipMode == 3 || testConfig->skipMode > 4)
- {
- LOG(SF_LOG_WARN, "Invalid skip mode: %d\n", testConfig->skipMode);
- isValidParameters = FALSE;
- }
- if ((FORMAT_422 < testConfig->wtlFormat && testConfig->wtlFormat <= FORMAT_400) ||
- testConfig->wtlFormat < FORMAT_420 || testConfig->wtlFormat >= FORMAT_MAX)
- {
- LOG(SF_LOG_WARN, "Invalid WTL format(%d)\n", testConfig->wtlFormat);
- isValidParameters = FALSE;
- }
- if (isValidParameters == TRUE && (testConfig->scaleDownWidth > 0 || testConfig->scaleDownHeight > 0))
- {
- }
- if (testConfig->renderType < RENDER_DEVICE_NULL || testConfig->renderType >= RENDER_DEVICE_MAX)
- {
- LOG(SF_LOG_WARN, "unknown render device type(%d)\n", testConfig->renderType);
- isValidParameters = FALSE;
- }
- if (testConfig->thumbnailMode == TRUE && testConfig->skipMode != 0)
- {
- LOG(SF_LOG_WARN, "Turn off thumbnail mode or skip mode\n");
- isValidParameters = FALSE;
- }
- return isValidParameters;
- }
- OMX_ERRORTYPE InitComponentStructorCommon(SF_OMX_COMPONENT *hComponent)
- {
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- char *strDebugLevel = NULL;
- int debugLevel = 0;
- FunctionIn();
- if (hComponent == NULL)
- {
- ret = OMX_ErrorBadParameter;
- goto EXIT;
- }
- hComponent->pOMXComponent = malloc(sizeof(OMX_COMPONENTTYPE));
- if (hComponent->pOMXComponent == NULL)
- {
- ret = OMX_ErrorInsufficientResources;
- LOG(SF_LOG_ERR, "malloc fail\r\n");
- goto ERROR;
- }
- memset(hComponent->pOMXComponent, 0, sizeof(OMX_COMPONENTTYPE));
- hComponent->soHandle = dlopen(hComponent->libName, RTLD_NOW);
- if (hComponent->soHandle == NULL)
- {
- ret = OMX_ErrorInsufficientResources;
- LOG(SF_LOG_ERR, "could not open %s\r\n", hComponent->libName);
- goto ERROR;
- }
- hComponent->functions = malloc(sizeof(SF_COMPONENT_FUNCTIONS));
- if (hComponent->functions == NULL)
- {
- ret = OMX_ErrorInsufficientResources;
- LOG(SF_LOG_ERR, "malloc fail\r\n");
- goto ERROR;
- }
- memset(hComponent->functions, 0, sizeof(SF_COMPONENT_FUNCTIONS));
- sf_get_component_functions(hComponent->functions, hComponent->soHandle);
- // Init VPU log
- if (hComponent->functions->InitLog && hComponent->functions->SetMaxLogLevel)
- {
- hComponent->functions->InitLog();
- strDebugLevel = getenv("VPU_DEBUG");
- if (strDebugLevel)
- {
- debugLevel = atoi(strDebugLevel);
- if (debugLevel >=0)
- {
- hComponent->functions->SetMaxLogLevel(debugLevel);
- }
- }
- }
- if (strstr(hComponent->componentName, "sf.enc") != NULL)
- {
- hComponent->testConfig = malloc(sizeof(TestEncConfig));
- if (hComponent->testConfig == NULL)
- {
- ret = OMX_ErrorInsufficientResources;
- LOG(SF_LOG_ERR, "malloc fail\r\n");
- goto ERROR;
- }
- hComponent->lsnCtx = malloc(sizeof(EncListenerContext));
- if (hComponent->lsnCtx == NULL)
- {
- ret = OMX_ErrorInsufficientResources;
- LOG(SF_LOG_ERR, "malloc fail\r\n");
- goto ERROR;
- }
- memset(hComponent->testConfig, 0, sizeof(TestEncConfig));
- memset(hComponent->lsnCtx, 0, sizeof(EncListenerContext));
- hComponent->functions->SetDefaultEncTestConfig(hComponent->testConfig);
- }
- else if (strstr(hComponent->componentName, "sf.dec") != NULL)
- {
- hComponent->testConfig = malloc(sizeof(TestDecConfig));
- if (hComponent->testConfig == NULL)
- {
- ret = OMX_ErrorInsufficientResources;
- LOG(SF_LOG_ERR, "malloc fail\r\n");
- goto ERROR;
- }
- hComponent->lsnCtx = malloc(sizeof(DecListenerContext));
- if (hComponent->lsnCtx == NULL)
- {
- ret = OMX_ErrorInsufficientResources;
- LOG(SF_LOG_ERR, "malloc fail\r\n");
- goto ERROR;
- }
- memset(hComponent->testConfig, 0, sizeof(TestDecConfig));
- memset(hComponent->lsnCtx, 0, sizeof(DecListenerContext));
- hComponent->functions->SetDefaultDecTestConfig(hComponent->testConfig);
- }
- else
- {
- ret = OMX_ErrorBadParameter;
- LOG(SF_LOG_ERR, "unknown component!\r\n");
- goto ERROR;
- }
- hComponent->config = malloc(sizeof(CNMComponentConfig));
- if (hComponent->config == NULL)
- {
- ret = OMX_ErrorInsufficientResources;
- LOG(SF_LOG_ERR, "malloc fail\r\n");
- goto ERROR;
- }
- memset(hComponent->config, 0, sizeof(CNMComponentConfig));
- hComponent->pOMXComponent->pComponentPrivate = hComponent;
- for (int i = 0; i < 2; i++)
- {
- OMX_PARAM_PORTDEFINITIONTYPE *pPortDefinition = &hComponent->portDefinition[i];
- INIT_SET_SIZE_VERSION(pPortDefinition, OMX_PARAM_PORTDEFINITIONTYPE);
- pPortDefinition->nPortIndex = i;
- pPortDefinition->nBufferCountActual = 5;
- pPortDefinition->nBufferCountMin = 1;
- pPortDefinition->nBufferSize = 0;
- pPortDefinition->eDomain = OMX_PortDomainVideo;
- pPortDefinition->format.video.nFrameWidth = DEFAULT_FRAME_WIDTH;
- pPortDefinition->format.video.nFrameHeight = DEFAULT_FRAME_HEIGHT;
- pPortDefinition->format.video.nStride = DEFAULT_FRAME_WIDTH;
- pPortDefinition->format.video.nSliceHeight = DEFAULT_FRAME_HEIGHT;
- pPortDefinition->format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
- pPortDefinition->format.video.cMIMEType = malloc(OMX_MAX_STRINGNAME_SIZE);
- if (pPortDefinition->format.video.cMIMEType == NULL)
- {
- ret = OMX_ErrorInsufficientResources;
- free(pPortDefinition->format.video.cMIMEType);
- pPortDefinition->format.video.cMIMEType = NULL;
- LOG(SF_LOG_ERR, "malloc fail\r\n");
- goto ERROR;
- }
- memset(pPortDefinition->format.video.cMIMEType, 0, OMX_MAX_STRINGNAME_SIZE);
- pPortDefinition->format.video.pNativeRender = 0;
- pPortDefinition->format.video.bFlagErrorConcealment = OMX_FALSE;
- pPortDefinition->format.video.eColorFormat = OMX_COLOR_FormatUnused;
- pPortDefinition->bEnabled = OMX_TRUE;
- }
- hComponent->portDefinition[0].eDir = OMX_DirInput;
- hComponent->portDefinition[0].nBufferSize = DEFAULT_VIDEO_INPUT_BUFFER_SIZE;
- strcpy(hComponent->portDefinition[1].format.video.cMIMEType, "raw/video");
- hComponent->portDefinition[1].format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
- hComponent->portDefinition[1].eDir = OMX_DirOutput;
- hComponent->portDefinition[1].nBufferSize = DEFAULT_VIDEO_OUTPUT_BUFFER_SIZE;
- memset(hComponent->pBufferArray, 0, sizeof(hComponent->pBufferArray));
- FunctionOut();
- EXIT:
- return ret;
- ERROR:
- if (hComponent->pOMXComponent)
- {
- free(hComponent->pOMXComponent);
- hComponent->pOMXComponent = NULL;
- }
- if (hComponent->functions)
- {
- free(hComponent->functions);
- hComponent->functions = NULL;
- }
- if (hComponent->testConfig)
- {
- free(hComponent->testConfig);
- hComponent->testConfig = NULL;
- }
- if (hComponent->lsnCtx)
- {
- free(hComponent->lsnCtx);
- hComponent->lsnCtx = NULL;
- }
- if (hComponent->config)
- {
- free(hComponent->config);
- hComponent->config = NULL;
- }
- return ret;
- }
|