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

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

?? af.c

?? 自己移植的linux下的流媒體播放器原代碼,支持mms協議,支持ftp和http協議.
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <stdio.h>#include <stdlib.h>#include <string.h>#ifdef HAVE_MALLOC_H#include <malloc.h>#endif#include "af.h"// Static list of filtersextern af_info_t af_info_dummy;extern af_info_t af_info_delay;extern af_info_t af_info_channels;extern af_info_t af_info_format;extern af_info_t af_info_resample;extern af_info_t af_info_volume;extern af_info_t af_info_equalizer;extern af_info_t af_info_gate;extern af_info_t af_info_comp;extern af_info_t af_info_pan;extern af_info_t af_info_surround;extern af_info_t af_info_sub;extern af_info_t af_info_export;extern af_info_t af_info_volnorm;extern af_info_t af_info_extrastereo;extern af_info_t af_info_lavcresample;extern af_info_t af_info_sweep;extern af_info_t af_info_hrtf;extern af_info_t af_info_ladspa;extern af_info_t af_info_center;static af_info_t* filter_list[]={    &af_info_dummy,   &af_info_delay,   &af_info_channels,   &af_info_format,   &af_info_resample,   &af_info_volume,   &af_info_equalizer,   &af_info_gate,   &af_info_comp,   &af_info_pan,   &af_info_surround,   &af_info_sub,#ifdef HAVE_SYS_MMAN_H   &af_info_export,#endif   &af_info_volnorm,   &af_info_extrastereo,#ifdef USE_LIBAVCODEC   &af_info_lavcresample,#endif   &af_info_sweep,   &af_info_hrtf,#ifdef HAVE_LADSPA   &af_info_ladspa,#endif   &af_info_center,   NULL };// Message printingaf_msg_cfg_t af_msg_cfg={0,NULL,NULL};// CPU speedint* af_cpu_speed = NULL;/* Find a filter in the static list of filters using it's name. This   function is used internally */af_info_t* af_find(char*name){  int i=0;  while(filter_list[i]){    if(!strcmp(filter_list[i]->name,name))      return filter_list[i];    i++;  }  af_msg(AF_MSG_ERROR,"Couldn't find audio filter '%s'\n",name);  return NULL;} /* Find filter in the dynamic filter list using it's name This   function is used for finding already initialized filters */af_instance_t* af_get(af_stream_t* s, char* name){  af_instance_t* af=s->first;   // Find the filter  while(af != NULL){    if(!strcmp(af->info->name,name))      return af;    af=af->next;  }  return NULL;}/*/ Function for creating a new filter of type name. The name may  contain the commandline parameters for the filter */af_instance_t* af_create(af_stream_t* s, char* name){  char* cmdline = name;  // Allocate space for the new filter and reset all pointers  af_instance_t* new=malloc(sizeof(af_instance_t));  if(!new){    af_msg(AF_MSG_ERROR,"[libaf] Could not allocate memory\n");    return NULL;  }    memset(new,0,sizeof(af_instance_t));  // Check for commandline parameters  strsep(&cmdline, "=");  // Find filter from name  if(NULL == (new->info=af_find(name)))    return NULL;  /* Make sure that the filter is not already in the list if it is     non-reentrant */  if(new->info->flags & AF_FLAGS_NOT_REENTRANT){    if(af_get(s,name)){      af_msg(AF_MSG_ERROR,"[libaf] There can only be one instance of" 	     " the filter '%s' in each stream\n",name);        free(new);      return NULL;    }  }    af_msg(AF_MSG_VERBOSE,"[libaf] Adding filter %s \n",name);    // Initialize the new filter  if(AF_OK == new->info->open(new) &&      AF_ERROR < new->control(new,AF_CONTROL_POST_CREATE,&s->cfg)){    if(cmdline){      if(AF_ERROR<new->control(new,AF_CONTROL_COMMAND_LINE,cmdline))	return new;    }    else      return new;   }    free(new);  af_msg(AF_MSG_ERROR,"[libaf] Couldn't create or open audio filter '%s'\n",	 name);    return NULL;}/* Create and insert a new filter of type name before the filter in the   argument. This function can be called during runtime, the return   value is the new filter */af_instance_t* af_prepend(af_stream_t* s, af_instance_t* af, char* name){  // Create the new filter and make sure it is OK  af_instance_t* new=af_create(s,name);  if(!new)    return NULL;  // Update pointers  new->next=af;  if(af){    new->prev=af->prev;    af->prev=new;  }  else    s->last=new;  if(new->prev)    new->prev->next=new;  else    s->first=new;  return new;}/* Create and insert a new filter of type name after the filter in the   argument. This function can be called during runtime, the return   value is the new filter */af_instance_t* af_append(af_stream_t* s, af_instance_t* af, char* name){  // Create the new filter and make sure it is OK  af_instance_t* new=af_create(s,name);  if(!new)    return NULL;  // Update pointers  new->prev=af;  if(af){    new->next=af->next;    af->next=new;  }  else    s->first=new;  if(new->next)    new->next->prev=new;  else    s->last=new;  return new;}// Uninit and remove the filter "af"void af_remove(af_stream_t* s, af_instance_t* af){  if(!af) return;  // Print friendly message   af_msg(AF_MSG_VERBOSE,"[libaf] Removing filter %s \n",af->info->name);   // Notify filter before changing anything  af->control(af,AF_CONTROL_PRE_DESTROY,0);  // Detach pointers  if(af->prev)    af->prev->next=af->next;  else    s->first=af->next;  if(af->next)    af->next->prev=af->prev;  else    s->last=af->prev;  // Uninitialize af and free memory     af->uninit(af);  free(af);}/* Reinitializes all filters downstream from the filter given in the   argument the return value is AF_OK if success and AF_ERROR if   failure */int af_reinit(af_stream_t* s, af_instance_t* af){  do{    af_data_t in; // Format of the input to current filter    int rv=0; // Return value    // Check if there are any filters left in the list    if(NULL == af){      if(!(af=af_append(s,s->first,"dummy"))) 	return AF_UNKNOWN;       else	return AF_ERROR;    }    // Check if this is the first filter     if(!af->prev)       memcpy(&in,&(s->input),sizeof(af_data_t));    else      memcpy(&in,af->prev->data,sizeof(af_data_t));    // Reset just in case...    in.audio=NULL;    in.len=0;        rv = af->control(af,AF_CONTROL_REINIT,&in);    switch(rv){    case AF_OK:	af = af->next;      break;    case AF_FALSE:{ // Configuration filter is needed      // Do auto insertion only if force is not specified      if((AF_INIT_TYPE_MASK & s->cfg.force) != AF_INIT_FORCE){	af_instance_t* new = NULL;	// Insert channels filter	if((af->prev?af->prev->data->nch:s->input.nch) != in.nch){	  // Create channels filter	  if(NULL == (new = af_prepend(s,af,"channels")))	    return AF_ERROR;	  // Set number of output channels	  if(AF_OK != (rv = new->control(new,AF_CONTROL_CHANNELS,&in.nch)))	    return rv;	  // Initialize channels filter	  if(!new->prev) 	    memcpy(&in,&(s->input),sizeof(af_data_t));	  else	    memcpy(&in,new->prev->data,sizeof(af_data_t));	  if(AF_OK != (rv = new->control(new,AF_CONTROL_REINIT,&in)))	    return rv;	}	// Insert format filter	if((af->prev?af->prev->data->format:s->input.format) != in.format){	  // Create format filter	  if(NULL == (new = af_prepend(s,af,"format")))	    return AF_ERROR;	  // Set output bits per sample	  in.format |= af_bits2fmt(in.bps*8);	  if(AF_OK != (rv = new->control(new,AF_CONTROL_FORMAT_FMT,&in.format)))	    return rv;	  // Initialize format filter	  if(!new->prev) 	    memcpy(&in,&(s->input),sizeof(af_data_t));	  else	    memcpy(&in,new->prev->data,sizeof(af_data_t));	  if(AF_OK != (rv = new->control(new,AF_CONTROL_REINIT,&in)))	    return rv;	}	if(!new){ // Should _never_ happen	  af_msg(AF_MSG_ERROR,"[libaf] Unable to correct audio format. " 		 "This error should never uccur, please send bugreport.\n");	  return AF_ERROR;	}	af=new->next;      }      break;    }    case AF_DETACH:{ // Filter is redundant and wants to be unloaded      // Do auto remove only if force is not specified      if((AF_INIT_TYPE_MASK & s->cfg.force) != AF_INIT_FORCE){	af_instance_t* aft=af->prev;	af_remove(s,af);	if(aft)	  af=aft->next;	else	  af=s->first; // Restart configuration      }      break;    }    default:      af_msg(AF_MSG_ERROR,"[libaf] Reinitialization did not work, audio" 	     " filter '%s' returned error code %i\n",af->info->name,rv);      return AF_ERROR;    }  }while(af);  return AF_OK;}// Uninit and remove all filtersvoid af_uninit(af_stream_t* s){  while(s->first)    af_remove(s,s->first);}/* Initialize the stream "s". This function creates a new filter list   if necessary according to the values set in input and output. Input   and output should contain the format of the current movie and the   formate of the preferred output respectively. The function is   reentrant i.e. if called with an already initialized stream the   stream will be reinitialized. If the binary parameter   "force_output" is set, the output format will be converted to the   format given in "s", otherwise the output fromat in the last filter   will be copied "s". The return value is 0 if success and -1 if   failure */int af_init(af_stream_t* s, int force_output){  int i=0;  // Sanity check  if(!s) return -1;  // Precaution in case caller is misbehaving  s->input.audio  = s->output.audio  = NULL;  s->input.len    = s->output.len    = 0;  // Figure out how fast the machine is  if(AF_INIT_AUTO == (AF_INIT_TYPE_MASK & s->cfg.force))    s->cfg.force = (s->cfg.force & ~AF_INIT_TYPE_MASK) | AF_INIT_TYPE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀久久久久久久| 捆绑调教一区二区三区| 欧美日韩黄色影视| 成人国产在线观看| 国产精品一区二区在线观看不卡 | 成人av集中营| 日韩欧美高清一区| 欧美一级黄色片| 91精品国产高清一区二区三区蜜臀| 91国产福利在线| 欧洲精品在线观看| 666欧美在线视频| 欧美一级黄色大片| 洋洋成人永久网站入口| 一级做a爱片久久| 国产999精品久久久久久| 国产成人免费xxxxxxxx| 成人午夜视频在线观看| 在线免费观看成人短视频| 国产精品青草久久| 自拍偷拍亚洲综合| 午夜精品爽啪视频| 久草在线在线精品观看| 成人福利视频在线| 国产日韩一级二级三级| 亚洲精品第一国产综合野| 亚洲成av人片一区二区| 麻豆国产一区二区| 精品国产一区二区三区av性色| 欧美大片顶级少妇| 九九精品一区二区| 久久久www免费人成精品| 中文字幕五月欧美| 热久久一区二区| 欧美一级免费观看| 久久丁香综合五月国产三级网站| 日韩一区二区在线观看视频播放| 视频一区视频二区中文| 国产福利不卡视频| 国产片一区二区| 91网上在线视频| 精品久久久久久综合日本欧美| 亚洲同性gay激情无套| 成人中文字幕合集| 亚洲激情图片小说视频| 欧美精品v日韩精品v韩国精品v| 国产精品欧美经典| 91久久精品一区二区三| 午夜免费久久看| www国产亚洲精品久久麻豆| 夜色激情一区二区| 欧美一级在线观看| 国产一二三精品| 欧美成人bangbros| 国产盗摄视频一区二区三区| 1000精品久久久久久久久| 在线亚洲免费视频| 青娱乐精品在线视频| 国产午夜亚洲精品羞羞网站| 免费日韩伦理电影| 国产精品国产三级国产普通话99| 韩国午夜理伦三级不卡影院| 欧美精品在线观看播放| 麻豆精品视频在线| ...xxx性欧美| 91精品国产综合久久久久久久 | 国产老妇另类xxxxx| 中文字幕一区二区三区蜜月| 欧美日韩精品一区二区天天拍小说| 久久精品999| 亚洲色欲色欲www在线观看| 欧美精品一卡二卡| 91亚洲国产成人精品一区二三| 亚洲二区在线观看| 欧美三级中文字幕在线观看| 综合激情成人伊人| 日韩免费看的电影| 色婷婷av一区二区三区软件| 亚洲欧洲成人精品av97| 91麻豆精品国产91久久久资源速度 | 欧美老肥妇做.爰bbww| 国产成人精品影视| 蜜桃视频在线观看一区| 亚洲伦理在线免费看| 国产日产欧美一区| 91精品国产入口| 在线精品视频一区二区三四| 粉嫩av一区二区三区| 毛片基地黄久久久久久天堂| 一区二区三区四区在线播放| 国产亚洲欧美日韩日本| 91麻豆精品国产91久久久资源速度 | 懂色av一区二区在线播放| 日韩在线a电影| 日韩伦理电影网| 日本一区二区三区视频视频| 欧美成人精品福利| 欧美一区二区三区在线看| 欧美色男人天堂| 色婷婷综合久久久中文字幕| jlzzjlzz亚洲日本少妇| 亚洲综合一二三区| 7878成人国产在线观看| 欧美丝袜自拍制服另类| 麻豆精品久久精品色综合| 五月激情综合婷婷| 亚洲电影第三页| 亚洲成人av中文| 亚洲成人动漫av| 亚洲成a人片在线不卡一二三区| 亚洲精品videosex极品| 亚洲精品国产一区二区三区四区在线| 国产精品久久影院| 国产精品久久久久毛片软件| 国产精品人妖ts系列视频| 亚洲国产精品精华液2区45| 91国偷自产一区二区开放时间 | 久久免费看少妇高潮| 精品成人免费观看| 欧美精品一区二区久久婷婷| 精品卡一卡二卡三卡四在线| 精品1区2区在线观看| 国产夜色精品一区二区av| 日本一区二区三级电影在线观看| 国产欧美一区二区三区沐欲 | 精品卡一卡二卡三卡四在线| 久久综合狠狠综合久久激情| 久久久久久久久久看片| 久久久久久久电影| 亚洲欧美日韩国产另类专区 | 国产suv精品一区二区6| av在线一区二区| 欧美亚洲国产一区二区三区| 欧美在线免费播放| 制服丝袜亚洲播放| 久久久精品中文字幕麻豆发布| 国产亚洲精品7777| 一区二区三区精品视频| 日本特黄久久久高潮 | 国产日产欧产精品推荐色| 国产精品美女一区二区| 亚洲永久精品国产| 精品一区二区三区视频在线观看 | 国产精品一区在线观看乱码| www.欧美.com| 777色狠狠一区二区三区| 国产天堂亚洲国产碰碰| 亚洲第一在线综合网站| 国产精品一区二区男女羞羞无遮挡| 99久久99久久精品国产片果冻| 精品一区二区综合| 一本色道a无线码一区v| 欧美一区二区性放荡片| 国产精品久久三区| 男女性色大片免费观看一区二区 | 久久精品国产免费| 91蜜桃婷婷狠狠久久综合9色| 7777精品伊人久久久大香线蕉的| 久久奇米777| 丝袜美腿高跟呻吟高潮一区| 成人午夜精品一区二区三区| 欧美嫩在线观看| 中文字幕一区二区三区四区| 美女www一区二区| 欧美综合亚洲图片综合区| 久久毛片高清国产| 免费亚洲电影在线| 欧美伊人久久久久久久久影院| 久久人人爽爽爽人久久久| 天堂一区二区在线| 91黄色激情网站| 亚洲国产电影在线观看| 蜜臀av性久久久久av蜜臀妖精| 91国模大尺度私拍在线视频| 国产日韩欧美精品电影三级在线| 蜜桃视频在线观看一区二区| 在线欧美一区二区| 中日韩av电影| 国产综合色视频| 精品国产免费一区二区三区香蕉| 亚洲成人av一区二区| 91色综合久久久久婷婷| 国产精品久久久久影院亚瑟 | 国产精品国产三级国产aⅴ中文| 久久9热精品视频| 91精品国产aⅴ一区二区| 亚洲与欧洲av电影| 欧洲av一区二区嗯嗯嗯啊| 亚洲免费伊人电影| 91在线云播放| 亚洲日本欧美天堂| 色嗨嗨av一区二区三区| 亚洲三级在线播放| 91在线观看免费视频| 亚洲欧洲精品一区二区三区不卡| 国产成人免费av在线| 欧美激情一区二区三区| 成人精品小蝌蚪| 亚洲精品欧美在线| 欧美日韩综合一区|