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

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

?? amr_in.c

?? 一個用于智能手機的多媒體庫適合S60 WinCE的跨平臺開發庫
?? C
字號:
/* *			GPAC - Multimedia Framework C SDK * *			Copyright (c) Jean Le Feuvre 2000-2005  *					All rights reserved * *  This file is part of GPAC / AMR&EVRC&SMV reader module * *  GPAC 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, or (at your option) *  any later version. *    *  GPAC 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; see the file COPYING.  If not, write to *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  *		 */#include <gpac/modules/service.h>#include <gpac/modules/codec.h>#include <gpac/constants.h>#include <gpac/isomedia.h>typedef struct{	GF_ClientService *service;	Bool is_remote;	u32 start_offset;	u32 mtype, sample_rate, block_size;	FILE *stream;	u32 duration;	Bool needs_connection;	u32 pad_bytes;	Bool done;	u32 is_inline;	LPNETCHANNEL ch;	unsigned char *data;	u32 data_size;	GF_SLHeader sl_hdr;	Double start_range, end_range;	u32 current_time;	/*file downloader*/	GF_DownloadSession * dnload;	//Bool is_live;} AMR_Reader;static GF_ESD *AMR_GetESD(AMR_Reader *read){	GF_BitStream *dsi;	GF_ESD *esd;	esd = gf_odf_desc_esd_new(0);	esd->decoderConfig->streamType = GF_STREAM_AUDIO;	esd->ESID = 1;	esd->OCRESID = 0;	esd->slConfig->timestampResolution = read->sample_rate;	/*all packets are complete AUs*/	esd->slConfig->useAccessUnitEndFlag = esd->slConfig->useAccessUnitStartFlag = 0;	esd->slConfig->hasRandomAccessUnitsOnlyFlag = 1;	if ((read->mtype==GF_ISOM_SUBTYPE_3GP_AMR) || (read->mtype==GF_ISOM_SUBTYPE_3GP_AMR_WB)) {		esd->decoderConfig->objectTypeIndication = GPAC_EXTRA_CODECS_OTI;		dsi = gf_bs_new(NULL, 0, GF_BITSTREAM_WRITE);		gf_bs_write_u32(dsi, read->mtype);		gf_bs_write_u16(dsi, (read->mtype==GF_ISOM_SUBTYPE_3GP_AMR) ? 8000 : 16000);		gf_bs_write_u16(dsi, (read->mtype==GF_ISOM_SUBTYPE_3GP_AMR) ? 160 : 320);		gf_bs_write_u8(dsi, 1);		gf_bs_write_u8(dsi, 16);		gf_bs_write_u8(dsi, 1);		gf_bs_get_content(dsi, & esd->decoderConfig->decoderSpecificInfo->data, & esd->decoderConfig->decoderSpecificInfo->dataLength);		gf_bs_del(dsi);	} 	else if (read->mtype==GF_ISOM_SUBTYPE_3GP_EVRC) esd->decoderConfig->objectTypeIndication = 0xA0;	else if (read->mtype==GF_ISOM_SUBTYPE_3GP_SMV) esd->decoderConfig->objectTypeIndication = 0xA1;	return esd;}static void AMR_SetupObject(AMR_Reader *read){	GF_ESD *esd;	GF_ObjectDescriptor *od = (GF_ObjectDescriptor *) gf_odf_desc_new(GF_ODF_OD_TAG);	od->objectDescriptorID = 1;	esd = AMR_GetESD(read);	esd->OCRESID = 0;	gf_list_add(od->ESDescriptors, esd);	gf_term_add_media(read->service, (GF_Descriptor*)od, 0);}static Bool AMR_CanHandleURL(GF_InputService *plug, const char *url){	char *sExt;	sExt = strrchr(url, '.');	if (!sExt) return 0;	if (gf_term_check_extension(plug, "audio/amr", "amr awb", "AMR Speech Data", sExt)) return 1;	if (gf_term_check_extension(plug, "audio/evrc", "evc", "EVRC Speech Data", sExt)) return 1;	if (gf_term_check_extension(plug, "audio/smv", "smv", "SMV Speech Data", sExt)) return 1;	return 0;}static Bool file_is_local(const char *url){	if (!strnicmp(url, "file://", 7)) return 1;	if (strstr(url, "://")) return 0;	return 1;}static Bool AMR_ConfigureFromFile(AMR_Reader *read){	u32 i;	char magic[20];	if (!read->stream) return 0;	read->mtype = 0;	read->start_offset = 6;	read->sample_rate = 8000;	read->block_size = 160;	fread(magic, 1, 20, read->stream);	if (!strnicmp(magic, "#!AMR\n", 6)) {		fseek(read->stream, 6, SEEK_SET);		read->mtype = GF_ISOM_SUBTYPE_3GP_AMR;	}	else if (!strnicmp(magic, "#!EVRC\n", 7)) {		fseek(read->stream, 7, SEEK_SET);		read->start_offset = 7;		read->mtype = GF_ISOM_SUBTYPE_3GP_EVRC;	}	else if (!strnicmp(magic, "#!SMV\n", 6)) {		fseek(read->stream, 6, SEEK_SET);		read->mtype = GF_ISOM_SUBTYPE_3GP_SMV;	}	else if (!strnicmp(magic, "#!AMR-WB\n", 9)) {		read->mtype = GF_ISOM_SUBTYPE_3GP_AMR_WB;		read->start_offset = 9;		read->sample_rate = 16000;		read->block_size = 320;		fseek(read->stream, 9, SEEK_SET);	}	else if (!strnicmp(magic, "#!AMR_MC1.0\n", 12)) return 0;	else if (!strnicmp(magic, "#!AMR-WB_MC1.0\n", 15)) return 0;	else return 0;	read->duration = 0;		if (!read->is_remote) {		u32 size;		while (!feof(read->stream)) {			u8 ft = fgetc(read->stream);			switch (read->mtype) {			case GF_ISOM_SUBTYPE_3GP_AMR:			case GF_ISOM_SUBTYPE_3GP_AMR_WB:				ft = (ft >> 3) & 0x0F;				size = (read->mtype==GF_ISOM_SUBTYPE_3GP_AMR_WB) ? GF_AMR_WB_FRAME_SIZE[ft] : GF_AMR_FRAME_SIZE[ft];				break;			default:				for (i=0; i<GF_SMV_EVRC_RATE_TO_SIZE_NB; i++) {					if (GF_SMV_EVRC_RATE_TO_SIZE[2*i]==ft) {						/*remove rate_type byte*/						size = GF_SMV_EVRC_RATE_TO_SIZE[2*i+1] - 1;						break;					}				}				break;			}			if (size) fseek(read->stream, size, SEEK_CUR);			read->duration += read->block_size;		}	}	fseek(read->stream, read->start_offset, SEEK_SET);	return 1;}static void AMR_NetIO(void *cbk, GF_NETIO_Parameter *param){	GF_Err e;	const char *szCache;	u32 bytes_done;	AMR_Reader *read = (AMR_Reader *) cbk;	e = param->error;	/*done*/	if (param->msg_type==GF_NETIO_DATA_TRANSFERED) {		if (read->stream) {			read->is_remote = 0;			e = GF_EOS;		} else {			return;		}	} else {		/*handle service message*/		gf_term_download_update_stats(read->dnload);		if (param->msg_type!=GF_NETIO_DATA_EXCHANGE) return;	}	/*data fetching*/	if (e >= GF_OK) {		if (read->stream) return;		/*open service*/		szCache = gf_dm_sess_get_cache_name(read->dnload);		if (!szCache) e = GF_IO_ERR;		else {			read->stream = fopen((char *) szCache, "rb");			if (!read->stream) e = GF_SERVICE_ERROR;			else {				/*if full file at once (in cache) parse duration*/				if (e==GF_EOS) read->is_remote = 0;				e = GF_OK;				/*not enough data*/				if (!AMR_ConfigureFromFile(read)) {					/*bad data...*/					gf_dm_sess_get_stats(read->dnload, NULL, NULL, NULL, &bytes_done, NULL, NULL);					if (bytes_done>10*1024) {						e = GF_CORRUPTED_DATA;					} else {						fclose(read->stream);						read->stream = NULL;						return;					}				}			}		}	}	/*OK confirm*/	if (read->needs_connection) {		read->needs_connection = 0;		gf_term_on_connect(read->service, NULL, e);		if (!e) AMR_SetupObject(read);	}}static void AMR_DownloadFile(GF_InputService *plug, char *url){	AMR_Reader *read = (AMR_Reader*) plug->priv;	read->needs_connection = 1;	read->dnload = gf_term_download_new(read->service, url, 0, AMR_NetIO, read);	if (!read->dnload) {		read->needs_connection = 0;		gf_term_on_connect(read->service, NULL, GF_NOT_SUPPORTED);	}	/*service confirm is done once fetched*/}static GF_Err AMR_ConnectService(GF_InputService *plug, GF_ClientService *serv, const char *url){	char szURL[2048];	char *ext;	GF_Err reply;	AMR_Reader *read = plug->priv;	read->service = serv;	if (read->dnload) gf_term_download_del(read->dnload);	read->dnload = NULL;	strcpy(szURL, url);	ext = strrchr(szURL, '#');	if (ext) ext[0] = 0;	/*remote fetch*/	read->is_remote = !file_is_local(szURL);	if (read->is_remote) {		AMR_DownloadFile(plug, (char *) szURL);		return GF_OK;	}	reply = GF_OK;	read->stream = fopen(szURL, "rb");	if (!read->stream) {		reply = GF_URL_ERROR;	} else if (!AMR_ConfigureFromFile(read)) {		fclose(read->stream);		read->stream = NULL;		reply = GF_NOT_SUPPORTED;	}	gf_term_on_connect(serv, NULL, reply);	if (!reply && read->is_inline) AMR_SetupObject(read);	return GF_OK;}static GF_Err AMR_CloseService(GF_InputService *plug){	AMR_Reader *read = plug->priv;	if (read->stream) fclose(read->stream);	read->stream = NULL;	if (read->dnload) gf_term_download_del(read->dnload);	read->dnload = NULL;	if (read->data) free(read->data);	read->data = NULL;	gf_term_on_disconnect(read->service, NULL, GF_OK);	return GF_OK;}static GF_Descriptor *AMR_GetServiceDesc(GF_InputService *plug, u32 expect_type, const char *sub_url){	AMR_Reader *read = plug->priv;	/*since we don't handle multitrack in aac, we don't need to check sub_url, only use expected type*/	/*audio object*/	if (expect_type==GF_MEDIA_OBJECT_AUDIO) {		GF_ObjectDescriptor *od = (GF_ObjectDescriptor *) gf_odf_desc_new(GF_ODF_OD_TAG);		GF_ESD *esd = AMR_GetESD(read);		od->objectDescriptorID = 1;		gf_list_add(od->ESDescriptors, esd);		return (GF_Descriptor *) od;	}	/*let player handle scene description*/	read->is_inline = 1;	return NULL;}static GF_Err AMR_ConnectChannel(GF_InputService *plug, LPNETCHANNEL channel, const char *url, Bool upstream){	u32 ES_ID;	GF_Err e;	AMR_Reader *read = plug->priv;	e = GF_SERVICE_ERROR;	if (read->ch==channel) goto exit;	e = GF_STREAM_NOT_FOUND;	if (strstr(url, "ES_ID")) {		sscanf(url, "ES_ID=%d", &ES_ID);	}	/*URL setup*/	else if (!read->ch && AMR_CanHandleURL(plug, url)) ES_ID = 1;	if (ES_ID==1) {		read->ch = channel;		e = GF_OK;	}exit:	gf_term_on_connect(read->service, channel, e);	return e;}static GF_Err AMR_DisconnectChannel(GF_InputService *plug, LPNETCHANNEL channel){	AMR_Reader *read = plug->priv;	GF_Err e = GF_STREAM_NOT_FOUND;	if (read->ch == channel) {		read->ch = NULL;		if (read->data) free(read->data);		read->data = NULL;		e = GF_OK;	}	gf_term_on_disconnect(read->service, channel, e);	return GF_OK;}static GF_Err AMR_ServiceCommand(GF_InputService *plug, GF_NetworkCommand *com){	AMR_Reader *read = plug->priv;	if (!com->base.on_channel) return GF_NOT_SUPPORTED;	switch (com->command_type) {	case GF_NET_CHAN_SET_PULL:		return GF_OK;	case GF_NET_CHAN_INTERACTIVE:		return GF_OK;	case GF_NET_CHAN_BUFFER:		return GF_OK;	case GF_NET_CHAN_SET_PADDING:		read->pad_bytes = com->pad.padding_bytes;		return GF_OK;	case GF_NET_CHAN_DURATION:		com->duration.duration = read->duration;		com->duration.duration /= read->sample_rate;		return GF_OK;	case GF_NET_CHAN_PLAY:		read->start_range = com->play.start_range;		read->end_range = com->play.end_range;		read->current_time = 0;		if (read->stream) fseek(read->stream, read->start_offset, SEEK_SET);		if (read->ch == com->base.on_channel) { 			read->done = 0; 			/*PLAY after complete download, estimate duration*/			if (!read->is_remote && !read->duration) {				AMR_ConfigureFromFile(read);				if (read->duration) {					GF_NetworkCommand rcfg;					rcfg.base.on_channel = read->ch;					rcfg.base.command_type = GF_NET_CHAN_DURATION;					rcfg.duration.duration = read->duration;					rcfg.duration.duration /= read->sample_rate;					gf_term_on_command(read->service, &rcfg, GF_OK);				}			}		}		return GF_OK;	case GF_NET_CHAN_STOP:		return GF_OK;	default:		return GF_OK;	}}static GF_Err AMR_ChannelGetSLP(GF_InputService *plug, LPNETCHANNEL channel, char **out_data_ptr, u32 *out_data_size, GF_SLHeader *out_sl_hdr, Bool *sl_compressed, GF_Err *out_reception_status, Bool *is_new_data){	u32 pos, start_from, i;	u8 toc, ft;	AMR_Reader *read = plug->priv;	*out_reception_status = GF_OK;	*sl_compressed = 0;	*is_new_data = 0;	memset(&read->sl_hdr, 0, sizeof(GF_SLHeader));	read->sl_hdr.randomAccessPointFlag = 1;	read->sl_hdr.compositionTimeStampFlag = 1;	if (read->ch != channel) return GF_STREAM_NOT_FOUND;	/*fetching es data*/	if (read->done) {		*out_reception_status = GF_EOS;		return GF_OK;	}	if (!read->data) {		if (!read->stream) {			*out_data_ptr = NULL;			*out_data_size = 0;			return GF_OK;		}		*is_new_data = 1;fetch_next:		pos = ftell(read->stream);		toc = fgetc(read->stream);		switch (read->mtype) {		case GF_ISOM_SUBTYPE_3GP_AMR:			ft = (toc >> 3) & 0x0F;			read->data_size = GF_AMR_FRAME_SIZE[ft];			break;		case GF_ISOM_SUBTYPE_3GP_AMR_WB:			ft = (toc >> 3) & 0x0F;			read->data_size = GF_AMR_WB_FRAME_SIZE[ft];			break;		default:			for (i=0; i<GF_SMV_EVRC_RATE_TO_SIZE_NB; i++) {				if (GF_SMV_EVRC_RATE_TO_SIZE[2*i]==toc) {					/*remove rate_type byte*/					read->data_size = GF_SMV_EVRC_RATE_TO_SIZE[2*i+1] - 1;					break;				}			}			break;		}		/*we're seeking*/		if (read->start_range && read->duration) {			start_from = (u32) (read->start_range * read->sample_rate);			if (read->current_time + read->block_size < start_from) {				read->current_time += read->block_size;				fseek(read->stream, read->data_size, SEEK_CUR);				goto fetch_next;			} else {				read->start_range = 0;			}		}				read->data_size++;		read->sl_hdr.compositionTimeStamp = read->current_time;		read->data = malloc(sizeof(char) * (read->data_size+read->pad_bytes));		read->data[0] = toc;		if (read->data_size>1) fread(read->data + 1, read->data_size-1, 1, read->stream);		if (read->pad_bytes) memset(read->data + read->data_size, 0, sizeof(char) * read->pad_bytes);	}	*out_sl_hdr = read->sl_hdr;	*out_data_ptr = read->data;	*out_data_size = read->data_size;	return GF_OK;}static GF_Err AMR_ChannelReleaseSLP(GF_InputService *plug, LPNETCHANNEL channel){	AMR_Reader *read = plug->priv;	if (read->ch == channel) {		if (!read->data) return GF_BAD_PARAM;		free(read->data);		read->data = NULL;		read->current_time += read->block_size;		return GF_OK;	}	return GF_OK;}GF_InputService *NewAESReader(){	AMR_Reader *reader;	GF_InputService *plug = malloc(sizeof(GF_InputService));	memset(plug, 0, sizeof(GF_InputService));	GF_REGISTER_MODULE_INTERFACE(plug, GF_NET_CLIENT_INTERFACE, "GPAC AMR/EVRC/SMV Reader", "gpac distribution")	plug->CanHandleURL = AMR_CanHandleURL;	plug->ConnectService = AMR_ConnectService;	plug->CloseService = AMR_CloseService;	plug->GetServiceDescriptor = AMR_GetServiceDesc;	plug->ConnectChannel = AMR_ConnectChannel;	plug->DisconnectChannel = AMR_DisconnectChannel;	plug->ServiceCommand = AMR_ServiceCommand;	/*we do support pull mode*/	plug->ChannelGetSLP = AMR_ChannelGetSLP;	plug->ChannelReleaseSLP = AMR_ChannelReleaseSLP;	reader = malloc(sizeof(AMR_Reader));	memset(reader, 0, sizeof(AMR_Reader));	plug->priv = reader;	return plug;}void DeleteAESReader(void *ifce){	GF_InputService *plug = (GF_InputService *) ifce;	AMR_Reader *read = plug->priv;	free(read);	free(plug);}#ifdef GPAC_AMR_IN_STANDALONEGF_EXPORTBool QueryInterface(u32 InterfaceType){	switch (InterfaceType) {	case GF_NET_CLIENT_INTERFACE: return 1;	default: return 0;	}}GF_EXPORTGF_BaseInterface *LoadInterface(u32 InterfaceType){	switch (InterfaceType) {	case GF_NET_CLIENT_INTERFACE: return (GF_BaseInterface *) NewAESReader();	default: return NULL;	}}GF_EXPORTvoid ShutdownInterface(GF_BaseInterface *ifce){	switch (ifce->InterfaceType) {	case GF_NET_CLIENT_INTERFACE:  DeleteAESReader(ifce); break;	}}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色8久久精品久久久久久蜜| 日韩中文字幕区一区有砖一区| 欧美高清性hdvideosex| av一本久道久久综合久久鬼色| 国产一区中文字幕| 国产一区二区免费看| 激情欧美日韩一区二区| 蜜臀av一区二区在线观看| 免费成人av在线| 韩国精品主播一区二区在线观看| 麻豆视频观看网址久久| 黄页网站大全一区二区| 国产成人免费xxxxxxxx| 国产成人免费视频网站高清观看视频| 国产精品一区二区黑丝| 粉嫩嫩av羞羞动漫久久久| www.亚洲激情.com| 色婷婷亚洲一区二区三区| 欧美性色欧美a在线播放| 欧美午夜精品一区二区蜜桃 | 精品免费一区二区三区| 日韩欧美黄色影院| 国产日韩欧美不卡| 亚洲欧美福利一区二区| 日韩和欧美的一区| 国产成人av一区二区三区在线 | 亚洲一二三区在线观看| 日韩电影在线一区| 国产精品一二一区| aaa欧美日韩| 欧美一级艳片视频免费观看| 久久久久国产精品人| 国产精品欧美一区喷水| 亚洲一区二区综合| 国产精品77777竹菊影视小说| 91日韩精品一区| 日韩三级免费观看| 亚洲欧洲精品天堂一级| 日本不卡一二三区黄网| 国产99久久久国产精品潘金| 色综合一个色综合亚洲| 欧美一二三区精品| 樱花影视一区二区| 精品亚洲porn| 欧美日韩高清不卡| 国产精品麻豆久久久| 麻豆精品视频在线观看| 色悠悠久久综合| 久久久精品免费网站| 天天亚洲美女在线视频| 99re这里都是精品| 久久久激情视频| 久久精品久久99精品久久| 91亚洲永久精品| 国产偷国产偷精品高清尤物| 日韩在线播放一区二区| 91网址在线看| 中文无字幕一区二区三区| 午夜国产不卡在线观看视频| 91香蕉视频污| 国产精品初高中害羞小美女文| 美女视频一区二区三区| 欧美日韩在线观看一区二区| 亚洲视频一区二区在线| 成人短视频下载| 国产女人aaa级久久久级| 国内精品写真在线观看| 欧美mv和日韩mv的网站| 日韩精品一卡二卡三卡四卡无卡| 色狠狠av一区二区三区| 亚洲乱码国产乱码精品精98午夜| 成人午夜av电影| 欧美激情一区二区三区在线| 国产精品18久久久久久久久| 日韩亚洲欧美在线| 精品一区二区三区免费| 精品国产一区二区三区av性色| 丝袜国产日韩另类美女| 91精品国产综合久久精品图片| 午夜电影久久久| 欧美色图一区二区三区| 亚洲影视在线播放| 欧美午夜精品理论片a级按摩| 亚洲欧美另类久久久精品| 日本黄色一区二区| 亚洲成人777| 欧美一级艳片视频免费观看| 久久国产综合精品| 久久精品一区蜜桃臀影院| 国产精品一品视频| 国产精品成人一区二区艾草| 91麻豆免费视频| 日韩精品久久理论片| 日韩欧美中文字幕公布| 国产精品18久久久| 亚洲男人天堂av| 欧美另类z0zxhd电影| 韩国欧美一区二区| 亚洲欧美影音先锋| 欧美日韩亚洲综合一区| 国内外成人在线| 1024成人网色www| 7777精品伊人久久久大香线蕉的 | 中文成人av在线| 在线视频国产一区| 免费在线观看精品| 中文字幕国产精品一区二区| 欧洲av在线精品| 国产精品一区免费视频| 亚洲综合丝袜美腿| 久久亚洲欧美国产精品乐播| 99精品久久只有精品| 日韩国产欧美在线观看| 国产精品传媒入口麻豆| 337p亚洲精品色噜噜噜| 成人精品国产一区二区4080| 婷婷亚洲久悠悠色悠在线播放| 国产亚洲精久久久久久| 91国模大尺度私拍在线视频| 日本不卡一区二区三区高清视频| 国产精品亲子伦对白| 欧美精品一卡两卡| 99久久久精品| 经典三级在线一区| 亚洲成人免费在线观看| 综合中文字幕亚洲| 久久久久亚洲综合| 日韩免费一区二区| 欧美性生交片4| 91免费版在线看| 国产91精品久久久久久久网曝门| 日韩av中文字幕一区二区三区 | 97se亚洲国产综合自在线不卡| 日韩精品五月天| 亚洲色图欧洲色图| 国产日本一区二区| 欧美一区二区国产| 日本福利一区二区| 91影视在线播放| 成人免费毛片高清视频| 韩国在线一区二区| 成人欧美一区二区三区| 亚洲国产高清在线观看视频| 久久嫩草精品久久久精品| 欧美电影免费观看高清完整版在线观看 | 日韩av一区二区三区四区| 曰韩精品一区二区| 一区免费观看视频| 国产精品成人午夜| 中文字幕一区三区| 亚洲少妇最新在线视频| 中文字幕一区二| 日韩美女啊v在线免费观看| 欧美国产在线观看| 亚洲欧洲日韩在线| 亚洲男人天堂一区| 亚洲精品水蜜桃| 亚洲高清免费视频| 天天综合色天天综合| 日韩av电影免费观看高清完整版在线观看 | 亚洲人成精品久久久久| 一区二区在线观看免费视频播放| 亚洲人妖av一区二区| 亚洲黄色片在线观看| 亚洲一二三区在线观看| 日韩激情一二三区| 国内国产精品久久| 成人久久视频在线观看| 97精品国产露脸对白| 欧美色大人视频| 日韩一级片网站| 国产视频一区在线播放| 亚洲人成网站影音先锋播放| 亚洲成人av一区| 久久国产精品色| 成人国产免费视频| 欧美视频一区二区三区| 欧美成人一区二区三区| 欧美极品aⅴ影院| 亚洲韩国精品一区| 美女尤物国产一区| 不卡的电影网站| 在线不卡免费av| 欧美激情一区二区三区| 樱桃国产成人精品视频| 久久99最新地址| 成人aa视频在线观看| 91精品欧美一区二区三区综合在| 精品国产伦一区二区三区观看方式 | 国产精品久久久久一区二区三区共| 亚洲三级在线看| 久久精品国产精品亚洲精品| 99久久国产免费看| 欧美一区二区三区视频在线观看| 国产偷国产偷精品高清尤物| 舔着乳尖日韩一区| www.亚洲人| 欧美精品一区在线观看| 亚洲一区二区五区| 成人免费高清在线|