2017-09-15 0:37 GMT+02:00 Mark Thompson <s...@jkqxz.net>:
> On 14/09/17 22:30, Carl Eugen Hoyos wrote:
>> 2017-09-07 23:56 GMT+02:00 Mark Thompson <s...@jkqxz.net>:
>>
>>> +static const struct {
>>> +    enum AVPixelFormat pixfmt;
>>> +    uint32_t drm_format;
>>> +} kmsgrab_formats[] = {
>>> +    { AV_PIX_FMT_GRAY8,    DRM_FORMAT_R8       },
>>> +    { AV_PIX_FMT_GRAY16LE, DRM_FORMAT_R16      },
>>> +    { AV_PIX_FMT_RGB24,    DRM_FORMAT_RGB888   },
>>> +    { AV_PIX_FMT_BGR24,    DRM_FORMAT_BGR888   },
>>> +    { AV_PIX_FMT_0RGB,     DRM_FORMAT_XRGB8888 },
>>> +    { AV_PIX_FMT_0BGR,     DRM_FORMAT_XBGR8888 },
>>> +    { AV_PIX_FMT_RGB0,     DRM_FORMAT_RGBX8888 },
>>> +    { AV_PIX_FMT_BGR0,     DRM_FORMAT_BGRX8888 },
>>> +    { AV_PIX_FMT_ARGB,     DRM_FORMAT_ARGB8888 },
>>> +    { AV_PIX_FMT_ABGR,     DRM_FORMAT_ABGR8888 },
>>> +    { AV_PIX_FMT_RGBA,     DRM_FORMAT_RGBA8888 },
>>> +    { AV_PIX_FMT_BGRA,     DRM_FORMAT_BGRA8888 },
>>> +    { AV_PIX_FMT_YUYV422,  DRM_FORMAT_YUYV     },
>>> +    { AV_PIX_FMT_YVYU422,  DRM_FORMAT_YVYU     },
>>> +    { AV_PIX_FMT_UYVY422,  DRM_FORMAT_UYVY     },
>>> +    { AV_PIX_FMT_NV12,     DRM_FORMAT_NV12     },
>>> +    { AV_PIX_FMT_YUV420P,  DRM_FORMAT_YUV420   },
>>> +    { AV_PIX_FMT_YUV422P,  DRM_FORMAT_YUV422   },
>>> +    { AV_PIX_FMT_YUV444P,  DRM_FORMAT_YUV444   },
>>
>> Which of those were you able to test?
>
> Only the 32-bit RGB0-type ones (all of them are testable because you just get 
> the colours in a different order).

So RGB0, BGR0, 0RGB and 0BGR all work fine?

> Intel at least should work with others in near-future versions (e.g. 
> <https://lists.freedesktop.org/archives/intel-gfx/2017-July/132642.html>), 
> though I haven't actually tested this.  It seemed sensible to include all 
> core DRM formats which map to ffmpeg pixfmts to account for other drivers 
> (possibly future) which I can't test now.

Good idea, twelve more are attached.

> I've tested on amdgpu, exynos, i915 and rockchip.  It should work on other 
> KMS drivers, though if the output is tiled or not-CPU-mappable it can be hard 
> to get the output somewhere where it can actually be used.  (The ARM ones are 
> fine and allow hwdownload directly.  Intels I've tried are mappable but tiled 
> so hwdownload is messed up, but they interoperate cleanly with VAAPI.  The 
> AMD I have makes the objects completely unmappable from the CPU, but they can 
> be imported to other GPU things with Mesa.)
>
>> I find the comments in the header file very misleading:
>> What is "little-endian 8:8:8:8 ARGB"?
>
> It is just A-R-G-B in memory in that order as you might expect
> without the comment.

So the comment is simply wrong for the 8:8:8:8 RGB formats?
Iirc, the same comment in the SDL sources defines another
order (or OpenGL, I don't remember atm), as does FFmpeg
through its RGB32 formats.

> Not sure why it says little-endian - maybe to emphasise that it doesn't 
> change based on the host architecture?

Wouldn't it be better if the comment said "does not change based
on the host architecture"?

Carl Eugen
diff --git a/libavdevice/kmsgrab.c b/libavdevice/kmsgrab.c
index 67a83ef..2b8affa 100644
--- a/libavdevice/kmsgrab.c
+++ b/libavdevice/kmsgrab.c
@@ -207,7 +207,17 @@ static const struct {
 #endif
 #ifdef DRM_FORMAT_R16
     { AV_PIX_FMT_GRAY16LE, DRM_FORMAT_R16      },
+    { AV_PIX_FMT_GRAY16BE, DRM_FORMAT_R16      | DRM_FORMAT_BIG_ENDIAN },
 #endif
+    { AV_PIX_FMT_BGR8,     DRM_FORMAT_BGR233   },
+    { AV_PIX_FMT_RGB555LE, DRM_FORMAT_XRGB1555 },
+    { AV_PIX_FMT_RGB555BE, DRM_FORMAT_XRGB1555 | DRM_FORMAT_BIG_ENDIAN },
+    { AV_PIX_FMT_BGR555LE, DRM_FORMAT_XBGR1555 },
+    { AV_PIX_FMT_BGR555BE, DRM_FORMAT_XBGR1555 | DRM_FORMAT_BIG_ENDIAN },
+    { AV_PIX_FMT_RGB565LE, DRM_FORMAT_RGB565   },
+    { AV_PIX_FMT_RGB565BE, DRM_FORMAT_RGB565   | DRM_FORMAT_BIG_ENDIAN },
+    { AV_PIX_FMT_BGR565LE, DRM_FORMAT_BGR565   },
+    { AV_PIX_FMT_BGR565BE, DRM_FORMAT_BGR565   | DRM_FORMAT_BIG_ENDIAN },
     { AV_PIX_FMT_RGB24,    DRM_FORMAT_RGB888   },
     { AV_PIX_FMT_BGR24,    DRM_FORMAT_BGR888   },
     { AV_PIX_FMT_0RGB,     DRM_FORMAT_XRGB8888 },
@@ -222,6 +232,8 @@ static const struct {
     { AV_PIX_FMT_YVYU422,  DRM_FORMAT_YVYU     },
     { AV_PIX_FMT_UYVY422,  DRM_FORMAT_UYVY     },
     { AV_PIX_FMT_NV12,     DRM_FORMAT_NV12     },
+    { AV_PIX_FMT_YUV410P,  DRM_FORMAT_YUV410   },
+    { AV_PIX_FMT_YUV411P,  DRM_FORMAT_YUV411   },
     { AV_PIX_FMT_YUV420P,  DRM_FORMAT_YUV420   },
     { AV_PIX_FMT_YUV422P,  DRM_FORMAT_YUV422   },
     { AV_PIX_FMT_YUV444P,  DRM_FORMAT_YUV444   },
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to