diff mbox

[FFmpeg-devel,3/5] swscale: use a function for isBayer

Message ID 20170319213729.GB8199@golem.pkh.me
State Accepted
Headers show

Commit Message

Clément Bœsch March 19, 2017, 9:37 p.m. UTC
On Sun, Mar 19, 2017 at 10:13:37PM +0100, Michael Niedermayer wrote:
[...]
> > > > +static av_always_inline int isBayer(enum AVPixelFormat pix_fmt)
> > > > +{
> > > > +    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
> > > > +    av_assert0(desc);
> > > > +    return !strncmp(desc->name, "bayer_", 6);
> > > 
> > > iam not sure strncmp() is a good idea speed wise
> > > 
> > 
> > In a non-bayer case, the function will return in the worst case after the
> > 2nd character, I have high doubt about this being a speed issue. We can
> > introduce a flag for this, but I don't think it's worth.
> 
> i think needing to call libc is a bit ugly here
> 

It's already how we do it in libavutil/pixdesc.c.

But anyway, how about the 2 attached patches?

Comments

Michael Niedermayer March 19, 2017, 11:32 p.m. UTC | #1
On Sun, Mar 19, 2017 at 10:37:30PM +0100, Clément Bœsch wrote:
> On Sun, Mar 19, 2017 at 10:13:37PM +0100, Michael Niedermayer wrote:
> [...]
> > > > > +static av_always_inline int isBayer(enum AVPixelFormat pix_fmt)
> > > > > +{
> > > > > +    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
> > > > > +    av_assert0(desc);
> > > > > +    return !strncmp(desc->name, "bayer_", 6);
> > > > 
> > > > iam not sure strncmp() is a good idea speed wise
> > > > 
> > > 
> > > In a non-bayer case, the function will return in the worst case after the
> > > 2nd character, I have high doubt about this being a speed issue. We can
> > > introduce a flag for this, but I don't think it's worth.
> > 
> > i think needing to call libc is a bit ugly here
> > 
> 
> It's already how we do it in libavutil/pixdesc.c.
> 
> But anyway, how about the 2 attached patches?

they look nice

thx

[...]
diff mbox

Patch

From 7faa2be248b5a2cbb54314983e2305b62906e0aa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= <u@pkh.me>
Date: Sun, 19 Mar 2017 15:04:53 +0100
Subject: [PATCH 4/6] swscale: use a function for isBayer

---
 libswscale/swscale_internal.h | 20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)

diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.h
index 6bcb4640ee..c26a1ea418 100644
--- a/libswscale/swscale_internal.h
+++ b/libswscale/swscale_internal.h
@@ -760,20 +760,12 @@  static av_always_inline int isGray(enum AVPixelFormat pix_fmt)
         || (x) == AV_PIX_FMT_BGR24       \
     )
 
-#define isBayer(x) ( \
-           (x)==AV_PIX_FMT_BAYER_BGGR8    \
-        || (x)==AV_PIX_FMT_BAYER_BGGR16LE \
-        || (x)==AV_PIX_FMT_BAYER_BGGR16BE \
-        || (x)==AV_PIX_FMT_BAYER_RGGB8    \
-        || (x)==AV_PIX_FMT_BAYER_RGGB16LE \
-        || (x)==AV_PIX_FMT_BAYER_RGGB16BE \
-        || (x)==AV_PIX_FMT_BAYER_GBRG8    \
-        || (x)==AV_PIX_FMT_BAYER_GBRG16LE \
-        || (x)==AV_PIX_FMT_BAYER_GBRG16BE \
-        || (x)==AV_PIX_FMT_BAYER_GRBG8    \
-        || (x)==AV_PIX_FMT_BAYER_GRBG16LE \
-        || (x)==AV_PIX_FMT_BAYER_GRBG16BE \
-    )
+static av_always_inline int isBayer(enum AVPixelFormat pix_fmt)
+{
+    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
+    av_assert0(desc);
+    return desc->flags & AV_PIX_FMT_FLAG_BAYER;
+}
 
 #define isAnyRGB(x) \
     (           \
-- 
2.12.0