aboutsummaryrefslogtreecommitdiff
path: root/examples/dmabuf-capture.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/dmabuf-capture.c')
-rw-r--r--examples/dmabuf-capture.c31
1 files changed, 13 insertions, 18 deletions
diff --git a/examples/dmabuf-capture.c b/examples/dmabuf-capture.c
index 1aeaf9c5..0d4aa3ee 100644
--- a/examples/dmabuf-capture.c
+++ b/examples/dmabuf-capture.c
@@ -10,6 +10,7 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <libdrm/drm_fourcc.h>
#include "wlr-export-dmabuf-unstable-v1-client-protocol.h"
struct wayland_output {
@@ -225,25 +226,19 @@ static void frame_object(void *data, struct zwlr_export_dmabuf_frame_v1 *frame,
desc->layers[0].planes[plane_index].pitch = stride;
}
-static const uint32_t pixfmt_to_drm_map[] = {
- [AV_PIX_FMT_NV12] = WL_SHM_FORMAT_NV12,
- [AV_PIX_FMT_BGRA] = WL_SHM_FORMAT_ARGB8888,
- [AV_PIX_FMT_BGR0] = WL_SHM_FORMAT_XRGB8888,
- [AV_PIX_FMT_RGBA] = WL_SHM_FORMAT_ABGR8888,
- [AV_PIX_FMT_RGB0] = WL_SHM_FORMAT_XBGR8888,
- [AV_PIX_FMT_ABGR] = WL_SHM_FORMAT_RGBA8888,
- [AV_PIX_FMT_0BGR] = WL_SHM_FORMAT_RGBX8888,
- [AV_PIX_FMT_ARGB] = WL_SHM_FORMAT_BGRA8888,
- [AV_PIX_FMT_0RGB] = WL_SHM_FORMAT_BGRX8888,
-};
-
static enum AVPixelFormat drm_fmt_to_pixfmt(uint32_t fmt) {
- for (enum AVPixelFormat i = 0; i < AV_PIX_FMT_NB; i++) {
- if (pixfmt_to_drm_map[i] == fmt) {
- return i;
- }
- }
- return AV_PIX_FMT_NONE;
+ switch (fmt) {
+ case DRM_FORMAT_NV12: return AV_PIX_FMT_NV12;
+ case DRM_FORMAT_ARGB8888: return AV_PIX_FMT_BGRA;
+ case DRM_FORMAT_XRGB8888: return AV_PIX_FMT_BGR0;
+ case DRM_FORMAT_ABGR8888: return AV_PIX_FMT_RGBA;
+ case DRM_FORMAT_XBGR8888: return AV_PIX_FMT_RGB0;
+ case DRM_FORMAT_RGBA8888: return AV_PIX_FMT_ABGR;
+ case DRM_FORMAT_RGBX8888: return AV_PIX_FMT_0BGR;
+ case DRM_FORMAT_BGRA8888: return AV_PIX_FMT_ARGB;
+ case DRM_FORMAT_BGRX8888: return AV_PIX_FMT_0RGB;
+ default: return AV_PIX_FMT_NONE;
+ };
}
static int attach_drm_frames_ref(struct capture_context *ctx, AVFrame *f,