mfxStatus ParseInputString(msdk_char* strInput[], mfxU8 nArgNum, sInputParams* pParams) { if (1 == nArgNum) { PrintHelp(strInput[0], NULL); return MFX_ERR_UNSUPPORTED; } MSDK_CHECK_POINTER(pParams, MFX_ERR_NULL_PTR); msdk_opt_read(MSDK_CPU_ROTATE_PLUGIN, pParams->strPluginDLLPath); // default implementation pParams->bUseHWLib = true; pParams->isV4L2InputEnabled = false; pParams->nNumFrames = 0; #if defined (ENABLE_V4L2_SUPPORT) pParams->MipiPort = -1; pParams->MipiMode = NONE; pParams->v4l2Format = NO_FORMAT; #endif // parse command line parameters for (mfxU8 i = 1; i < nArgNum; i++) { MSDK_CHECK_POINTER(strInput[i], MFX_ERR_NULL_PTR); if (MSDK_CHAR('-') != strInput[i][0]) { mfxStatus sts = StrFormatToCodecFormatFourCC(strInput[i], pParams->CodecId); if (sts != MFX_ERR_NONE) { PrintHelp(strInput[0], MSDK_STRING("Unknown codec")); return MFX_ERR_UNSUPPORTED; } if (!IsEncodeCodecSupported(pParams->CodecId)) { PrintHelp(strInput[0], MSDK_STRING("Unsupported codec")); return MFX_ERR_UNSUPPORTED; } if (pParams->CodecId == CODEC_MVC) { pParams->CodecId = MFX_CODEC_AVC; pParams->MVC_flags |= MVC_ENABLED; } continue; } // process multi-character options if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-dstw"))) { VAL_CHECK(i+1 >= nArgNum, i, strInput[i]); if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nDstWidth)) { PrintHelp(strInput[0], MSDK_STRING("Destination picture Width is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-dsth"))) { VAL_CHECK(i+1 >= nArgNum, i, strInput[i]); if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nDstHeight)) { PrintHelp(strInput[0], MSDK_STRING("Destination picture Height is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-sw"))) { pParams->bUseHWLib = false; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-hw"))) { pParams->bUseHWLib = true; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-yuy2"))) { #if defined (ENABLE_V4L2_SUPPORT) pParams->v4l2Format = YUY2; #endif pParams->ColorFormat = MFX_FOURCC_YUY2; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-nv12"))) { pParams->ColorFormat = MFX_FOURCC_NV12; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-tff"))) { pParams->nPicStruct = MFX_PICSTRUCT_FIELD_TFF; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-bff"))) { pParams->nPicStruct = MFX_PICSTRUCT_FIELD_BFF; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-bref"))) { pParams->nBRefType = MFX_B_REF_PYRAMID; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-nobref"))) { pParams->nBRefType = MFX_B_REF_OFF; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-idr_interval"))) { if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nIdrInterval)) { PrintHelp(strInput[0], MSDK_STRING("IdrInterval is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-angle"))) { VAL_CHECK(i+1 >= nArgNum, i, strInput[i]); if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nRotationAngle)) { PrintHelp(strInput[0], MSDK_STRING("Rotation Angle is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-opencl"))) { msdk_opt_read(MSDK_OCL_ROTATE_PLUGIN, pParams->strPluginDLLPath); pParams->nRotationAngle = 180; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-viewoutput"))) { if (!(MVC_ENABLED & pParams->MVC_flags)) { PrintHelp(strInput[0], MSDK_STRING("-viewoutput option is supported only when mvc codec specified")); return MFX_ERR_UNSUPPORTED; } pParams->MVC_flags |= MVC_VIEWOUTPUT; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-la"))) { pParams->nRateControlMethod = MFX_RATECONTROL_LA; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-lad"))) { VAL_CHECK(i+1 >= nArgNum, i, strInput[i]); pParams->nRateControlMethod = MFX_RATECONTROL_LA; if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nLADepth)) { PrintHelp(strInput[0], MSDK_STRING("Look Ahead Depth is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-mss"))) { VAL_CHECK(i+1 >= nArgNum, i, strInput[i]); if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nMaxSliceSize)) { PrintHelp(strInput[0], MSDK_STRING("MaxSliceSize is invalid")); return MFX_ERR_UNSUPPORTED; } } #if D3D_SURFACES_SUPPORT else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-d3d"))) { pParams->memType = D3D9_MEMORY; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-d3d11"))) { pParams->memType = D3D11_MEMORY; } #endif #ifdef LIBVA_SUPPORT else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-vaapi"))) { pParams->memType = D3D9_MEMORY; } #endif else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-async"))) { VAL_CHECK(i+1 >= nArgNum, i, strInput[i]); if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nAsyncDepth)) { PrintHelp(strInput[0], MSDK_STRING("Async Depth is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-gpucopy::on"))) { pParams->gpuCopy = MFX_GPUCOPY_ON; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-gpucopy::off"))) { pParams->gpuCopy = MFX_GPUCOPY_OFF; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-cqp"))) { pParams->nRateControlMethod = MFX_RATECONTROL_CQP; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-qpi"))) { VAL_CHECK(i+1 >= nArgNum, i, strInput[i]); if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nQPI)) { PrintHelp(strInput[0], MSDK_STRING("Quantizer for I frames is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-qpp"))) { VAL_CHECK(i+1 >= nArgNum, i, strInput[i]); if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nQPP)) { PrintHelp(strInput[0], MSDK_STRING("Quantizer for P frames is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-qpb"))) { VAL_CHECK(i+1 >= nArgNum, i, strInput[i]); if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nQPB)) { PrintHelp(strInput[0], MSDK_STRING("Quantizer for B frames is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-qsv-ff"))) { pParams->enableQSVFF=true; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-num_slice"))) { VAL_CHECK(i+1 >= nArgNum, i, strInput[i]); if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nNumSlice)) { PrintHelp(strInput[0], MSDK_STRING("Number of slices is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-path"))) { i++; #if defined(_WIN32) || defined(_WIN64) msdk_char wchar[MSDK_MAX_FILENAME_LEN]; msdk_opt_read(strInput[i], wchar); std::wstring wstr(wchar); std::string str(wstr.begin(), wstr.end()); strcpy_s(pParams->pluginParams.strPluginPath, str.c_str()); #else msdk_opt_read(strInput[i], pParams->pluginParams.strPluginPath); #endif pParams->pluginParams.type = MFX_PLUGINLOAD_TYPE_FILE; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-re"))) { pParams->UseRegionEncode = true; } MOD_ENC_PARSE_INPUT #if defined (ENABLE_V4L2_SUPPORT) else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-d"))) { VAL_CHECK(i+1 >= nArgNum, i, strInput[i]); if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->DeviceName)) { PrintHelp(strInput[0], MSDK_STRING("Device name is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-uyvy"))) { pParams->v4l2Format = UYVY; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-p"))) { VAL_CHECK(i+1 >= nArgNum, i, strInput[i]); if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->MipiPort)) { PrintHelp(strInput[0], MSDK_STRING("Mipi-port is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-m"))) { VAL_CHECK(i+1 >= nArgNum, i, strInput[i]); if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->MipiModeName)) { PrintHelp(strInput[0], MSDK_STRING("Device name is invalid")); return MFX_ERR_UNSUPPORTED; } if(strcasecmp(pParams->MipiModeName,"STILL") == 0) pParams->MipiMode = STILL; else if(strcasecmp(pParams->MipiModeName,"VIDEO") == 0) pParams->MipiMode = VIDEO; else if(strcasecmp(pParams->MipiModeName,"PREVIEW") == 0) pParams->MipiMode = PREVIEW; else if(strcasecmp(pParams->MipiModeName,"CONTINUOUS") == 0) pParams->MipiMode = CONTINUOUS; else pParams->MipiMode = NONE; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-i::v4l2"))) { pParams->isV4L2InputEnabled = true; } #endif else // 1-character options { switch (strInput[i][1]) { case MSDK_CHAR('u'): if (++i < nArgNum) { pParams->nTargetUsage = StrToTargetUsage(strInput[i]); } else { msdk_printf(MSDK_STRING("error: option '-u' expects an argument\n")); } break; case MSDK_CHAR('w'): if (++i < nArgNum) { if (MFX_ERR_NONE != msdk_opt_read(strInput[i], pParams->nWidth)) { PrintHelp(strInput[0], MSDK_STRING("Width is invalid")); return MFX_ERR_UNSUPPORTED; } } else { msdk_printf(MSDK_STRING("error: option '-w' expects an argument\n")); } break; case MSDK_CHAR('h'): if (++i < nArgNum) { if (MFX_ERR_NONE != msdk_opt_read(strInput[i], pParams->nHeight)) { PrintHelp(strInput[0], MSDK_STRING("Height is invalid")); return MFX_ERR_UNSUPPORTED; } } else { msdk_printf(MSDK_STRING("error: option '-h' expects an argument\n")); } break; case MSDK_CHAR('f'): if (++i < nArgNum) { if (MFX_ERR_NONE != msdk_opt_read(strInput[i], pParams->dFrameRate)) { PrintHelp(strInput[0], MSDK_STRING("Frame Rate is invalid")); return MFX_ERR_UNSUPPORTED; } } else { msdk_printf(MSDK_STRING("error: option '-f' expects an argument\n")); } break; case MSDK_CHAR('n'): if (++i < nArgNum) { if (MFX_ERR_NONE != msdk_opt_read(strInput[i], pParams->nNumFrames)) { PrintHelp(strInput[0], MSDK_STRING("Number of frames to process is invalid")); return MFX_ERR_UNSUPPORTED; } } else { msdk_printf(MSDK_STRING("error: option '-n' expects an argument\n")); } break; case MSDK_CHAR('b'): if (++i < nArgNum) { if (MFX_ERR_NONE != msdk_opt_read(strInput[i], pParams->nBitRate)) { PrintHelp(strInput[0], MSDK_STRING("Bit Rate is invalid")); return MFX_ERR_UNSUPPORTED; } } else { msdk_printf(MSDK_STRING("error: option '-b' expects an argument\n")); } break; case MSDK_CHAR('x'): if (++i < nArgNum) { if (MFX_ERR_NONE != msdk_opt_read(strInput[i], pParams->nNumRefFrame)) { PrintHelp(strInput[0], MSDK_STRING("Ref Num is invalid")); return MFX_ERR_UNSUPPORTED; } } else { msdk_printf(MSDK_STRING("error: option '-x' expects an argument\n")); } break; case MSDK_CHAR('g'): if (++i < nArgNum) { if (MFX_ERR_NONE != msdk_opt_read(strInput[i], pParams->nGopPicSize)) { PrintHelp(strInput[0], MSDK_STRING("Gop Size is invalid")); return MFX_ERR_UNSUPPORTED; } } else { msdk_printf(MSDK_STRING("error: option '-g' expects an argument\n")); } break; case MSDK_CHAR('r'): if (++i < nArgNum) { if (MFX_ERR_NONE != msdk_opt_read(strInput[i], pParams->nGopRefDist)) { PrintHelp(strInput[0], MSDK_STRING("Ref Dist is invalid")); return MFX_ERR_UNSUPPORTED; } } else { msdk_printf(MSDK_STRING("error: option '-r' expects an argument\n")); } break; case MSDK_CHAR('i'): if (++i < nArgNum) { msdk_opt_read(strInput[i], pParams->strSrcFile); if (MVC_ENABLED & pParams->MVC_flags) { pParams->srcFileBuff.push_back(strInput[i]); } } else { msdk_printf(MSDK_STRING("error: option '-i' expects an argument\n")); } break; case MSDK_CHAR('o'): if (++i < nArgNum) { pParams->dstFileBuff.push_back(strInput[i]); } else { msdk_printf(MSDK_STRING("error: option '-o' expects an argument\n")); } break; case MSDK_CHAR('q'): if (++i < nArgNum) { if (MFX_ERR_NONE != msdk_opt_read(strInput[i], pParams->nQuality)) { PrintHelp(strInput[0], MSDK_STRING("Quality is invalid")); return MFX_ERR_UNSUPPORTED; } } else { msdk_printf(MSDK_STRING("error: option '-q' expects an argument\n")); } break; case MSDK_CHAR('p'): if (++i < nArgNum) { if (MFX_ERR_NONE == ConvertStringToGuid(strInput[i], pParams->pluginParams.pluginGuid)) { pParams->pluginParams.type = MFX_PLUGINLOAD_TYPE_GUID; } else { PrintHelp(strInput[0], MSDK_STRING("Unknown options")); } } else { msdk_printf(MSDK_STRING("error: option '-p' expects an argument\n")); } break; case MSDK_CHAR('?'): PrintHelp(strInput[0], NULL); return MFX_ERR_UNSUPPORTED; default: PrintHelp(strInput[0], MSDK_STRING("Unknown options")); } } } #if defined (ENABLE_V4L2_SUPPORT) if (pParams->isV4L2InputEnabled) { if (0 == msdk_strlen(pParams->DeviceName)) { PrintHelp(strInput[0], MSDK_STRING("Device Name not found")); return MFX_ERR_UNSUPPORTED; } if ((pParams->MipiPort > -1 && pParams->MipiMode == NONE) || (pParams->MipiPort < 0 && pParams->MipiMode != NONE)) { PrintHelp(strInput[0], MSDK_STRING("Invalid Mipi Configuration\n")); return MFX_ERR_UNSUPPORTED; } if (pParams->v4l2Format == NO_FORMAT) { PrintHelp(strInput[0], MSDK_STRING("NO input v4l2 format\n")); return MFX_ERR_UNSUPPORTED; } } #endif // check if all mandatory parameters were set if (0 == msdk_strlen(pParams->strSrcFile) && !pParams->isV4L2InputEnabled) { PrintHelp(strInput[0], MSDK_STRING("Source file name not found")); return MFX_ERR_UNSUPPORTED; }; if (pParams->dstFileBuff.empty()) { PrintHelp(strInput[0], MSDK_STRING("Destination file name not found")); return MFX_ERR_UNSUPPORTED; }; if (0 == pParams->nWidth || 0 == pParams->nHeight) { PrintHelp(strInput[0], MSDK_STRING("-w, -h must be specified")); return MFX_ERR_UNSUPPORTED; } if (MFX_CODEC_MPEG2 != pParams->CodecId && MFX_CODEC_AVC != pParams->CodecId && MFX_CODEC_JPEG != pParams->CodecId && MFX_CODEC_VP8 != pParams->CodecId && MFX_CODEC_HEVC != pParams->CodecId) { PrintHelp(strInput[0], MSDK_STRING("Unknown codec")); return MFX_ERR_UNSUPPORTED; } if (MFX_CODEC_JPEG != pParams->CodecId && pParams->ColorFormat == MFX_FOURCC_YUY2 && !pParams->isV4L2InputEnabled) { PrintHelp(strInput[0], MSDK_STRING("-yuy2 option is supported only for JPEG encoder")); return MFX_ERR_UNSUPPORTED; } // check parameters validity if (pParams->nRotationAngle != 0 && pParams->nRotationAngle != 180) { PrintHelp(strInput[0], MSDK_STRING("Angles other than 180 degrees are not supported.")); return MFX_ERR_UNSUPPORTED; // other than 180 are not supported } if (pParams->nQuality && (MFX_CODEC_JPEG != pParams->CodecId)) { PrintHelp(strInput[0], MSDK_STRING("-q option is supported only for JPEG encoder")); return MFX_ERR_UNSUPPORTED; } if ((pParams->nTargetUsage || pParams->nBitRate) && (MFX_CODEC_JPEG == pParams->CodecId)) { PrintHelp(strInput[0], MSDK_STRING("-u and -b options are supported only for H.264, MPEG2 and MVC encoders. For JPEG encoder use -q")); return MFX_ERR_UNSUPPORTED; } // set default values for optional parameters that were not set or were set incorrectly mfxU32 nviews = (mfxU32)pParams->srcFileBuff.size(); if ((nviews <= 1) || (nviews > 2)) { if (!(MVC_ENABLED & pParams->MVC_flags)) { pParams->numViews = 1; } else { PrintHelp(strInput[0], MSDK_STRING("Only 2 views are supported right now in this sample.")); return MFX_ERR_UNSUPPORTED; } } else { pParams->numViews = nviews; } if (MFX_TARGETUSAGE_BEST_QUALITY != pParams->nTargetUsage && MFX_TARGETUSAGE_BEST_SPEED != pParams->nTargetUsage) { pParams->nTargetUsage = MFX_TARGETUSAGE_BALANCED; } if (pParams->dFrameRate <= 0) { pParams->dFrameRate = 30; } // if no destination picture width or height wasn't specified set it to the source picture size if (pParams->nDstWidth == 0) { pParams->nDstWidth = pParams->nWidth; } if (pParams->nDstHeight == 0) { pParams->nDstHeight = pParams->nHeight; } // calculate default bitrate based on the resolution (a parameter for encoder, so Dst resolution is used) if (pParams->nBitRate == 0) { pParams->nBitRate = CalculateDefaultBitrate(pParams->CodecId, pParams->nTargetUsage, pParams->nDstWidth, pParams->nDstHeight, pParams->dFrameRate); } // if nv12 option wasn't specified we expect input YUV file in YUV420 color format if (!pParams->ColorFormat) { pParams->ColorFormat = MFX_FOURCC_YV12; } if (!pParams->nPicStruct) { pParams->nPicStruct = MFX_PICSTRUCT_PROGRESSIVE; } if ((pParams->nRateControlMethod == MFX_RATECONTROL_LA) && (!pParams->bUseHWLib)) { PrintHelp(strInput[0], MSDK_STRING("Look ahead BRC is supported only with -hw option!")); return MFX_ERR_UNSUPPORTED; } if ((pParams->nMaxSliceSize) && (!pParams->bUseHWLib)) { PrintHelp(strInput[0], MSDK_STRING("MaxSliceSize option is supported only with -hw option!")); return MFX_ERR_UNSUPPORTED; } if ((pParams->nMaxSliceSize) && (pParams->nNumSlice)) { PrintHelp(strInput[0], MSDK_STRING("-mss and -num_slice options are not compatible!")); return MFX_ERR_UNSUPPORTED; } if ((pParams->nRateControlMethod == MFX_RATECONTROL_LA) && (pParams->CodecId != MFX_CODEC_AVC)) { PrintHelp(strInput[0], MSDK_STRING("Look ahead BRC is supported only with H.264 encoder!")); return MFX_ERR_UNSUPPORTED; } if ((pParams->nMaxSliceSize) && (pParams->CodecId != MFX_CODEC_AVC)) { PrintHelp(strInput[0], MSDK_STRING("MaxSliceSize option is supported only with H.264 encoder!")); return MFX_ERR_UNSUPPORTED; } if (pParams->nLADepth && (pParams->nLADepth < 10 || pParams->nLADepth > 100)) { if ((pParams->nLADepth != 1) || (!pParams->nMaxSliceSize)) { PrintHelp(strInput[0], MSDK_STRING("Unsupported value of -lad parameter, must be in range [10, 100] or 1 in case of -mss option!")); return MFX_ERR_UNSUPPORTED; } } // not all options are supported if rotate plugin is enabled if (pParams->nRotationAngle == 180 && ( MFX_PICSTRUCT_PROGRESSIVE != pParams->nPicStruct || pParams->nDstWidth != pParams->nWidth || pParams->nDstHeight != pParams->nHeight || MVC_ENABLED & pParams->MVC_flags || pParams->nRateControlMethod == MFX_RATECONTROL_LA)) { PrintHelp(strInput[0], MSDK_STRING("Some of the command line options are not supported with rotation plugin!")); return MFX_ERR_UNSUPPORTED; } if (pParams->nAsyncDepth == 0) { pParams->nAsyncDepth = 4; //set by default; } // Ignoring user-defined Async Depth for LA if (pParams->nMaxSliceSize) { pParams->nAsyncDepth = 1; } if (pParams->nRateControlMethod == 0) { pParams->nRateControlMethod = MFX_RATECONTROL_CBR; } if(pParams->UseRegionEncode) { if(pParams->CodecId != MFX_CODEC_HEVC) { msdk_printf(MSDK_STRING("Region encode option is compatible with h265(HEVC) encoder only.\nRegion encoding is disabled\n")); pParams->UseRegionEncode=false; } if (pParams->nWidth != pParams->nDstWidth || pParams->nHeight != pParams->nDstHeight || pParams->nRotationAngle!=0) { msdk_printf(MSDK_STRING("Region encode option is not compatible with VPP processing.\nRegion encoding is disabled\n")); pParams->UseRegionEncode=false; } } return MFX_ERR_NONE; }
mfxStatus ParseInputString(msdk_char* strInput[], mfxU8 nArgNum, sInputParams* pParams) { if (1 == nArgNum) { PrintHelp(strInput[0], NULL); return MFX_ERR_UNSUPPORTED; } MSDK_CHECK_POINTER(pParams, MFX_ERR_NULL_PTR); // set default implementation pParams->bUseHWLib = true; #if defined(LIBVA_SUPPORT) pParams->libvaBackend = MFX_LIBVA_DRM; #endif for (mfxU8 i = 1; i < nArgNum; i++) { if (MSDK_CHAR('-') != strInput[i][0]) { mfxStatus sts = StrFormatToCodecFormatFourCC(strInput[i], pParams->videoType); if (sts != MFX_ERR_NONE) { PrintHelp(strInput[0], MSDK_STRING("Unknown codec")); return MFX_ERR_UNSUPPORTED; } if (!IsDecodeCodecSupported(pParams->videoType)) { PrintHelp(strInput[0], MSDK_STRING("Unsupported codec")); return MFX_ERR_UNSUPPORTED; } if (pParams->videoType == CODEC_MVC) { pParams->videoType = MFX_CODEC_AVC; pParams->bIsMVC = true; } continue; } if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-sw"))) { pParams->bUseHWLib = false; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-hw"))) { pParams->bUseHWLib = true; } #if D3D_SURFACES_SUPPORT else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-d3d"))) { pParams->memType = D3D9_MEMORY; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-d3d11"))) { pParams->memType = D3D11_MEMORY; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-r"))) { pParams->mode = MODE_RENDERING; // use d3d9 rendering by default if (SYSTEM_MEMORY == pParams->memType) pParams->memType = D3D9_MEMORY; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-wall"))) { if(i + 6 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -wall key")); return MFX_ERR_UNSUPPORTED; } // use d3d9 rendering by default if (SYSTEM_MEMORY == pParams->memType) pParams->memType = D3D9_MEMORY; pParams->mode = MODE_RENDERING; msdk_opt_read(strInput[++i], pParams->nWallW); msdk_opt_read(strInput[++i], pParams->nWallH); msdk_opt_read(strInput[++i], pParams->nWallCell); msdk_opt_read(strInput[++i], pParams->nWallMonitor); mfxU32 nTitle; msdk_opt_read(strInput[++i], nTitle); pParams->bWallNoTitle = 0 == nTitle; msdk_opt_read(strInput[++i], pParams->nWallTimeout); } #endif #if defined(LIBVA_SUPPORT) else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-vaapi"))) { pParams->memType = D3D9_MEMORY; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-r"))) { pParams->memType = D3D9_MEMORY; pParams->mode = MODE_RENDERING; pParams->libvaBackend = MFX_LIBVA_X11; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-rwld"))) { pParams->memType = D3D9_MEMORY; pParams->mode = MODE_RENDERING; pParams->libvaBackend = MFX_LIBVA_WAYLAND; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-perf"))) { pParams->bPerfMode = true; } else if (0 == msdk_strncmp(strInput[i], MSDK_STRING("-rdrm"), 5)) { pParams->memType = D3D9_MEMORY; pParams->mode = MODE_RENDERING; pParams->libvaBackend = MFX_LIBVA_DRM_MODESET; if (strInput[i][5]) { if (strInput[i][5] != '-') { PrintHelp(strInput[0], MSDK_STRING("unsupported monitor type")); return MFX_ERR_UNSUPPORTED; } pParams->monitorType = getMonitorType(&strInput[i][6]); if (pParams->monitorType >= MFX_MONITOR_MAXNUMBER) { PrintHelp(strInput[0], MSDK_STRING("unsupported monitor type")); return MFX_ERR_UNSUPPORTED; } } else { pParams->monitorType = MFX_MONITOR_AUTO; // that's case of "-rdrm" pure option } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-window"))) { if(i +4 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -window key")); return MFX_ERR_UNSUPPORTED; } msdk_opt_read(strInput[++i], pParams->nRenderWinX); msdk_opt_read(strInput[++i], pParams->nRenderWinY); msdk_opt_read(strInput[++i], pParams->Width); msdk_opt_read(strInput[++i], pParams->Height); if (0 == pParams->Width) pParams->Width = 320; if (0 == pParams->Height) pParams->Height = 240; pParams->bRenderWin = true; } #endif else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-low_latency"))) { switch (pParams->videoType) { case MFX_CODEC_HEVC: case MFX_CODEC_AVC: case MFX_CODEC_JPEG: { pParams->bLowLat = true; if (!pParams->bIsMVC) break; } default: { PrintHelp(strInput[0], MSDK_STRING("-low_latency mode is suppoted only for H.264 and JPEG codecs")); return MFX_ERR_UNSUPPORTED; } } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-jpeg_rotate"))) { if(MFX_CODEC_JPEG != pParams->videoType) return MFX_ERR_UNSUPPORTED; if(i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -jpeg_rotate key")); return MFX_ERR_UNSUPPORTED; } msdk_opt_read(strInput[++i], pParams->nRotation); if((pParams->nRotation != 90)&&(pParams->nRotation != 180)&&(pParams->nRotation != 270)) { PrintHelp(strInput[0], MSDK_STRING("-jpeg_rotate is supported only for 90, 180 and 270 angles")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-calc_latency"))) { switch (pParams->videoType) { case MFX_CODEC_HEVC: case MFX_CODEC_AVC: case MFX_CODEC_JPEG: { pParams->bCalLat = true; if (!pParams->bIsMVC) break; } default: { PrintHelp(strInput[0], MSDK_STRING("-calc_latency mode is suppoted only for H.264 and JPEG codecs")); return MFX_ERR_UNSUPPORTED; } } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-async"))) { if(i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -async key")); return MFX_ERR_UNSUPPORTED; } if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nAsyncDepth)) { PrintHelp(strInput[0], MSDK_STRING("async is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-di"))) { if(i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -di key")); return MFX_ERR_UNSUPPORTED; } msdk_char diMode[4] = {}; if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], diMode)) { PrintHelp(strInput[0], MSDK_STRING("deinterlace value is not set")); return MFX_ERR_UNSUPPORTED; } if (0 == msdk_strcmp(diMode, MSDK_CHAR("bob"))) { pParams->eDeinterlace = MFX_DEINTERLACING_BOB; } else if (0 == msdk_strcmp(diMode, MSDK_CHAR("adi"))) { pParams->eDeinterlace = MFX_DEINTERLACING_ADVANCED; } else { PrintHelp(strInput[0], MSDK_STRING("deinterlace value is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-no_gpu_copy"))) { pParams->gpuCopy = MFX_GPUCOPY_OFF; } #if !defined(_WIN32) && !defined(_WIN64) else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-threads_num"))) { if(i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -threads_num key")); return MFX_ERR_UNSUPPORTED; } if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nThreadsNum)) { PrintHelp(strInput[0], MSDK_STRING("threads_num is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-threads_schedtype"))) { if(i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -threads_schedtype key")); return MFX_ERR_UNSUPPORTED; } if (MFX_ERR_NONE != msdk_thread_get_schedtype(strInput[++i], pParams->SchedulingType)) { PrintHelp(strInput[0], MSDK_STRING("threads_schedtype is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-threads_priority"))) { if(i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -threads_priority key")); return MFX_ERR_UNSUPPORTED; } if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->Priority)) { PrintHelp(strInput[0], MSDK_STRING("threads_priority is invalid")); return MFX_ERR_UNSUPPORTED; } } #endif // #if !defined(_WIN32) && !defined(_WIN64) else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-f"))) { if(i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -f key")); return MFX_ERR_UNSUPPORTED; } if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nMaxFPS)) { PrintHelp(strInput[0], MSDK_STRING("rendering frame rate is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-scr:w"))) { if (i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -scr:w key")); return MFX_ERR_UNSUPPORTED; } if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->scrWidth)) { PrintHelp(strInput[0], MSDK_STRING("screen width rate is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-scr:h"))) { if (i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -scr:h key")); return MFX_ERR_UNSUPPORTED; } if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->scrHeight)) { PrintHelp(strInput[0], MSDK_STRING("screen height is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-w"))) { if (i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -w key")); return MFX_ERR_UNSUPPORTED; } if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->Width)) { PrintHelp(strInput[0], MSDK_STRING("width is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-h"))) { if (i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -h key")); return MFX_ERR_UNSUPPORTED; } if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->Height)) { PrintHelp(strInput[0], MSDK_STRING("height is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-n"))) { if(i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -n key")); return MFX_ERR_UNSUPPORTED; } if (MFX_ERR_NONE != msdk_opt_read(strInput[++i], pParams->nFrames)) { PrintHelp(strInput[0], MSDK_STRING("rendering frame rate is invalid")); return MFX_ERR_UNSUPPORTED; } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-i420"))) { pParams->fourcc = MFX_FOURCC_NV12; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-rgb4"))) { pParams->fourcc = MFX_FOURCC_RGB4; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-p010"))) { pParams->fourcc = MFX_FOURCC_P010; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-a2rgb10"))) { pParams->fourcc = MFX_FOURCC_A2RGB10; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-path"))) { i++; #if defined(_WIN32) || defined(_WIN64) msdk_char wchar[MSDK_MAX_FILENAME_LEN]; msdk_opt_read(strInput[i], wchar); std::wstring wstr(wchar); std::string str(wstr.begin(), wstr.end()); strcpy_s(pParams->pluginParams.strPluginPath, str.c_str()); #else msdk_opt_read(strInput[i], pParams->pluginParams.strPluginPath); #endif pParams->pluginParams.type = MFX_PLUGINLOAD_TYPE_FILE; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-i:null"))) { ; } else // 1-character options { switch (strInput[i][1]) { case MSDK_CHAR('p'): if (++i < nArgNum) { if (MFX_ERR_NONE == ConvertStringToGuid(strInput[i], pParams->pluginParams.pluginGuid)) { pParams->pluginParams.type = MFX_PLUGINLOAD_TYPE_GUID; } else { PrintHelp(strInput[0], MSDK_STRING("Unknown options")); } } else { msdk_printf(MSDK_STRING("error: option '-p' expects an argument\n")); } break; case MSDK_CHAR('i'): if (++i < nArgNum) { msdk_opt_read(strInput[i], pParams->strSrcFile); } else { msdk_printf(MSDK_STRING("error: option '-i' expects an argument\n")); } break; case MSDK_CHAR('o'): if (++i < nArgNum) { pParams->mode = MODE_FILE_DUMP; msdk_opt_read(strInput[i], pParams->strDstFile); } else { msdk_printf(MSDK_STRING("error: option '-o' expects an argument\n")); } break; case MSDK_CHAR('?'): PrintHelp(strInput[0], NULL); return MFX_ERR_UNSUPPORTED; default: { std::basic_stringstream<msdk_char> stream; stream << MSDK_STRING("Unknown option: ") << strInput[i]; PrintHelp(strInput[0], stream.str().c_str()); return MFX_ERR_UNSUPPORTED; } } } } if (0 == msdk_strlen(pParams->strSrcFile) && MFX_CODEC_CAPTURE != pParams->videoType) { msdk_printf(MSDK_STRING("error: source file name not found")); return MFX_ERR_UNSUPPORTED; } if (MFX_CODEC_CAPTURE == pParams->videoType) { if (!pParams->scrWidth || !pParams->scrHeight) { msdk_printf(MSDK_STRING("error: for screen capture, width and height must be specified manually (-w and -h)")); return MFX_ERR_UNSUPPORTED; } } else if (pParams->scrWidth || pParams->scrHeight) { msdk_printf(MSDK_STRING("error: width and height parameters are supported only by screen capture decoder")); return MFX_ERR_UNSUPPORTED; } if ((pParams->mode == MODE_FILE_DUMP) && (0 == msdk_strlen(pParams->strDstFile))) { msdk_printf(MSDK_STRING("error: destination file name not found")); return MFX_ERR_UNSUPPORTED; } if (MFX_CODEC_MPEG2 != pParams->videoType && MFX_CODEC_AVC != pParams->videoType && MFX_CODEC_HEVC != pParams->videoType && MFX_CODEC_VC1 != pParams->videoType && MFX_CODEC_JPEG != pParams->videoType && MFX_CODEC_CAPTURE != pParams->videoType && CODEC_VP8 != pParams->videoType) { PrintHelp(strInput[0], MSDK_STRING("Unknown codec")); return MFX_ERR_UNSUPPORTED; } if (pParams->nAsyncDepth == 0) { pParams->nAsyncDepth = 4; //set by default; } return MFX_ERR_NONE; }
mfxStatus ParseInputString(msdk_char* strInput[], mfxU8 nArgNum, sInputParams* pParams) { if (1 == nArgNum) { PrintHelp(strInput[0], NULL); return MFX_ERR_UNSUPPORTED; } sResetParams resPar; MSDK_CHECK_POINTER(pParams, MFX_ERR_NULL_PTR); for (mfxU8 i = 1; i < nArgNum; i++) { // multi-character options if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-plugin_version"))) { msdk_opt_read(strInput[++i], pParams->CameraPluginVersion); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-accel"))) { if(i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -accel key")); return MFX_ERR_UNSUPPORTED; } if (0 == msdk_strcmp(strInput[i+1], MSDK_STRING("d3d9"))) { pParams->accelType = D3D9; } else if (0 == msdk_strcmp(strInput[i+1], MSDK_STRING("d3d11"))) { pParams->accelType = D3D11; } else { PrintHelp(strInput[0], MSDK_STRING("Unsupported value for -accel key")); return MFX_ERR_UNSUPPORTED; } i++; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-imem"))) { if(i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -imem key")); return MFX_ERR_UNSUPPORTED; } if (0 == msdk_strcmp(strInput[i+1], MSDK_STRING("system"))) { pParams->memTypeIn = SYSTEM; } else if (0 == msdk_strcmp(strInput[i+1], MSDK_STRING("video"))) { pParams->memTypeIn = VIDEO; } else { PrintHelp(strInput[0], MSDK_STRING("Unsupported value for -imem key")); return MFX_ERR_UNSUPPORTED; } i++; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-omem"))) { if(i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -omem key")); return MFX_ERR_UNSUPPORTED; } if (0 == msdk_strcmp(strInput[i+1], MSDK_STRING("system"))) { pParams->memTypeOut = SYSTEM; } else if (0 == msdk_strcmp(strInput[i+1], MSDK_STRING("video"))) { pParams->memTypeOut = VIDEO; } else { PrintHelp(strInput[0], MSDK_STRING("Unsupported value for -omem key")); return MFX_ERR_UNSUPPORTED; } i++; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-r")) || 0 == msdk_strcmp(strInput[i], MSDK_STRING("-render"))) { pParams->bRendering = true; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-a")) || 0 == msdk_strcmp(strInput[i], MSDK_STRING("-asyncDepth"))) { msdk_opt_read(strInput[++i], pParams->asyncDepth); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-n")) || 0 == msdk_strcmp(strInput[i], MSDK_STRING("-numFramesToProcess"))) { msdk_opt_read(strInput[++i], pParams->nFramesToProceed); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-ng")) || 0 == msdk_strcmp(strInput[i], MSDK_STRING("-noGamma"))) { pParams->bGamma = false; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-3DLUT_gamma"))) { pParams->b3DLUTGamma = false; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-bdn")) || 0 == msdk_strcmp(strInput[i], MSDK_STRING("-bayerDenoise"))) { if(i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -bdn key")); return MFX_ERR_UNSUPPORTED; } pParams->bBayerDenoise = true; msdk_opt_read(strInput[++i], pParams->denoiseThreshold); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-bbl")) || 0 == msdk_strcmp(strInput[i], MSDK_STRING("-bayerBlackLevel"))) { if(i + 4 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -bbl key")); return MFX_ERR_UNSUPPORTED; } pParams->bBlackLevel = true; msdk_opt_read(strInput[++i], pParams->black_level_B); msdk_opt_read(strInput[++i], pParams->black_level_G0); msdk_opt_read(strInput[++i], pParams->black_level_G1); msdk_opt_read(strInput[++i], pParams->black_level_R); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-hot_pixel"))) { if(i + 2 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -hot_pixel key")); return MFX_ERR_UNSUPPORTED; } pParams->bHP = true; msdk_opt_read(strInput[++i], pParams->hp_diff); msdk_opt_read(strInput[++i], pParams->hp_num); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-bwb")) || 0 == msdk_strcmp(strInput[i], MSDK_STRING("-bayerWhiteBalance"))) { if(i + 4 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -bwb key")); return MFX_ERR_UNSUPPORTED; } pParams->bWhiteBalance = true; msdk_opt_read(strInput[++i], pParams->white_balance_B); msdk_opt_read(strInput[++i], pParams->white_balance_G0); msdk_opt_read(strInput[++i], pParams->white_balance_G1); msdk_opt_read(strInput[++i], pParams->white_balance_R); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-lens")) ) { if(i + 4 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -lens key")); return MFX_ERR_UNSUPPORTED; } pParams->bLens = true; msdk_opt_read(strInput[++i], pParams->lens_aR); msdk_opt_read(strInput[++i], pParams->lens_bR); msdk_opt_read(strInput[++i], pParams->lens_cR); msdk_opt_read(strInput[++i], pParams->lens_dR); pParams->lens_aB = pParams->lens_aG = pParams->lens_aR; pParams->lens_bB = pParams->lens_bG = pParams->lens_bR; pParams->lens_cB = pParams->lens_cG = pParams->lens_cR; pParams->lens_dB = pParams->lens_dG = pParams->lens_dR; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-chroma_aberration")) ) { if(i + 12 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -chroma_aberration key")); return MFX_ERR_UNSUPPORTED; } pParams->bLens = true; msdk_opt_read(strInput[++i], pParams->lens_aR); msdk_opt_read(strInput[++i], pParams->lens_bR); msdk_opt_read(strInput[++i], pParams->lens_cR); msdk_opt_read(strInput[++i], pParams->lens_dR); msdk_opt_read(strInput[++i], pParams->lens_aB); msdk_opt_read(strInput[++i], pParams->lens_bB); msdk_opt_read(strInput[++i], pParams->lens_cB); msdk_opt_read(strInput[++i], pParams->lens_dB); msdk_opt_read(strInput[++i], pParams->lens_aG); msdk_opt_read(strInput[++i], pParams->lens_bG); msdk_opt_read(strInput[++i], pParams->lens_cG); msdk_opt_read(strInput[++i], pParams->lens_dG); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-ccm"))) { if(i + 9 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -ccm key.")); return MFX_ERR_UNSUPPORTED; } pParams->bCCM = true; for(int k = 0; k < 3; k++) for (int z = 0; z < 3; z++) msdk_opt_read(strInput[++i], pParams->CCM[k][z]); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-gamma_points"))) { if(i + 64 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("There should be 64 points provided.")); return MFX_ERR_UNSUPPORTED; } for(int k = 0; k < 64; k++) msdk_opt_read(strInput[++i], pParams->gamma_point[k]); pParams->bExternalGammaLUT = true; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-gamma_corrected"))) { if(i + 64 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("There should be 64 points provided.")); return MFX_ERR_UNSUPPORTED; } for(int k = 0; k < 64; k++) msdk_opt_read(strInput[++i], pParams->gamma_corrected[k]); pParams->bExternalGammaLUT = true; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-pd")) || 0 == msdk_strcmp(strInput[i], MSDK_STRING("-padding"))) { pParams->bDoPadding = true; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-vignette"))) { pParams->bVignette = true; msdk_strcopy(pParams->strVignetteMaskFile, strInput[++i]); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-i"))) { msdk_strcopy(pParams->strSrcFile, strInput[++i]); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-o"))) { msdk_strcopy(pParams->strDstFile, strInput[++i]); pParams->bOutput = true; if (i + 1 < nArgNum) { int n; if (msdk_opt_read(strInput[++i], n) == MFX_ERR_NONE) { pParams->maxNumBmpFiles = n; } } } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-f")) || 0 == msdk_strcmp(strInput[i], MSDK_STRING("-format"))) { i++; if (0 == msdk_strcmp(strInput[i], MSDK_STRING("bggr"))) pParams->bayerType = MFX_CAM_BAYER_BGGR; else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("rggb"))) pParams->bayerType = MFX_CAM_BAYER_RGGB; else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("grbg"))) pParams->bayerType = MFX_CAM_BAYER_GRBG; else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("gbrg"))) pParams->bayerType = MFX_CAM_BAYER_GBRG; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-b")) || 0 == msdk_strcmp(strInput[i], MSDK_STRING("-bitDepth"))) { msdk_opt_read(strInput[++i], pParams->bitDepth); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-of")) || 0 == msdk_strcmp(strInput[i], MSDK_STRING("-outFormat"))) { i++; if (0 == msdk_strcmp(strInput[i], MSDK_STRING("argb16")) || 0 == msdk_strcmp(strInput[i], MSDK_STRING("16"))) pParams->frameInfo[VPP_OUT].FourCC = MFX_FOURCC_ARGB16; else pParams->frameInfo[VPP_OUT].FourCC = MFX_FOURCC_RGB4; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-w")) || 0 == msdk_strcmp(strInput[i], MSDK_STRING("-width"))) { msdk_opt_read(strInput[++i], pParams->frameInfo[VPP_IN].nWidth); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-3dlut"))) { pParams->b3DLUT = true; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-h")) || 0 == msdk_strcmp(strInput[i], MSDK_STRING("-height"))) { msdk_opt_read(strInput[++i], pParams->frameInfo[VPP_IN].nHeight); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-cropW"))) { msdk_opt_read(strInput[++i], pParams->frameInfo[VPP_IN].CropW); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-cropH"))) { msdk_opt_read(strInput[++i], pParams->frameInfo[VPP_IN].CropH); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-cropX"))) { msdk_opt_read(strInput[++i], pParams->frameInfo[VPP_IN].CropX); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-cropY"))) { msdk_opt_read(strInput[++i], pParams->frameInfo[VPP_IN].CropY); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-alpha"))) { msdk_opt_read(strInput[++i], pParams->alphaValue); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-reset"))) { resPar.bayerType = pParams->bayerType; msdk_strcopy(resPar.strSrcFile, pParams->strSrcFile); msdk_strcopy(resPar.strDstFile, pParams->strDstFile); resPar.width = pParams->frameInfo[VPP_IN].nWidth; resPar.height = pParams->frameInfo[VPP_IN].nHeight; resPar.bHP = pParams->bHP; resPar.hp_diff = pParams->hp_diff; resPar.hp_num = pParams->hp_num; resPar.bBlackLevel = pParams->bBlackLevel; resPar.black_level_B = pParams->black_level_B; resPar.black_level_G0 = pParams->black_level_G0; resPar.black_level_G1 = pParams->black_level_G1; resPar.black_level_R = pParams->black_level_R; i++; for (;i < nArgNum; i++) { if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-f"))) { i++; if (0 == msdk_strcmp(strInput[i], MSDK_STRING("bggr"))) resPar.bayerType = MFX_CAM_BAYER_BGGR; else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("rggb"))) resPar.bayerType = MFX_CAM_BAYER_RGGB; else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("grbg"))) resPar.bayerType = MFX_CAM_BAYER_GRBG; else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("gbrg"))) resPar.bayerType = MFX_CAM_BAYER_GBRG; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-bbl"))) { if(i + 4 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -bbl key")); return MFX_ERR_UNSUPPORTED; } resPar.bBlackLevel = true; msdk_opt_read(strInput[++i], resPar.black_level_B); msdk_opt_read(strInput[++i], resPar.black_level_G0); msdk_opt_read(strInput[++i], resPar.black_level_G1); msdk_opt_read(strInput[++i], resPar.black_level_R); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-hot_pixel"))) { if(i + 2 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -hot_pixel key")); return MFX_ERR_UNSUPPORTED; } resPar.bHP = true; msdk_opt_read(strInput[++i], resPar.hp_diff); msdk_opt_read(strInput[++i], resPar.hp_num); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-bdn"))) { if(i + 1 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -bdn key")); return MFX_ERR_UNSUPPORTED; } resPar.bDenoise = true; msdk_opt_read(strInput[++i], resPar.denoiseThreshold); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-bwb"))) { if(i + 4 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -bwb key")); return MFX_ERR_UNSUPPORTED; } resPar.bWhiteBalance = true; msdk_opt_read(strInput[++i], resPar.white_balance_B); msdk_opt_read(strInput[++i], resPar.white_balance_G0); msdk_opt_read(strInput[++i], resPar.white_balance_G1); msdk_opt_read(strInput[++i], resPar.white_balance_R); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-ccm"))) { if(i + 9 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -ccm key.")); return MFX_ERR_UNSUPPORTED; } resPar.bCCM = true; for(int k = 0; k < 3; k++) for (int z = 0; z < 3; z++) msdk_opt_read(strInput[++i], resPar.CCM[k][z]); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-w"))) { msdk_opt_read(strInput[++i], resPar.width); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-h"))) { msdk_opt_read(strInput[++i], resPar.height); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-cropW"))) { msdk_opt_read(strInput[++i], resPar.cropW); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-cropH"))) { msdk_opt_read(strInput[++i], resPar.cropH); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-cropX"))) { msdk_opt_read(strInput[++i], resPar.cropX); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-cropY"))) { msdk_opt_read(strInput[++i], resPar.cropY); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-vignette"))) { resPar.bVignette = true; msdk_strcopy(resPar.strVignetteMaskFile, strInput[++i]); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-i"))) { msdk_strcopy(resPar.strSrcFile, strInput[++i]); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-o"))) { msdk_strcopy(resPar.strDstFile, strInput[++i]); } else { i--; break; } } pParams->resetParams.push_back(resPar); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-resetInterval"))) { msdk_opt_read(strInput[++i], pParams->resetInterval); } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-?"))) { PrintHelp(strInput[0], NULL); return MFX_ERR_UNSUPPORTED; } else if (0 == msdk_strcmp(strInput[i], MSDK_STRING("-wall"))) { if(i + 7 >= nArgNum) { PrintHelp(strInput[0], MSDK_STRING("Not enough parameters for -wall key")); return MFX_ERR_UNSUPPORTED; } pParams->bRendering = true; msdk_opt_read(strInput[++i], pParams->nWallW); msdk_opt_read(strInput[++i], pParams->nWallH); msdk_opt_read(strInput[++i], pParams->nWallCell); msdk_opt_read(strInput[++i], pParams->nWallMonitor); msdk_opt_read(strInput[++i], pParams->nWallFPS); int nTitle; msdk_opt_read(strInput[++i], nTitle); pParams->bWallNoTitle = 0 == nTitle; msdk_opt_read(strInput[++i], pParams->nWallTimeout); } else // 1-character options { std::basic_stringstream<msdk_char> stream; stream << MSDK_STRING("Unknown option: ") << strInput[i]; PrintHelp(strInput[0], stream.str().c_str()); return MFX_ERR_UNSUPPORTED; } } if (0 == msdk_strlen(pParams->strSrcFile)) { PrintHelp(strInput[0], MSDK_STRING("Source file name not found")); return MFX_ERR_UNSUPPORTED; } if (0 == msdk_strlen(pParams->strDstFile)) { pParams->bOutput = false; } return MFX_ERR_NONE; }