[x265] [PATCH] add fanout validation module to check param compatibility

Sagar Kotecha sagar at multicorewareinc.com
Tue Sep 16 10:48:28 CEST 2014


Ignore patch.

With Regards,
Sagar

On Tue, Sep 16, 2014 at 1:06 PM, <sagar at multicorewareinc.com> wrote:

> # HG changeset patch
> # User Sagar Kotecha <sagar at multicorewareinc.com>
> # Date 1410852729 -19800
> #      Tue Sep 16 13:02:09 2014 +0530
> # Node ID b9b5032d1608b04e6969cad794e9d31a07813168
> # Parent  67ee212bbf78f7192e5c5af6b53304468bfa55b1
> add fanout validation module to check param compatibility
>
> diff -r 67ee212bbf78 -r b9b5032d1608 source/common/param.cpp
> --- a/source/common/param.cpp   Mon Sep 15 16:09:52 2014 +0530
> +++ b/source/common/param.cpp   Tue Sep 16 13:02:09 2014 +0530
> @@ -1187,7 +1187,7 @@
>  {
>      char *buf, *s;
>
> -    buf = s = X265_MALLOC(char, 2000);
> +    buf = s = X265_MALLOC(char, MAXPARAMSIZE);
>      if (!buf)
>          return NULL;
>
> diff -r 67ee212bbf78 -r b9b5032d1608 source/common/param.h
> --- a/source/common/param.h     Mon Sep 15 16:09:52 2014 +0530
> +++ b/source/common/param.h     Tue Sep 16 13:02:09 2014 +0530
> @@ -38,6 +38,8 @@
>
>  /* this table is kept internal to avoid confusion, since log level
> indices start at -1 */
>  static const char * const logLevelNames[] = { "none", "error", "warning",
> "info", "debug", "full", 0 };
> +
> +#define MAXPARAMSIZE 2000
>  }
>
>  #endif // ifndef X265_PARAM_H
> diff -r 67ee212bbf78 -r b9b5032d1608 source/x265.cpp
> --- a/source/x265.cpp   Mon Sep 15 16:09:52 2014 +0530
> +++ b/source/x265.cpp   Tue Sep 16 13:02:09 2014 +0530
> @@ -227,6 +227,7 @@
>      uint32_t framesToBeEncoded; // number of frames to encode
>      uint64_t totalbytes;
>      size_t   analysisRecordSize; // number of bytes read from or dumped
> into file
> +    size_t   analysisHeaderSize;
>
>      int64_t startTime;
>      int64_t prevUpdateTime;
> @@ -262,6 +263,7 @@
>      bool parseQPFile(x265_picture &pic_org);
>      void readAnalysisFile(x265_picture* pic, x265_param*);
>      void writeAnalysisFile(x265_picture* pic, x265_param*);
> +    bool validateFanout(x265_param*);
>  };
>
>  void CLIOptions::destroy()
> @@ -755,6 +757,92 @@
>      return false;
>  }
>
> +bool CLIOptions::validateFanout(x265_param *param)
> +{
> +#define CMP_OPT_FANOUT(opt, param_val)\
> +    {\
> +        bErr = 0;\
> +        p = strstr(opts, opt "=");\
> +        char* q = strstr(opts, "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(opts, 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(opts);\
> +            return false;\
> +        }\
> +    }
> +
> +    char *p = NULL, *paramBuf, *opts;
> +    int i, j;
> +    uint32_t k , l;
> +    bool bErr = false;
> +
> +    opts = 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");
> +        return false;
> +    }
> +
> +    paramBuf = strchr(opts, '\n');
> +    fseek(this->analysisFile, long(strlen(opts) + 1), SEEK_SET);
> +    if (!paramBuf)
> +    {
> +        x265_log(param, X265_LOG_ERROR, "Malformed analysis file\n");
> +        return false;
> +    }
> +
> +    if (sscanf(opts, "#options: %dx%d", &i, &j) != 2)
> +    {
> +        x265_log(param, X265_LOG_ERROR, "Resolution specified in analysis
> file is not valid\n");
> +        X265_FREE(opts);
> +        return false;
> +    }
> +    if ((p = strstr(opts, " 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(opts);
> +        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(opts);
> +        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(opts);
> +    return true;
> +}
> +
>  void CLIOptions::readAnalysisFile(x265_picture* pic, x265_param* p)
>  {
>      int poc, width, height;
> @@ -788,7 +876,7 @@
>
>  void CLIOptions::writeAnalysisFile(x265_picture* pic, x265_param *p)
>  {
> -    uint64_t seekTo = pic->poc * this->analysisRecordSize;
> +    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);
> @@ -912,6 +1000,26 @@
>
>          cliopt.analysisRecordSize = ((sizeof(int) * 4 + sizeof(uint32_t)
> * 2) + sizeof(x265_inter_data) * numCU * 85 +
>          sizeof(uint8_t) * 2 * numPart * numCU + sizeof(char) * numPart *
> numCU + sizeof(int) * numCU  + sizeof(uint32_t) * numCU);
> +        if (param->analysisMode == X265_ANALYSIS_SAVE)
> +        {
> +            char *p = x265_param2string(param);
> +            if (p)
> +            {
> +                fprintf(cliopt.analysisFile, "#options: %s\n", p);
> +                cliopt.analysisHeaderSize = strlen(p) + 1 +
> strlen("#options: \n");
> +                X265_FREE(p);
> +            }
> +            else
> +            {
> +                x265_log(NULL, X265_LOG_ERROR, "analysis: buffer
> allocation failure, aborting");
> +                goto fail;
> +            }
> +        }
> +        else
> +        {
> +            if (!cliopt.validateFanout(param))
> +                goto fail;
> +        }
>      }
>
>      if (cliopt.bDither)
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20140916/811de7d6/attachment.html>


More information about the x265-devel mailing list