-bool CLIOptions::validateFanout(x265_param *param)
-{
-#define CMP_OPT_FANOUT(opt, param_val)\
- {\
- bErr = 0;\
- p = strstr(paramBuf, opt "=");\
- char* q = strstr(paramBuf, "no-"opt);\
- if (p && sscanf(p, opt "=%d" , &i) && param_val != i)\
- bErr = 1;\
- else if (!param_val && !q)\
- bErr = 1;\
- else if (param_val && (q || !strstr(paramBuf, opt)))\
- bErr = 1;\
- if (bErr)\
- {\
- x265_log(param, X265_LOG_ERROR, "different " opt " setting than given in analysis file (%d vs %d)\n", param_val, i);\
- X265_FREE(paramBuf);\
- return false;\
- }\
- }
-
- char *p = NULL, *paramBuf;
- int i, j;
- uint32_t k , l;
- bool bErr = false;
-
- paramBuf = X265_MALLOC(char, MAXPARAMSIZE);
- if (!paramBuf)
- return false;
-
- fread(paramBuf, 1, MAXPARAMSIZE, this->analysisFile);
-
- /* check whether fanout options are compatible */
- if (strncmp(paramBuf, "#options:", 9))
- {
- x265_log(param, X265_LOG_ERROR, "options list in analysis file is not valid\n");
- X265_FREE(paramBuf);
- return false;
- }
-
- char* buf = strchr(paramBuf, '\n');
- if (!buf)
- {
- x265_log(param, X265_LOG_ERROR, "Malformed analysis file\n");
- X265_FREE(paramBuf);
- return false;
- }
- *buf = '\0';
- fseek(this->analysisFile, (int)strlen(paramBuf) + 1, SEEK_SET);
-
- if (sscanf(paramBuf, "#options: %dx%d", &i, &j) != 2)
- {
- x265_log(param, X265_LOG_ERROR, "Resolution specified in analysis file is not valid\n");
- X265_FREE(paramBuf);
- return false;
- }
- if ((p = strstr(paramBuf, " fps=")) == 0 || sscanf(p, " fps=%u/%u", &k, &l) != 2)
- {
- x265_log(param, X265_LOG_ERROR, "fps specified in analysis file is not valid\n");
- X265_FREE(paramBuf);
- return false;
- }
- if (k != param->fpsNum || l != param->fpsDenom)
- {
- x265_log(param, X265_LOG_ERROR, "fps mismatch than given in analysis file (%u/%u vs %u/%u)\n",
- param->fpsNum, param->fpsDenom, k, l);
- X265_FREE(paramBuf);
- return false;
- }
-
- CMP_OPT_FANOUT("bitdepth", param->internalBitDepth);
- CMP_OPT_FANOUT("weightp", param->bEnableWeightedPred);
- CMP_OPT_FANOUT("bframes", param->bframes);
- CMP_OPT_FANOUT("b-pyramid", param->bBPyramid);
- CMP_OPT_FANOUT("b-adapt", param->bFrameAdaptive);
- CMP_OPT_FANOUT("open-gop", param->bOpenGOP);
- CMP_OPT_FANOUT("keyint", param->keyframeMax);
- CMP_OPT_FANOUT("min-keyint", param->keyframeMin);
- CMP_OPT_FANOUT("scenecut", param->scenecutThreshold);
- CMP_OPT_FANOUT("ctu", (int)param->maxCUSize);
- CMP_OPT_FANOUT("ref", param->maxNumReferences);
- CMP_OPT_FANOUT("rc-lookahead", param->lookaheadDepth);
-
-#undef CMP_OPT_FANOUT
-
- X265_FREE(paramBuf);
- return true;
-}
-
-void CLIOptions::readAnalysisFile(x265_picture* pic, x265_param* p)
-{
- int poc, width, height;
- uint32_t numPart, numCU;
- fread(&width, sizeof(int), 1, this->analysisFile);
- fread(&height, sizeof(int), 1, this->analysisFile);
- fread(&poc, sizeof(int), 1, this->analysisFile);
- fread(&pic->sliceType, sizeof(int), 1, this->analysisFile);
- fread(&numCU, sizeof(int), 1, this->analysisFile);
- fread(&numPart, sizeof(int), 1, this->analysisFile);
-
- if (poc != pic->poc || width != p->sourceWidth || height != p->sourceHeight)
- {
- x265_log(NULL, X265_LOG_WARNING, "Error in reading intra-inter data.\n");
- x265_free_analysis_data(pic);
- return;
- }
-
- fread(pic->analysisData.intraData->depth,
- sizeof(uint8_t), pic->analysisData.numPartitions * pic->analysisData.numCUsInFrame, this->analysisFile);
- fread(pic->analysisData.intraData->modes,
- sizeof(uint8_t), pic->analysisData.numPartitions * pic->analysisData.numCUsInFrame, this->analysisFile);
- fread(pic->analysisData.intraData->partSizes,
- sizeof(char), pic->analysisData.numPartitions * pic->analysisData.numCUsInFrame, this->analysisFile);
- fread(pic->analysisData.intraData->poc,
- sizeof(int), pic->analysisData.numCUsInFrame, this->analysisFile);
- fread(pic->analysisData.intraData->cuAddr,
- sizeof(uint32_t), pic->analysisData.numCUsInFrame, this->analysisFile);
- fread(pic->analysisData.interData, sizeof(x265_inter_data), pic->analysisData.numCUsInFrame * 85, this->analysisFile);
-}
-
-void CLIOptions::writeAnalysisFile(x265_picture* pic, x265_param *p)
-{
- uint64_t seekTo = pic->poc * this->analysisRecordSize + this->analysisHeaderSize;
- fseeko(this->analysisFile, seekTo, SEEK_SET);
- fwrite(&p->sourceWidth, sizeof(int), 1, this->analysisFile);
- fwrite(&p->sourceHeight, sizeof(int), 1, this->analysisFile);
- fwrite(&pic->poc, sizeof(int), 1, this->analysisFile);
- fwrite(&pic->sliceType, sizeof(int), 1, this->analysisFile);
- fwrite(&pic->analysisData.numCUsInFrame, sizeof(int), 1, this->analysisFile);
- fwrite(&pic->analysisData.numPartitions, sizeof(int), 1, this->analysisFile);
-
- fwrite(pic->analysisData.intraData->depth,
- sizeof(uint8_t), pic->analysisData.numPartitions * pic->analysisData.numCUsInFrame, this->analysisFile);
- fwrite(pic->analysisData.intraData->modes,
- sizeof(uint8_t), pic->analysisData.numPartitions * pic->analysisData.numCUsInFrame, this->analysisFile);
- fwrite(pic->analysisData.intraData->partSizes,
- sizeof(char), pic->analysisData.numPartitions * pic->analysisData.numCUsInFrame, this->analysisFile);
- fwrite(pic->analysisData.intraData->poc, sizeof(int), pic->analysisData.numCUsInFrame, this->analysisFile);
- fwrite(pic->analysisData.intraData->cuAddr, sizeof(uint32_t), pic->analysisData.numCUsInFrame, this->analysisFile);
- fwrite(pic->analysisData.interData, sizeof(x265_inter_data), pic->analysisData.numCUsInFrame * 85, this->analysisFile);
-}
-