[x265] [PATCH] YUV, Y4M Output: bitdepth confusion resolved

Steve Borho steve at borho.org
Wed Nov 6 20:06:12 CET 2013


On Wed, Nov 6, 2013 at 4:07 AM, <deepthi at multicorewareinc.com> wrote:

> # HG changeset patch
> # User Deepthi Nandakumar <deepthi at multicorewareinc.com>
> # Date 1383732437 -19800
> # Node ID e1b87cf4133e481cea131882ec5cf6bf80e55846
> # Parent  bc99537483f101547312a589ceb3d428c176cfed
> YUV, Y4M Output: bitdepth confusion resolved
>
> diff -r bc99537483f1 -r e1b87cf4133e source/output/y4m.cpp
> --- a/source/output/y4m.cpp     Tue Nov 05 22:21:55 2013 -0600
> +++ b/source/output/y4m.cpp     Wed Nov 06 15:37:17 2013 +0530
> @@ -67,41 +67,38 @@
>      ofs.seekp(outPicPos);
>      ofs << "FRAME\n";
>
> -    if (pic.bitDepth > 8)
> +#if HIGH_BIT_DEPTH
> +    // encoder gave us short pixels, downshift, then write
> +    int shift = pic.bitDepth - 8;
> +    if (pic.poc == 0)
>

I tweaked this so the warning message is not emitted if shift is 0


>      {
> -        // encoder gave us short pixels, downshift, then write
> -        int shift = pic.bitDepth - 8;
> -        if (pic.poc == 0)
> +        x265_log(NULL, X265_LOG_WARNING, "y4m: down-shifting
> reconstructed pixels to 8 bits\n");
> +    }
> +    for (int i = 0; i < x265_cli_csps[colorSpace].planes; i++)
> +    {
> +        uint16_t *src = (uint16_t*)pic.planes[i];
> +        for (int h = 0; h < height >>
> x265_cli_csps[colorSpace].height[i]; h++)
>          {
> -            x265_log(NULL, X265_LOG_WARNING, "y4m: down-shifting
> reconstructed pixels to 8 bits\n");
> -        }
> -        for (int i = 0; i < x265_cli_csps[colorSpace].planes; i++)
> -        {
> -            uint16_t *src = (uint16_t*)pic.planes[i];
> -            for (int h = 0; h < height >>
> x265_cli_csps[colorSpace].height[i]; h++)
> +            for (int w = 0; w < width >>
> x265_cli_csps[colorSpace].width[i]; w++)
>              {
> -                for (int w = 0; w < width >>
> x265_cli_csps[colorSpace].width[i]; w++)
> -                {
> -                    buf[w] = (char)(src[w] >> shift);
> -                }
> +                buf[w] = (char)(src[w] >> shift);
> +            }
>
> -                ofs.write(buf, width >>
> x265_cli_csps[colorSpace].width[i]);
> -                src += pic.stride[i];
> -            }
> +            ofs.write(buf, width >> x265_cli_csps[colorSpace].width[i]);
> +            src += pic.stride[i];
>          }
>      }
> -    else
> +#else
> +    for (int i = 0; i < x265_cli_csps[colorSpace].planes; i++)
>      {
> -        for (int i = 0; i < x265_cli_csps[colorSpace].planes; i++)
> +        char *src = (char*)pic.planes[i];
> +        for (int h = 0; h < height >>
> x265_cli_csps[colorSpace].height[i]; h++)
>          {
> -            char *src = (char*)pic.planes[i];
> -            for (int h = 0; h < height >>
> x265_cli_csps[colorSpace].height[i]; h++)
> -            {
> -                ofs.write(src, width >>
> x265_cli_csps[colorSpace].width[i]);
> -                src += pic.stride[i];
> -            }
> +            ofs.write(src, width >> x265_cli_csps[colorSpace].width[i]);
> +            src += pic.stride[i];
>          }
>      }
> +#endif
>
>      PPAStopCpuEventFunc(write_yuv);
>      return true;
> diff -r bc99537483f1 -r e1b87cf4133e source/output/yuv.cpp
> --- a/source/output/yuv.cpp     Tue Nov 05 22:21:55 2013 -0600
> +++ b/source/output/yuv.cpp     Wed Nov 06 15:37:17 2013 +0530
> @@ -57,30 +57,27 @@
>      uint32_t pixelbytes = (depth > 8) ? 2 : 1;
>      ofs.seekp(pic.poc * frameSize * pixelbytes);
>
> -    if (pic.bitDepth > 8)
> +#if HIGH_BIT_DEPTH
> +    for (int i = 0; i < x265_cli_csps[colorSpace].planes; i++)
>

and I tweaked this to output 8bit YUV pictures if bitDepth is 8


>      {
> -        for (int i = 0; i < x265_cli_csps[colorSpace].planes; i++)
> +        uint16_t *src = (uint16_t*)pic.planes[0];
> +        for (int h = 0; h < height; h++)
>          {
> -            uint16_t *src = (uint16_t*)pic.planes[0];
> -            for (int h = 0; h < height; h++)
> -            {
> -                ofs.write((const char*)src, (width * pixelbytes) >>
> x265_cli_csps[colorSpace].width[i]);
> -                src += pic.stride[i];
> -            }
> +            ofs.write((const char*)src, (width * pixelbytes) >>
> x265_cli_csps[colorSpace].width[i]);
> +            src += pic.stride[i];
>          }
> -    }
> -    else
> +    }
> +#else
> +    for (int i = 0; i < x265_cli_csps[colorSpace].planes; i++)
>      {
> -        for (int i = 0; i < x265_cli_csps[colorSpace].planes; i++)
> +        char *src = (char*)pic.planes[0];
> +        for (int h = 0; h < height; h++)
>          {
> -            char *src = (char*)pic.planes[0];
> -            for (int h = 0; h < height; h++)
> -            {
> -                ofs.write(src, width >>
> x265_cli_csps[colorSpace].width[i]);
> -                src += pic.stride[i];
> -            }
> +            ofs.write(src, width >> x265_cli_csps[colorSpace].width[i]);
> +            src += pic.stride[i];
>          }
> -    }
> +    }
> +#endif
>
>      PPAStopCpuEventFunc(write_yuv);
>      return true;
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>



-- 
Steve Borho
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20131106/ef90cccc/attachment-0001.html>


More information about the x265-devel mailing list