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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sbc.c

?? 基于LINUX內(nèi)核驅(qū)動(dòng)的開發(fā)
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/* * *  Bluetooth low-complexity, subband codec (SBC) library * *  Copyright (C) 2004-2008  Marcel Holtmann <marcel@holtmann.org> *  Copyright (C) 2004-2005  Henryk Ploetz <henryk@ploetzli.ch> *  Copyright (C) 2005-2008  Brad Midgley <bmidgley@xmission.com> * * *  This library is free software; you can redistribute it and/or *  modify it under the terms of the GNU Lesser General Public *  License as published by the Free Software Foundation; either *  version 2.1 of the License, or (at your option) any later version. * *  This library 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 *  Lesser General Public License for more details. * *  You should have received a copy of the GNU Lesser General Public *  License along with this library; if not, write to the Free Software *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA * *//* todo items:  use a log2 table for byte integer scale factors calculation (sum log2 results  for high and low bytes) fill bitpool by 16 bits instead of one at a time in  bits allocation/bitpool generation port to the dsp*/#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <stdio.h>#include <errno.h>#include <malloc.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include "sbc_math.h"#include "sbc_tables.h"#include "sbc.h"#define SBC_SYNCWORD	0x9C/* This structure contains an unpacked SBC frame.   Yes, there is probably quite some unused space herein */struct sbc_frame {	uint8_t frequency;	uint8_t block_mode;	uint8_t blocks;	enum {		MONO		= SBC_MODE_MONO,		DUAL_CHANNEL	= SBC_MODE_DUAL_CHANNEL,		STEREO		= SBC_MODE_STEREO,		JOINT_STEREO	= SBC_MODE_JOINT_STEREO	} mode;	uint8_t channels;	enum {		LOUDNESS	= SBC_AM_LOUDNESS,		SNR		= SBC_AM_SNR	} allocation;	uint8_t subband_mode;	uint8_t subbands;	uint8_t bitpool;	uint8_t codesize;	uint8_t length;	/* bit number x set means joint stereo has been used in subband x */	uint8_t joint;	/* only the lower 4 bits of every element are to be used */	uint8_t scale_factor[2][8];	/* raw integer subband samples in the frame */	uint16_t audio_sample[16][2][8];	int32_t sb_sample_f[16][2][8];	int32_t sb_sample[16][2][8];	/* modified subband samples */	int16_t pcm_sample[2][16*8];	/* original pcm audio samples */};struct sbc_decoder_state {	int subbands;	int32_t V[2][170];	int offset[2][16];};struct sbc_encoder_state {	int subbands;	int position[2];	int32_t X[2][160];};/* * Calculates the CRC-8 of the first len bits in data */static const uint8_t crc_table[256] = {	0x00, 0x1D, 0x3A, 0x27, 0x74, 0x69, 0x4E, 0x53,	0xE8, 0xF5, 0xD2, 0xCF, 0x9C, 0x81, 0xA6, 0xBB,	0xCD, 0xD0, 0xF7, 0xEA, 0xB9, 0xA4, 0x83, 0x9E,	0x25, 0x38, 0x1F, 0x02, 0x51, 0x4C, 0x6B, 0x76,	0x87, 0x9A, 0xBD, 0xA0, 0xF3, 0xEE, 0xC9, 0xD4,	0x6F, 0x72, 0x55, 0x48, 0x1B, 0x06, 0x21, 0x3C,	0x4A, 0x57, 0x70, 0x6D, 0x3E, 0x23, 0x04, 0x19,	0xA2, 0xBF, 0x98, 0x85, 0xD6, 0xCB, 0xEC, 0xF1,	0x13, 0x0E, 0x29, 0x34, 0x67, 0x7A, 0x5D, 0x40,	0xFB, 0xE6, 0xC1, 0xDC, 0x8F, 0x92, 0xB5, 0xA8,	0xDE, 0xC3, 0xE4, 0xF9, 0xAA, 0xB7, 0x90, 0x8D,	0x36, 0x2B, 0x0C, 0x11, 0x42, 0x5F, 0x78, 0x65,	0x94, 0x89, 0xAE, 0xB3, 0xE0, 0xFD, 0xDA, 0xC7,	0x7C, 0x61, 0x46, 0x5B, 0x08, 0x15, 0x32, 0x2F,	0x59, 0x44, 0x63, 0x7E, 0x2D, 0x30, 0x17, 0x0A,	0xB1, 0xAC, 0x8B, 0x96, 0xC5, 0xD8, 0xFF, 0xE2,	0x26, 0x3B, 0x1C, 0x01, 0x52, 0x4F, 0x68, 0x75,	0xCE, 0xD3, 0xF4, 0xE9, 0xBA, 0xA7, 0x80, 0x9D,	0xEB, 0xF6, 0xD1, 0xCC, 0x9F, 0x82, 0xA5, 0xB8,	0x03, 0x1E, 0x39, 0x24, 0x77, 0x6A, 0x4D, 0x50,	0xA1, 0xBC, 0x9B, 0x86, 0xD5, 0xC8, 0xEF, 0xF2,	0x49, 0x54, 0x73, 0x6E, 0x3D, 0x20, 0x07, 0x1A,	0x6C, 0x71, 0x56, 0x4B, 0x18, 0x05, 0x22, 0x3F,	0x84, 0x99, 0xBE, 0xA3, 0xF0, 0xED, 0xCA, 0xD7,	0x35, 0x28, 0x0F, 0x12, 0x41, 0x5C, 0x7B, 0x66,	0xDD, 0xC0, 0xE7, 0xFA, 0xA9, 0xB4, 0x93, 0x8E,	0xF8, 0xE5, 0xC2, 0xDF, 0x8C, 0x91, 0xB6, 0xAB,	0x10, 0x0D, 0x2A, 0x37, 0x64, 0x79, 0x5E, 0x43,	0xB2, 0xAF, 0x88, 0x95, 0xC6, 0xDB, 0xFC, 0xE1,	0x5A, 0x47, 0x60, 0x7D, 0x2E, 0x33, 0x14, 0x09,	0x7F, 0x62, 0x45, 0x58, 0x0B, 0x16, 0x31, 0x2C,	0x97, 0x8A, 0xAD, 0xB0, 0xE3, 0xFE, 0xD9, 0xC4};static uint8_t sbc_crc8(const uint8_t *data, size_t len){	uint8_t crc = 0x0f;	size_t i;	uint8_t octet;	for (i = 0; i < len / 8; i++)		crc = crc_table[crc ^ data[i]];	octet = data[i];	for (i = 0; i < len % 8; i++) {		char bit = ((octet ^ crc) & 0x80) >> 7;		crc = ((crc & 0x7f) << 1) ^ (bit ? 0x1d : 0);		octet = octet << 1;	}	return crc;}/* * Code straight from the spec to calculate the bits array * Takes a pointer to the frame in question, a pointer to the bits array and * the sampling frequency (as 2 bit integer) */static void sbc_calculate_bits(const struct sbc_frame *frame, int (*bits)[8]){	uint8_t sf = frame->frequency;	if (frame->mode == MONO || frame->mode == DUAL_CHANNEL) {		int bitneed[2][8], loudness, max_bitneed, bitcount, slicecount, bitslice;		int ch, sb;		for (ch = 0; ch < frame->channels; ch++) {			max_bitneed = 0;			if (frame->allocation == SNR) {				for (sb = 0; sb < frame->subbands; sb++) {					bitneed[ch][sb] = frame->scale_factor[ch][sb];					if (bitneed[ch][sb] > max_bitneed)						max_bitneed = bitneed[ch][sb];				}			} else {				for (sb = 0; sb < frame->subbands; sb++) {					if (frame->scale_factor[ch][sb] == 0)						bitneed[ch][sb] = -5;					else {						if (frame->subbands == 4)							loudness = frame->scale_factor[ch][sb] - sbc_offset4[sf][sb];						else							loudness = frame->scale_factor[ch][sb] - sbc_offset8[sf][sb];						if (loudness > 0)							bitneed[ch][sb] = loudness / 2;						else							bitneed[ch][sb] = loudness;					}					if (bitneed[ch][sb] > max_bitneed)						max_bitneed = bitneed[ch][sb];				}			}			bitcount = 0;			slicecount = 0;			bitslice = max_bitneed + 1;			do {				bitslice--;				bitcount += slicecount;				slicecount = 0;				for (sb = 0; sb < frame->subbands; sb++) {					if ((bitneed[ch][sb] > bitslice + 1) && (bitneed[ch][sb] < bitslice + 16))						slicecount++;					else if (bitneed[ch][sb] == bitslice + 1)						slicecount += 2;				}			} while (bitcount + slicecount < frame->bitpool);			if (bitcount + slicecount == frame->bitpool) {				bitcount += slicecount;				bitslice--;			}			for (sb = 0; sb < frame->subbands; sb++) {				if (bitneed[ch][sb] < bitslice + 2)					bits[ch][sb] = 0;				else {					bits[ch][sb] = bitneed[ch][sb] - bitslice;					if (bits[ch][sb] > 16)						bits[ch][sb] = 16;				}			}			for (sb = 0; bitcount < frame->bitpool && sb < frame->subbands; sb++) {				if ((bits[ch][sb] >= 2) && (bits[ch][sb] < 16)) {					bits[ch][sb]++;					bitcount++;				} else if ((bitneed[ch][sb] == bitslice + 1) && (frame->bitpool > bitcount + 1)) {					bits[ch][sb] = 2;					bitcount += 2;				}			}			for (sb = 0; bitcount < frame->bitpool && sb < frame->subbands; sb++) {				if (bits[ch][sb] < 16) {					bits[ch][sb]++;					bitcount++;				}			}		}	} else if (frame->mode == STEREO || frame->mode == JOINT_STEREO) {		int bitneed[2][8], loudness, max_bitneed, bitcount, slicecount, bitslice;		int ch, sb;		max_bitneed = 0;		if (frame->allocation == SNR) {			for (ch = 0; ch < 2; ch++) {				for (sb = 0; sb < frame->subbands; sb++) {					bitneed[ch][sb] = frame->scale_factor[ch][sb];					if (bitneed[ch][sb] > max_bitneed)						max_bitneed = bitneed[ch][sb];				}			}		} else {			for (ch = 0; ch < 2; ch++) {				for (sb = 0; sb < frame->subbands; sb++) {					if (frame->scale_factor[ch][sb] == 0)						bitneed[ch][sb] = -5;					else {						if (frame->subbands == 4)							loudness = frame->scale_factor[ch][sb] - sbc_offset4[sf][sb];						else							loudness = frame->scale_factor[ch][sb] - sbc_offset8[sf][sb];						if (loudness > 0)							bitneed[ch][sb] = loudness / 2;						else							bitneed[ch][sb] = loudness;					}					if (bitneed[ch][sb] > max_bitneed)						max_bitneed = bitneed[ch][sb];				}			}		}		bitcount = 0;		slicecount = 0;		bitslice = max_bitneed + 1;		do {			bitslice--;			bitcount += slicecount;			slicecount = 0;			for (ch = 0; ch < 2; ch++) {				for (sb = 0; sb < frame->subbands; sb++) {					if ((bitneed[ch][sb] > bitslice + 1) && (bitneed[ch][sb] < bitslice + 16))						slicecount++;					else if (bitneed[ch][sb] == bitslice + 1)						slicecount += 2;				}			}		} while (bitcount + slicecount < frame->bitpool);		if (bitcount + slicecount == frame->bitpool) {			bitcount += slicecount;			bitslice--;		}		for (ch = 0; ch < 2; ch++) {			for (sb = 0; sb < frame->subbands; sb++) {				if (bitneed[ch][sb] < bitslice + 2) {					bits[ch][sb] = 0;				} else {					bits[ch][sb] = bitneed[ch][sb] - bitslice;					if (bits[ch][sb] > 16)						bits[ch][sb] = 16;				}			}		}		ch = 0;		sb = 0;		while (bitcount < frame->bitpool) {			if ((bits[ch][sb] >= 2) && (bits[ch][sb] < 16)) {				bits[ch][sb]++;				bitcount++;			} else if ((bitneed[ch][sb] == bitslice + 1) && (frame->bitpool > bitcount + 1)) {				bits[ch][sb] = 2;				bitcount += 2;			}			if (ch == 1) {				ch = 0;				sb++;				if (sb >= frame->subbands) break;			} else				ch = 1;		}		ch = 0;		sb = 0;		while (bitcount < frame->bitpool) {			if (bits[ch][sb] < 16) {				bits[ch][sb]++;				bitcount++;			}			if (ch == 1) {				ch = 0;				sb++;				if (sb >= frame->subbands) break;			} else				ch = 1;		}	}}/* * Unpacks a SBC frame at the beginning of the stream in data, * which has at most len bytes into frame. * Returns the length in bytes of the packed frame, or a negative * value on error. The error codes are: * *  -1   Data stream too short *  -2   Sync byte incorrect *  -3   CRC8 incorrect *  -4   Bitpool value out of bounds */static int sbc_unpack_frame(const uint8_t *data, struct sbc_frame *frame,				size_t len){	int consumed;	/* Will copy the parts of the header that are relevant to crc	 * calculation here */	uint8_t crc_header[11] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };	int crc_pos = 0;	int32_t temp;	int ch, sb, blk, bit;	/* channel, subband, block and bit standard				   counters */	int bits[2][8];		/* bits distribution */	int levels[2][8];	/* levels derived from that */	if (len < 4)		return -1;	if (data[0] != SBC_SYNCWORD)		return -2;	frame->frequency = (data[1] >> 6) & 0x03;	frame->block_mode = (data[1] >> 4) & 0x03;	switch (frame->block_mode) {	case SBC_BLK_4:		frame->blocks = 4;		break;	case SBC_BLK_8:		frame->blocks = 8;		break;	case SBC_BLK_12:		frame->blocks = 12;		break;	case SBC_BLK_16:		frame->blocks = 16;		break;	}	frame->mode = (data[1] >> 2) & 0x03;	switch (frame->mode) {	case MONO:		frame->channels = 1;		break;	case DUAL_CHANNEL:	/* fall-through */	case STEREO:	case JOINT_STEREO:		frame->channels = 2;		break;	}	frame->allocation = (data[1] >> 1) & 0x01;	frame->subband_mode = (data[1] & 0x01);	frame->subbands = frame->subband_mode ? 8 : 4;	frame->bitpool = data[2];	if ((frame->mode == MONO || frame->mode == DUAL_CHANNEL) &&			frame->bitpool > 16 * frame->subbands)		return -4;	if ((frame->mode == STEREO || frame->mode == JOINT_STEREO) &&			frame->bitpool > 32 * frame->subbands)		return -4;	/* data[3] is crc, we're checking it later */	consumed = 32;	crc_header[0] = data[1];	crc_header[1] = data[2];	crc_pos = 16;	if (frame->mode == JOINT_STEREO) {		if (len * 8 < consumed + frame->subbands)			return -1;		frame->joint = 0x00;		for (sb = 0; sb < frame->subbands - 1; sb++)			frame->joint |= ((data[4] >> (7 - sb)) & 0x01) << sb;		if (frame->subbands == 4)			crc_header[crc_pos / 8] = data[4] & 0xf0;		else			crc_header[crc_pos / 8] = data[4];		consumed += frame->subbands;		crc_pos += frame->subbands;	}	if (len * 8 < consumed + (4 * frame->subbands * frame->channels))		return -1;	for (ch = 0; ch < frame->channels; ch++) {		for (sb = 0; sb < frame->subbands; sb++) {			/* FIXME assert(consumed % 4 == 0); */			frame->scale_factor[ch][sb] =				(data[consumed >> 3] >> (4 - (consumed & 0x7))) & 0x0F;			crc_header[crc_pos >> 3] |=				frame->scale_factor[ch][sb] << (4 - (crc_pos & 0x7));			consumed += 4;			crc_pos += 4;		}	}	if (data[3] != sbc_crc8(crc_header, crc_pos))		return -3;	sbc_calculate_bits(frame, bits);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
粉嫩一区二区三区性色av| 日韩欧美黄色影院| 精品噜噜噜噜久久久久久久久试看 | 国产精品一区久久久久| 99re8在线精品视频免费播放| 国产乱码精品一区二区三区忘忧草 | 777a∨成人精品桃花网| 美腿丝袜亚洲色图| 久久国产精品区| 欧美日韩电影在线| 亚洲欧美视频在线观看| 成人精品国产免费网站| 2022国产精品视频| 奇米影视一区二区三区| 91啪亚洲精品| 亚洲视频综合在线| 成人毛片在线观看| 久久久久国产精品人| 久久精品99久久久| 欧美成人午夜电影| 麻豆久久久久久久| 欧美性受xxxx黑人xyx性爽| 亚洲成av人片一区二区梦乃| 99久久免费视频.com| 国产精品污www在线观看| 久久国产麻豆精品| 精品国产1区二区| 另类小说图片综合网| 欧美丰满高潮xxxx喷水动漫| 亚洲国产精品久久艾草纯爱| 色中色一区二区| 亚洲激情六月丁香| 在线免费一区三区| 午夜精品国产更新| 欧美一区二区三级| 另类小说综合欧美亚洲| 欧美va亚洲va香蕉在线| 韩国中文字幕2020精品| 久久久久久久久久电影| 国产成人免费在线观看| 中文字幕在线不卡| 色综合久久88色综合天天| 亚洲一区二区三区四区不卡| 欧美老年两性高潮| 精品一区二区在线看| 国产午夜精品一区二区| 成人综合婷婷国产精品久久蜜臀 | 精品无人区卡一卡二卡三乱码免费卡| 91精品国产综合久久香蕉的特点| 日本一不卡视频| 精品国产乱码久久久久久夜甘婷婷 | 精品欧美乱码久久久久久| 蓝色福利精品导航| 国产精品伦一区| 色吧成人激情小说| 久久精品国产精品青草| 国产女人18毛片水真多成人如厕 | 丝袜a∨在线一区二区三区不卡| 欧美一区二区在线观看| 国产精品综合网| 一区二区三区四区中文字幕| 日韩视频免费观看高清在线视频| 国产毛片精品视频| 悠悠色在线精品| 精品国产一区二区三区av性色| 国产成人免费xxxxxxxx| 亚洲成人av一区二区三区| 久久亚洲欧美国产精品乐播| 色婷婷久久99综合精品jk白丝| 婷婷中文字幕综合| 欧美—级在线免费片| 欧美日韩不卡视频| 成人午夜在线播放| 免费看日韩a级影片| 17c精品麻豆一区二区免费| 日韩欧美国产1| 欧美性极品少妇| 成人禁用看黄a在线| 美腿丝袜亚洲综合| 亚洲黄色av一区| 国产午夜精品一区二区三区嫩草 | 国产成人免费av在线| 日韩高清电影一区| 亚洲欧美电影一区二区| 久久夜色精品一区| 日韩三级精品电影久久久 | 精品久久久久香蕉网| 在线精品视频免费播放| 国产精品一区二区三区网站| 轻轻草成人在线| 亚洲精品欧美在线| 国产精品国产三级国产aⅴ中文| 日韩一二在线观看| 欧美日韩精品欧美日韩精品一| 成人福利视频在线| 国产精品白丝av| 久久精品理论片| 免费看黄色91| 男人的天堂亚洲一区| 亚洲一区二区三区四区在线| 国产精品国产三级国产aⅴ入口| 精品国精品自拍自在线| 欧美一区二区三区成人| 欧美精品三级日韩久久| 欧美另类高清zo欧美| 欧美色图第一页| 欧美视频日韩视频| 欧美日韩国产高清一区二区三区| 在线中文字幕不卡| 欧美色男人天堂| 欧美日韩免费电影| 69堂亚洲精品首页| 欧美一区二区三区白人| 日韩免费观看高清完整版在线观看| 欧美色大人视频| 国产ts人妖一区二区| 成人午夜av电影| 99这里只有精品| 91国偷自产一区二区开放时间| 色综合久久精品| 欧美午夜精品理论片a级按摩| 欧美日韩精品一区二区| 91精品国产麻豆国产自产在线| 91精品国产综合久久精品性色 | 91丨porny丨户外露出| 日本黄色一区二区| 欧美裸体bbwbbwbbw| 欧美一级搡bbbb搡bbbb| 精品免费国产一区二区三区四区| 久久综合狠狠综合久久激情| 欧美—级在线免费片| 亚洲乱码一区二区三区在线观看| 亚洲欧美日韩精品久久久久| 亚洲超碰97人人做人人爱| 老司机精品视频导航| 成人激情电影免费在线观看| 色婷婷综合五月| 日韩一区二区精品葵司在线 | voyeur盗摄精品| 欧美三级三级三级爽爽爽| 日韩免费高清av| 国产精品亲子乱子伦xxxx裸| 亚洲精品高清在线| 久久99精品国产.久久久久久| 大白屁股一区二区视频| 欧美喷潮久久久xxxxx| 精品区一区二区| 一区二区三区在线观看国产| 日本视频一区二区三区| 风间由美性色一区二区三区| 欧美日韩精品一二三区| 日本一区二区三级电影在线观看| 一区二区欧美精品| 国产一区视频在线看| 欧美亚洲动漫精品| 中文字幕久久午夜不卡| 视频一区二区三区在线| 岛国一区二区在线观看| 在线播放国产精品二区一二区四区| 日本一区二区三区免费乱视频 | 日韩欧美国产电影| 亚洲精品va在线观看| 国产九九视频一区二区三区| 欧美三级乱人伦电影| 国产精品无遮挡| 免费不卡在线观看| 91行情网站电视在线观看高清版| 久久久久99精品一区| 婷婷中文字幕一区三区| 一本色道a无线码一区v| 国产欧美一区二区三区鸳鸯浴| 视频一区国产视频| 欧美色网一区二区| 国产精品大尺度| 国产高清精品在线| 精品99999| 国产精品不卡在线观看| 国产成人av电影免费在线观看| 日韩欧美成人一区| 91高清在线观看| 国产精品1024久久| 日韩精品福利网| 亚洲精品中文在线影院| 久久你懂得1024| 欧美一区二区三区视频在线观看| 国产成人午夜99999| 国产自产v一区二区三区c| 日韩精品三区四区| 亚洲激情男女视频| 欧美一区二区三区四区久久| 免费成人av在线| 91麻豆精品一区二区三区| 国产亚洲成年网址在线观看| 久久99久久久久| 91精品国产综合久久久久| 天天综合色天天综合色h| 日本国产一区二区| 中文字幕电影一区| 日韩美女久久久| 丝袜美腿成人在线|