亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gdkpixbuf_filter.c

?? 一個很棒的視頻服務器
?? C
字號:
#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include <string.h>#include <gdk-pixbuf/gdk-pixbuf.h>#include "camserv.h"#include "alpha_map.h"#include "camconfig.h"#include "video.h"#include "filter.h"#include "mainloop.h"#include "log.h"#define MODNAME "gdkpixbuf_filter"typedef struct rand_filter_st {  GdkPixbuf *pixbuf;  unsigned char *data;  int x, y, width, height, has_alpha;} Gdk_Filter;/* * filter_init:        Standard filter initialization routine. * */void *filter_init( CamConfig *ccfg, char *section_name ){  Gdk_Filter *res;  const char *image_name;  char buf[ 1024 ];  int isbw, err;  isbw = camconfig_query_int( ccfg, SEC_VIDEO, VIDCONFIG_ISB_N_W, &err );  if( err ) camserv_log( MODNAME, "Config inconsistancy!  (isb_n_w)" );  if( isbw == 1 ) {    camserv_log( MODNAME, "This filter does not support B&W!" );    return NULL;  }  if( (res = malloc( sizeof( *res ))) == NULL ){    camserv_log( MODNAME, "FATAL! Couldn't allocate %d bytes", sizeof( *res ));    return NULL;  }    if( (image_name = camconfig_query_str( ccfg, section_name, "file" ))== NULL){    camserv_log( MODNAME, "FATAL!  [%s]:file not specified!", section_name  );    free( res );    return NULL;  }  strncpy( buf, image_name, sizeof( buf ) -1 );  buf[ sizeof( buf ) - 1 ] = '\0';  if( !(res->pixbuf = gdk_pixbuf_new_from_file( buf ))){    camserv_log( MODNAME, "FATAL!  Load error loading \"%s\"", buf );    free( res );    return NULL;  }  if( gdk_pixbuf_get_colorspace(res->pixbuf) != GDK_COLORSPACE_RGB ||      gdb_pixbuf_get_n_channels(res->pixbuf) < 3){    camserv_log( MODNAME, "FATAL!  Image loaded in an invalid format!" );    gdk_pixbuf_unref( res->pixbuf );    free( res );    return NULL;  }  res->x         = camconfig_query_def_int( ccfg, section_name, "x", 0 );  res->y         = camconfig_query_def_int( ccfg, section_name, "y", 0 );  res->width     = gdk_pixbuf_get_width(res->pixbuf);  res->height    = gdk_pixbuf_get_height(res->pixbuf);  res->has_alpha = gdk_pixbuf_get_has_alpha(res->pixbuf);  res->data      = gdk_pixbuf_get_pixels(res->pixbuf);  return res;}/* * filter_deinit:  Standard filter deinit routine  */void filter_deinit( void *filter_dat ){  Gdk_Filter *gfilter = filter_dat;  if( !gfilter ) return;  gdk_pixbuf_unref( gfilter->pixbuf );  free( gfilter );}staticint image_outside_pic( int img_x, int img_y, int img_width, int img_height,		       const Video_Info *vinfo ){  if( img_x >= vinfo->width || img_y >= vinfo->height )    return 1;    if( img_x + img_width < 0 || img_y + img_height < 0 )     return 1;  return 0;}void filter_func( char *in_data, char **out_data, void *cldat, 		  const Video_Info *vinfo_in, Video_Info *vinfo_out ){  Gdk_Filter *gfilter = cldat;  unsigned char *src_cp, *dest_cp, alphaval, alphainv;  int width, height, dest_addy, src_addy, x, y;  int min_x, min_y, max_x, max_y;  /* In-place mangling */  *vinfo_out = *vinfo_in;  *out_data = in_data;    width  = gfilter->width;  height = gfilter->height;  if( image_outside_pic( gfilter->x, gfilter->y, width, height, vinfo_in ))    return;  min_x = MAX( 0, gfilter->x );  min_y = MAX( 0, gfilter->y );  max_x = MIN( vinfo_in->width,  gfilter->x + width );  max_y = MIN( vinfo_in->height, gfilter->y + height );  /* Start out the source at where we are going to place the pic */  src_cp = (unsigned char *)gfilter->data;  src_cp += (((min_y - gfilter->y) * width) + (min_x - gfilter->x)) * 4;  /* Figure out how much we are going to add to the source pointer to get it     from the end of 1 scanline to the beginning of the next */  src_addy = (min_x - gfilter->x) + /* Beginning clipping */             (gfilter->x + width - max_x );  src_addy *= (gfilter->has_alpha ? 4 : 3);    dest_cp = in_data;  dest_cp += ((min_y * vinfo_in->width) + min_x) * 3;  /* Figure out the destination addy, which will be at MOST vinfo->width,     and at LEAST 0 */  dest_addy = (vinfo_in->width - max_x + min_x) * 3;  if( gfilter->has_alpha ) {    for( y=min_y; y< max_y; y++ ){      for( x= min_x; x< max_x; x++ ){	alphaval   = *(src_cp + 3);	alphainv = 255 - alphaval;	*(dest_cp + 0) = alpha_map[ alphaval ][*(src_cp + 0)] +	  alpha_map[ alphainv ][*(dest_cp + 0)];	*(dest_cp + 1) = alpha_map[ alphaval ][*(src_cp + 1)] +	  alpha_map[ alphainv ][*(dest_cp + 1)];	*(dest_cp + 2) = alpha_map[ alphaval ][*(src_cp + 2)] +	  alpha_map[ alphainv ][*(dest_cp + 2)];		dest_cp += 3;	src_cp += 4;      }      dest_cp += dest_addy;      src_cp  += src_addy;    }  } else {    for( y=min_y; y< max_y; y++ ){      for( x= min_x; x< max_x; x++ ){	*(dest_cp + 0) = *(src_cp + 0);	*(dest_cp + 1) = *(src_cp + 1);	*(dest_cp + 2) = *(src_cp + 2);	dest_cp += 3;	src_cp += 3;      }      dest_cp += dest_addy;      src_cp  += src_addy;    }  }}void filter_validation(){  Filter_Init_Func init = filter_init;  Filter_Deinit_Func deinit = filter_deinit;  Filter_Func_Func func = filter_func;  if( init != NULL && deinit != NULL && func != NULL ) return;}/* * modinfo_query:  Routine to return information about the variables *                 accessed by this particular module. * * Return values:  Returns a malloced ModInfo structure, for which *                 the caller must free, or NULL on failure. */ModInfo *modinfo_query(){  ModInfo *res;  if( (res = modinfo_create( 3 )) == NULL )    return NULL;  modinfo_varname_set( res, 0, "file" );  modinfo_desc_set( res, 0, "File location of the image to import" );  res->vars[ 0 ].type = MODINFO_TYPE_STR;  modinfo_varname_set( res, 1, "x" );  modinfo_desc_set( res, 1, "X location to place the picture" );  res->vars[ 1 ].type = MODINFO_TYPE_INT;  modinfo_varname_set( res, 2, "x" );  modinfo_desc_set( res, 2, "Y location to place the picture" );  res->vars[ 2 ].type = MODINFO_TYPE_INT;  return res;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美四级电影网| av亚洲精华国产精华| 亚洲福利视频导航| 亚洲一区在线视频| 亚洲国产中文字幕在线视频综合| 亚洲欧美日韩在线不卡| 亚洲男人的天堂av| 亚洲地区一二三色| 午夜欧美视频在线观看| 奇米影视一区二区三区| 精彩视频一区二区| 成人av在线一区二区| 91成人免费电影| 91精品国产综合久久久久久久久久 | 岛国av在线一区| 成人动漫视频在线| 欧美丝袜第三区| 精品少妇一区二区三区在线播放| 久久综合给合久久狠狠狠97色69| 欧美国产97人人爽人人喊| 亚洲视频在线观看三级| 亚洲成人动漫一区| 国产美女在线精品| 99精品一区二区三区| 欧美日韩成人高清| 精品国产1区2区3区| 亚洲欧洲日产国码二区| 亚洲一区二区av电影| 精品一区二区三区欧美| proumb性欧美在线观看| 欧美高清视频在线高清观看mv色露露十八| 日韩欧美在线1卡| 亚洲欧美一区二区三区孕妇| 日本不卡一区二区三区高清视频| 国产福利一区二区三区| 欧美挠脚心视频网站| 国产精品久线观看视频| 蜜桃一区二区三区在线观看| 99精品偷自拍| 久久影院视频免费| 污片在线观看一区二区| 99国产欧美久久久精品| 日韩欧美高清一区| 亚洲国产成人精品视频| www.欧美日韩| 久久久久国产精品厨房| 偷拍一区二区三区| 91行情网站电视在线观看高清版| 精品国产一区久久| 午夜精品视频在线观看| 色呦呦网站一区| 国产午夜精品一区二区| 奇米精品一区二区三区在线观看一| 不卡的av电影| 国产欧美日韩在线视频| 久久福利视频一区二区| 欧美日韩aaaaa| 亚洲人成在线播放网站岛国| 国产成人精品一区二区三区网站观看| 91精品国产91热久久久做人人| 中文字幕国产精品一区二区| 日韩av一区二区三区四区| 色噜噜偷拍精品综合在线| 国产精品久久一级| av在线不卡电影| 国产精品久久毛片| 国产东北露脸精品视频| 久久久另类综合| 国产高清在线精品| 国产人妖乱国产精品人妖| 国产精品123| 日本一区二区三区久久久久久久久不| 国产一区在线观看麻豆| 亚洲精品一线二线三线| 国产东北露脸精品视频| 国产精品久久久久精k8| av电影一区二区| 亚洲精品久久久蜜桃| 欧洲av在线精品| 天堂午夜影视日韩欧美一区二区| 欧美日本一道本在线视频| 日日夜夜精品视频免费| 欧美成人三级在线| 国产成人综合亚洲网站| 亚洲欧洲在线观看av| 一本到不卡免费一区二区| 一区二区高清视频在线观看| 在线观看不卡视频| 麻豆精品在线视频| 国产精品入口麻豆九色| 色狠狠一区二区| 欧美aaaaa成人免费观看视频| 欧美成人一区二区| 不卡的av网站| 亚洲123区在线观看| 26uuu精品一区二区| 91色|porny| 美女精品一区二区| 国产精品国产三级国产| 3atv在线一区二区三区| 国产69精品久久久久777| 亚洲黄色录像片| 26uuuu精品一区二区| 99精品久久99久久久久| 日本系列欧美系列| 国产精品毛片大码女人| 88在线观看91蜜桃国自产| 国产成人免费视频网站高清观看视频| 亚洲欧美日韩国产另类专区| 日韩视频免费观看高清在线视频| 成人黄色一级视频| 日韩精品欧美成人高清一区二区| 国产欧美一区在线| 欧美一级在线免费| 91网页版在线| 国产精品一区二区久激情瑜伽| 亚洲国产一区二区视频| 国产日韩精品一区二区三区在线| 欧美视频在线一区二区三区 | 成人午夜免费视频| 亚洲va欧美va人人爽| 国产精品色呦呦| 日韩免费福利电影在线观看| 在线观看视频一区二区欧美日韩| 国产福利不卡视频| 看电视剧不卡顿的网站| 无码av中文一区二区三区桃花岛| 国产精品福利一区二区| 日韩久久久精品| 欧美一区二区在线观看| 91理论电影在线观看| 国产成人av在线影院| 九色porny丨国产精品| 日韩精品电影在线| 一个色在线综合| 综合色中文字幕| 国产精品久久久久久久久久久免费看 | 天堂久久久久va久久久久| 亚洲三级电影网站| 中文字幕不卡一区| 国产欧美一区二区精品仙草咪| 精品三级在线观看| 欧美成人精品1314www| 欧美日本在线播放| 在线不卡中文字幕| 7777精品久久久大香线蕉| 欧美日韩国产中文| 欧美日韩高清在线播放| 欧美日韩另类一区| 欧美久久久久久蜜桃| 91精品蜜臀在线一区尤物| 欧美人体做爰大胆视频| 欧美精品aⅴ在线视频| 欧美伦理影视网| 欧美一区二区三区啪啪| 日韩精品一区二区三区老鸭窝| 日韩久久久久久| 欧美激情中文不卡| 亚洲另类春色校园小说| 亚洲成在线观看| 久久99国产精品免费网站| 国产一区日韩二区欧美三区| 国产福利精品导航| 色综合久久久久综合体桃花网| 色综合久久综合网97色综合 | 国产成人av电影| 99精品欧美一区二区蜜桃免费 | 成人午夜电影网站| av成人老司机| 欧美三级电影网| 欧美成人官网二区| 亚洲欧洲成人av每日更新| 夜夜嗨av一区二区三区四季av| 三级不卡在线观看| 国产麻豆精品在线观看| 91蜜桃视频在线| 日韩免费一区二区| 亚洲欧洲99久久| 日韩国产一二三区| 成人h动漫精品一区二| 欧美性猛交xxxxxxxx| 精品国产露脸精彩对白| 中文字幕日本不卡| 免费在线观看精品| 一本色道**综合亚洲精品蜜桃冫| 91精品国产色综合久久久蜜香臀| 久久久久久亚洲综合影院红桃| 亚洲欧美一区二区三区极速播放 | 欧美男生操女生| 国产精品色呦呦| 日产精品久久久久久久性色| 国内精品第一页| 欧美日韩国产经典色站一区二区三区 | 久草这里只有精品视频| 91视频.com| 国产亚洲一区字幕| 免费人成黄页网站在线一区二区| 床上的激情91.| 久久一区二区视频| 午夜精品在线视频一区|