case OptSetFBuf:
subs = optarg;
while (*subs != '\0') {
+ const unsigned chroma_flags = V4L2_FBUF_FLAG_CHROMAKEY |
+ V4L2_FBUF_FLAG_SRC_CHROMAKEY;
+ const unsigned alpha_flags = V4L2_FBUF_FLAG_GLOBAL_ALPHA |
+ V4L2_FBUF_FLAG_LOCAL_ALPHA |
+ V4L2_FBUF_FLAG_LOCAL_INV_ALPHA;
static const char *const subopts[] = {
"chromakey",
"src_chromakey",
switch (parse_subopt(&subs, subopts, &value)) {
case 0:
+ fbuf.flags &= ~chroma_flags;
fbuf.flags |= strtol(value, 0L, 0) ? V4L2_FBUF_FLAG_CHROMAKEY : 0;
- set_fbuf |= V4L2_FBUF_FLAG_CHROMAKEY;
- fbuf.flags &= ~V4L2_FBUF_FLAG_SRC_CHROMAKEY;
- set_fbuf &= ~V4L2_FBUF_FLAG_SRC_CHROMAKEY;
+ set_fbuf |= chroma_flags;
break;
case 1:
+ fbuf.flags &= ~chroma_flags;
fbuf.flags |= strtol(value, 0L, 0) ? V4L2_FBUF_FLAG_SRC_CHROMAKEY : 0;
- set_fbuf |= V4L2_FBUF_FLAG_SRC_CHROMAKEY;
- fbuf.flags &= ~V4L2_FBUF_FLAG_CHROMAKEY;
- set_fbuf &= ~V4L2_FBUF_FLAG_CHROMAKEY;
+ set_fbuf |= chroma_flags;
break;
case 2:
+ fbuf.flags &= ~alpha_flags;
fbuf.flags |= strtol(value, 0L, 0) ? V4L2_FBUF_FLAG_GLOBAL_ALPHA : 0;
- set_fbuf |= V4L2_FBUF_FLAG_GLOBAL_ALPHA;
+ set_fbuf |= alpha_flags;
break;
case 3:
+ fbuf.flags &= ~alpha_flags;
fbuf.flags |= strtol(value, 0L, 0) ? V4L2_FBUF_FLAG_LOCAL_ALPHA : 0;
- set_fbuf |= V4L2_FBUF_FLAG_LOCAL_ALPHA;
+ set_fbuf |= alpha_flags;
break;
case 4:
+ fbuf.flags &= ~alpha_flags;
fbuf.flags |= strtol(value, 0L, 0) ? V4L2_FBUF_FLAG_LOCAL_INV_ALPHA : 0;
- set_fbuf |= V4L2_FBUF_FLAG_LOCAL_INV_ALPHA;
+ set_fbuf |= alpha_flags;
break;
case 5:
fb_device = value;