⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 color_lut.c

📁 It s a tool designed to extract as much information as possible from Bluetooth devices without the r
💻 C
字号:
/* * colorspace conversion functions *    -- translate RGB using lookup tables * *  (c) 1998-2001 Gerd Knorr <kraxel@bytesex.org> * */#define NG_PRIVATE#include "config.h"#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#include <inttypes.h>#include <sys/time.h>#include <sys/types.h>#include "grab-ng.h"#include "byteswap.h"int32_t   ng_lut_red[256];int32_t   ng_lut_green[256];int32_t   ng_lut_blue[256];/* ------------------------------------------------------------------- */voidng_rgb24_to_lut2(unsigned char* restrict dest, unsigned char* restrict src,		 int p){    uint16_t* restrict d = (uint16_t*)dest;    while (p-- > 0) {	*(d++) = ng_lut_red[src[0]] | ng_lut_green[src[1]] |	    ng_lut_blue[src[2]];	src += 3;    }}static voidbgr24_to_lut2(unsigned char* restrict dest, unsigned char* restrict src,	      int p){    uint16_t* restrict d = (uint16_t*)dest;    while (p-- > 0) {	*(d++) = ng_lut_red[src[2]] | ng_lut_green[src[1]] |	    ng_lut_blue[src[0]];	src += 3;    }}static voidrgb32_to_lut2(unsigned char* restrict dest, unsigned char* restrict src,	      int p){    uint16_t* restrict d = (uint16_t*)dest;    while (p-- > 0) {	*(d++) = ng_lut_red[src[1]] | ng_lut_green[src[2]] |	    ng_lut_blue[src[3]];	src += 4;    }}static voidbgr32_to_lut2(unsigned char* restrict dest, unsigned char* restrict src,	      int p){    uint16_t* restrict d = (uint16_t*)dest;    while (p-- > 0) {       *(d++) = ng_lut_red[src[2]] | ng_lut_green[src[1]] |           ng_lut_blue[src[0]];	src += 4;    }}static voidgray_to_lut2(unsigned char* restrict dest, unsigned char* restrict src,	     int p){    uint16_t* restrict d = (uint16_t*)dest;    while (p-- > 0) {	*(d++) = ng_lut_red[*src] | ng_lut_green[*src] | ng_lut_blue[*src];	src++;    }}/* ------------------------------------------------------------------- */voidng_rgb24_to_lut4(unsigned char* restrict dest, unsigned char* restrict src,		 int p){    unsigned int* restrict d = (unsigned int*)dest;    while (p-- > 0) {	*(d++) = ng_lut_red[src[0]] | ng_lut_green[src[1]] |	    ng_lut_blue[src[2]];	src += 3;    }}static voidbgr24_to_lut4(unsigned char* restrict dest, unsigned char* restrict src,	      int p){    unsigned int* restrict d = (unsigned int*)dest;    while (p-- > 0) {	*(d++) = ng_lut_red[src[2]] | ng_lut_green[src[1]] |	    ng_lut_blue[src[0]];	src += 3;    }}static voidrgb32_to_lut4(unsigned char* restrict dest, unsigned char* restrict src,	      int p){    unsigned int* restrict d = (unsigned int*)dest;    while (p-- > 0) {	*(d++) = ng_lut_red[src[1]] | ng_lut_green[src[2]] |	    ng_lut_blue[src[3]];	src += 4;    }}static voidbgr32_to_lut4(unsigned char* restrict dest, unsigned char* restrict src,	      int p){    unsigned int* restrict d = (unsigned int*)dest;    while (p-- > 0) {       *(d++) = ng_lut_red[src[2]] | ng_lut_green[src[1]] |           ng_lut_blue[src[0]];	src += 4;    }}static voidgray_to_lut4(unsigned char* restrict dest, unsigned char* restrict src,	     int p){    unsigned int* restrict d = (unsigned int*)dest;    while (p-- > 0) {	*(d++) = ng_lut_red[*src] | ng_lut_green[*src] | ng_lut_blue[*src];	src++;    }}/* ------------------------------------------------------------------- */static struct ng_video_conv lut2_list[] = {    {	NG_GENERIC_PACKED,	.fmtid_in	= VIDEO_RGB24,	.priv		= ng_rgb24_to_lut2,    }, {	NG_GENERIC_PACKED,	.fmtid_in	= VIDEO_BGR24,	.priv		= bgr24_to_lut2,    }, {	NG_GENERIC_PACKED,	.fmtid_in	= VIDEO_RGB32,	.priv		= rgb32_to_lut2,    }, {	NG_GENERIC_PACKED,	.fmtid_in	= VIDEO_BGR32,	.priv		= bgr32_to_lut2,    }, {	NG_GENERIC_PACKED,	.fmtid_in	= VIDEO_GRAY,	.priv		= gray_to_lut2,    }, {	NG_GENERIC_PACKED,	.fmtid_in	= VIDEO_YUYV,	.priv		= ng_yuv422_to_lut2,    },{	.init           = ng_conv_nop_init,	.p.mode         = NG_MODE_TRIVIAL,	.p.fini         = ng_conv_nop_fini,	.p.frame        = ng_yuv422p_to_lut2,	.fmtid_in	= VIDEO_YUV422P,    },{	.init           = ng_conv_nop_init,	.p.mode         = NG_MODE_TRIVIAL,	.p.fini         = ng_conv_nop_fini,	.p.frame        = ng_yuv420p_to_lut2,	.fmtid_in	= VIDEO_YUV420P,    }};static struct ng_video_conv lut4_list[] = {    {	NG_GENERIC_PACKED,	.fmtid_in	= VIDEO_RGB24,	.priv		= ng_rgb24_to_lut4,    }, {	NG_GENERIC_PACKED,	.fmtid_in	= VIDEO_BGR24,	.priv		= bgr24_to_lut4,    }, {	NG_GENERIC_PACKED,	.fmtid_in	= VIDEO_RGB32,	.priv		= rgb32_to_lut4,    }, {	NG_GENERIC_PACKED,	.fmtid_in	= VIDEO_BGR32,	.priv		= bgr32_to_lut4,    }, {	NG_GENERIC_PACKED,	.fmtid_in	= VIDEO_GRAY,	.priv		= gray_to_lut4,    }, {	NG_GENERIC_PACKED,	.fmtid_in	= VIDEO_YUYV,	.priv		= ng_yuv422_to_lut4,    },{	.init           = ng_conv_nop_init,	.p.mode         = NG_MODE_TRIVIAL,	.p.fini         = ng_conv_nop_fini,	.p.frame        = ng_yuv422p_to_lut4,	.fmtid_in	= VIDEO_YUV422P,    },{	.init           = ng_conv_nop_init,	.p.mode         = NG_MODE_TRIVIAL,	.p.fini         = ng_conv_nop_fini,	.p.frame        = ng_yuv420p_to_lut4,	.fmtid_in	= VIDEO_YUV420P,    }};static const unsigned int nconv2 = sizeof(lut2_list)/sizeof(lut2_list[0]);static const unsigned int nconv4 = sizeof(lut4_list)/sizeof(lut4_list[0]);static void init_one(int32_t *lut, int32_t mask){    int bits  = 0;    int shift = 0;    int i;        for (i = 0; i < 32; i++) {        if (mask & ((int32_t)1 << i))	    bits++;        else if (!bits)	    shift++;    }        if (bits > 8)	for (i = 0; i < 256; i++)	    lut[i] = (i << (bits + shift - 8));    else	for (i = 0; i < 256; i++)	    lut[i] = (i >> (8 - bits)) << shift;}voidng_lut_init(unsigned long red_mask, unsigned long green_mask,	    unsigned long blue_mask, unsigned int fmtid, int swap){    static int      once=0;    unsigned int    i;        if (once++) {	fprintf(stderr,"panic: ng_lut_init called twice\n");	return;    }    init_one(ng_lut_red,   red_mask);    init_one(ng_lut_green, green_mask);    init_one(ng_lut_blue,  blue_mask);    switch (ng_vfmt_to_depth[fmtid]) {    case 16:	if (swap) {	    for (i = 0; i < 256; i++) {		ng_lut_red[i] = SWAP2(ng_lut_red[i]);		ng_lut_green[i] = SWAP2(ng_lut_green[i]);		ng_lut_blue[i] = SWAP2(ng_lut_blue[i]);	    }	}	for (i = 0; i < nconv2; i++)	    lut2_list[i].fmtid_out = fmtid;	ng_conv_register(NG_PLUGIN_MAGIC,"built-in",lut2_list,nconv2);	break;    case 32:	if (swap) {	    for (i = 0; i < 256; i++) {		ng_lut_red[i] = SWAP4(ng_lut_red[i]);		ng_lut_green[i] = SWAP4(ng_lut_green[i]);		ng_lut_blue[i] = SWAP4(ng_lut_blue[i]);	    }	}	for (i = 0; i < nconv4; i++)	    lut4_list[i].fmtid_out = fmtid;	ng_conv_register(NG_PLUGIN_MAGIC,"built-in",lut4_list,nconv4);	break;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -