1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
/*
* Copyright 1994-2022 Olivier Girondel
* Copyright 2019-2022 Tavasti
*
* This file is part of lebiniou.
*
* lebiniou is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* lebiniou is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with lebiniou. If not, see <http://www.gnu.org/licenses/>.
*/
/* Plugin idea: show only pixels that differ more than MIN_DIFFERENCE
from reference picture. For showing pixels, we use colorvalue of
difference between cam and active buffer */
#include "context.h"
#include "pthread_utils.h"
#define MIN_DIFFERENCE 40 /* how much color value has to differ from initial
to be shown. Lower values show target better,
but also show more flickering */
uint32_t version = 0;
uint32_t options = BO_GFX | BO_LENS | BO_WEBCAM | BO_NORANDOM;
char desc[] = "Show cam pic which differs";
char dname[] = "TV diff 4";
enum LayerMode mode = LM_OVERLAY;
void
run(Context_t *ctx)
{
Pixel_t *src1, *start, *src2, *src3, *dst;
dst = start = passive_buffer(ctx)->buffer;
if (!xpthread_mutex_lock(&ctx->cam_mtx[ctx->cam])) {
src1 = ctx->cam_save[ctx->cam][0]->buffer;
src2 = ctx->cam_ref0[ctx->cam]->buffer;
src3 = active_buffer(ctx)->buffer;
for (; dst < start + BUFFSIZE * sizeof(Pixel_t); src1++, src2++, src3++, dst++) {
if (((*src1 - *src2) > MIN_DIFFERENCE) ||
((*src2 - *src1) > MIN_DIFFERENCE) ) {
*dst = *src1 < *src3 ? (*src3 - *src1) : (*src1 - *src3);
} else {
*dst = 0;
}
}
xpthread_mutex_unlock(&ctx->cam_mtx[ctx->cam]);
}
}
|