青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

Speex手冊----Speex編/解碼API的使用(libspeex)

轉(zhuǎn)載自:http://blog.csdn.net/dotscylla/article/details/4426220

前言:Speex官網(wǎng):http://speex.org/ 可以再Documentation下找到PDF版或HTML OL版的英文手冊??赡軙捎谟⑽募寄艿膮T乏或語音解碼領域的不熟悉會有翻譯錯誤,所以每段我都會付上英文原段落,也望各位發(fā)現(xiàn)后能夠不吝賜教,大家共同進步。

 

PS: 1) 如需轉(zhuǎn)載,注明出處,不勝感激; 2) 如侵您版權,及時通知,速刪之

 

 

5.1 編碼

5.2 解碼

5.3 編解碼選項(speex_*_ctl)

5.4 模式查詢

5.5 封包和帶內(nèi)信令

 

補充

 

后記

 

The libspeex library contains all the functions for encoding and decoding speech with the Speex codec. When linking on a UNIX system, one must add -lspeex -lm to the compiler command line. One important thing to know is that libspeex calls are reentrant, but not thread-safe. That means that it is fine to use calls from many threads, but calls using the same state from multiple threads must be protected by mutexes. Examples of code can also be found in Appendix A and the complete API documentation is included in the Documentation section of the Speex website (http://www.speex.org/).

Speex編解碼器的libspeex包囊括了所有的語音編碼和解碼函數(shù)。在Linux系統(tǒng)中連接時,必須在編譯器命令行中加入-lspeex –lm。需要知道的是,雖然libspeex的函數(shù)調(diào)用是可重入的,但不是線程安全的,所以在多線程調(diào)用時,如果使用共享資源需要進行互斥保護。附錄A中有代碼實例,在Speex站點(http://www.speex.org/ )的文檔部分能下到完整的API文檔。

 

 

5.1 編碼

In order to encode speech using Speex, one first needs to:
#include <speex/speex.h>
Then in the code, a Speex bit-packing struct must be declared, along with a Speex encoder state:
SpeexBits bits;

void *enc_state;
The two are initialized by:
speex_bits_init(&bits);
enc_state = speex_encoder_init(&speex_nb_mode);
For wideband coding, speex_nb_mode will be replaced by speex_wb_mode. In most cases, you will need to know the frame size used at the sampling rate you are using. You can get that value in the frame_size variable (expressed in samples, not
bytes) with:
speex_encoder_ctl(enc_state,SPEEX_GET_FRAME_SIZE,&frame_size);
In practice, frame_size will correspond to 20 ms when using 8, 16, or 32 kHz sampling rate. There are many parameters that can be set for the Speex encoder, but the most useful one is the quality parameter that controls the quality vs bit-rate tradeoff.
This is set by:
speex_encoder_ctl(enc_state,SPEEX_SET_QUALITY,&quality);
where quality is an integer value ranging from 0 to 10 (inclusively). The mapping between quality and bit-rate is described in Fig. 9.2 for narrowband.
Once the initialization is done, for every input frame:
speex_bits_reset(&bits);
speex_encode_int(enc_state, input_frame, &bits);
nbBytes = speex_bits_write(&bits, byte_ptr, MAX_NB_BYTES);
where input_frame is a (short *) pointing to the beginning of a speech frame, byte_ptr is a (char *) where the encoded frame will be written,MAX_NB_BYTES is the maximumnumber of bytes that can be written to byte_ptr without causing an overflow and nbBytes is the number of bytes actually written to byte_ptr (the encoded size in bytes). Before calling speex_bits_write, it is possible to find the number of bytes that need to be written by calling speex_bits_nbytes(&bits), which returns a number of bytes.
It is still possible to use the speex_encode() function, which takes a (float *) for the audio. However, this would make an eventual port to an FPU-less platform (like ARM) more complicated. Internally, speex_encode() and speex_encode_int() are processed in the same way. Whether the encoder uses the fixed-point version is only decided by the compile-time flags, not at the API level.
After you’re done with the encoding, free all resources with:
speex_bits_destroy(&bits);
speex_encoder_destroy(enc_state);
That’s about it for the encoder.

使用Speex進行語音編碼,首先要:

#include < speex/speex.h >

在代碼中,需要聲明Speex比特包結(jié)構(gòu)體,同時設置Speex編碼器狀態(tài):

SpeexBits bits;

void * enc_state;

初始化兩變量:

speex_bits_init( &bits );

enc_state = speex_encoder_init( &speex_nb_mode );

用speex_wb_mode代替為speex_nb_mode,即可轉(zhuǎn)換為寬帶編碼。很多時候,你在使用采樣率的需要知道幀的大小,可以通過變量frame_size(用樣本中的單位表示,不以字節(jié)為單位)獲得,調(diào)用下面函數(shù):

speex_encoder_ctl( enc_state, SPEEX_GET_FRAME_SIZE, &frame_size );

實踐表明,在采用8、16或32kHz采樣率的時候,frame_size大約對應于20ms。Speex編碼器還有很多參數(shù)可以設置,其中最有用的一個是質(zhì)量參數(shù),控制著比特率(bit-rate)交換的質(zhì)量,通過下面函數(shù)設置:
speex_encoder_ctl( enc_state, SPEEX_SET_QUALITY, &quality );

quality是一個0~10(包含10)范圍內(nèi)的整數(shù),窄帶(narrowband)的質(zhì)量和比特率(bit-rate)的對應關系如圖9.2所示。

初始化成功后,對于每幀的輸入:

speex_bits_reset( &bits );

speex_encode_int( enc_state, input_frame, &bits );

nbBytes = speex_bits_write( &bits, byte_ptr, MAX_NB_BYTES );

其中,input_frame是指向每個Speex幀開始的short型指針,byte_ptr是將寫入已被編碼的幀的char型指針,MAX_NB_BYTES是byte_ptr在不導致溢出時可被寫入的最大字節(jié)數(shù),nbBytes是byte_ptr實際被寫入的字節(jié)數(shù)(編碼大小以字節(jié)為單位)。在調(diào)用speex_bits_write之前,可能會通過speex_bits_nbytes(&bits)返回的字節(jié)數(shù)獲得需要被寫入的字節(jié)數(shù),也可能使用speex_encode() 函數(shù),它接受一個攜帶音頻數(shù)據(jù)的float*型參數(shù)。不過這將使缺少浮點運算單元(FPU)的平臺(如ARM)變的更為復雜。實際上,speex_encode和speex_encode_int()用同樣的方法處理,編碼器是否使用定點數(shù)取決于編譯期的標志位,不由API來控制。

完成編碼后,釋放所有資源:
speex_bits_destroy( &bits );

speex_encoder_destroy( enc_state );

這是關于編碼的部分。

  

5.2 解碼

In order to decode speech using Speex, you first need to:
#include <speex/speex.h>
You also need to declare a Speex bit-packing struct
SpeexBits bits;
and a Speex decoder state
void *dec_state;
The two are initialized by:
speex_bits_init(&bits);
dec_state = speex_decoder_init(&speex_nb_mode);
For wideband decoding, speex_nb_mode will be replaced by speex_wb_mode. If you need to obtain the size of the frames that will be used by the decoder, you can get that value in the frame_size variable (expressed in samples, not bytes) with:
speex_decoder_ctl(dec_state, SPEEX_GET_FRAME_SIZE, &frame_size);
There is also a parameter that can be set for the decoder: whether or not to use a perceptual enhancer. This can be set by:
speex_decoder_ctl(dec_state, SPEEX_SET_ENH, &enh);
where enh is an int with value 0 to have the enhancer disabled and 1 to have it enabled. As of 1.2-beta1, the default is now to enable the enhancer.
Again, once the decoder initialization is done, for every input frame:
speex_bits_read_from(&bits, input_bytes, nbBytes);
speex_decode_int(dec_state, &bits, output_frame);
where input_bytes is a (char *) containing the bit-stream data received for a frame, nbBytes is the size (in bytes) of that bit-stream, and output_frame is a (short *) and points to the area where the decoded speech frame will be written. A NULL value as the second argument indicates that we don’t have the bits for the current frame. When a frame is lost, the Speex decoder will do its best to "guess" the correct signal.
As for the encoder, the speex_decode() function can still be used, with a (float *) as the output for the audio. After you’re done with the decoding, free all resources with:
speex_bits_destroy(&bits);
speex_decoder_destroy(dec_state);

使用Speex解碼語音,首先要包含speex.h頭文件。

#include < speex/speex.h>

需要聲明Speex比特包的結(jié)構(gòu)體和Speex解碼器的狀態(tài)

SpeexBits bits;

void* dec_state;

進行初始化
speex_bits_init( &bits );

dec_state = speex_decoder_init( &speex_nb_mode );

用speex_wb_mode代替speex_nb_mode,可轉(zhuǎn)換為寬帶(windband)解碼??赡苓^變量frame_size來獲得解碼的幀大小

speex_decoder_ctl( dec_state, SPEEX_GET_FRAME_SIZE, &frame_size );

還可以能過下面函數(shù)設置是否使用“知覺增強”功能

speex_decoder_ctl( dec_state, SPEEX_SET_ENH, &enh );

如果enh是0則表是不啟用,1則表示啟用。在1.2-beta1中,默認是開啟的。

做完初始化工作后,則可對每個輸入幀進行如下操作:

speex_bits_read_from( &bits, input_bytes, nbBytes );

speex_decode_int( dec_state, &bits, output_frame );

其中,input_bytes是char型指針,包含了一幀的比特流數(shù)據(jù),nbBytes是那幀比特流數(shù)據(jù)的大?。ㄒ宰止?jié)為單位),output_frame是short型指針,指向一塊內(nèi)存區(qū)域,存儲對語音幀的解碼。第二個參數(shù)為空值(NULL)意味著沒有獲得到正確的比特(bit)數(shù)據(jù),出現(xiàn)丟幀,Speex解碼器會盡可能猜測最為準確的語音信號。

和編碼器類似,可以用speex_decode()函數(shù)的一個float*型參數(shù)獲得音頻輸出。

完成解碼后,釋放掉所有資源:

speex_bits_destory( &bits );

speex_decoder_destory( dec_state );

 

5.3 編解碼選項(speex_*_ctl)

The Speex encoder and decoder support many options and requests that can be accessed through the speex_encoder_ctl and
speex_decoder_ctl functions. These functions are similar to the ioctl system call and their prototypes are:
void speex_encoder_ctl(void *encoder, int request, void *ptr);
void speex_decoder_ctl(void *encoder, int request, void *ptr);
Despite those functions, the defaults are usually good for many applications and optional settings should only be used when one understands them and knows that they are needed. A common error is to attempt to set many unnecessary settings.
Here is a list of the values allowed for the requests. Some only apply to the encoder or the decoder. Because the last argument is of type void *, the _ctl() functions are not type safe, and shoud thus be used with care. The type spx_int32_t is the same as the C99 int32_t type.
SPEEX_SET_ENH‡ Set perceptual enhancer to on (1) or off (0) (spx_int32_t, default is on)
SPEEX_GET_ENH‡ Get perceptual enhancer status (spx_int32_t)
SPEEX_GET_FRAME_SIZE Get the number of samples per frame for the current mode (spx_int32_t)
SPEEX_SET_QUALITY† Set the encoder speech quality (spx_int32_t from 0 to 10, default is 8)
SPEEX_GET_QUALITY† Get the current encoder speech quality (spx_int32_t from 0 to 10)
SPEEX_SET_MODE† Set the mode number, as specified in the RTP spec (spx_int32_t)
SPEEX_GET_MODE† Get the current mode number, as specified in the RTP spec (spx_int32_t)
SPEEX_SET_VBR† Set variable bit-rate (VBR) to on (1) or off (0) (spx_int32_t, default is off)
SPEEX_GET_VBR† Get variable bit-rate (VBR) status (spx_int32_t)
SPEEX_SET_VBR_QUALITY† Set the encoder VBR speech quality (float 0.0 to 10.0, default is 8.0)
SPEEX_GET_VBR_QUALITY† Get the current encoder VBR speech quality (float 0 to 10)
SPEEX_SET_COMPLEXITY† Set the CPU resources allowed for the encoder (spx_int32_t from 1 to 10, default is 2)
SPEEX_GET_COMPLEXITY† Get the CPU resources allowed for the encoder (spx_int32_t from 1 to 10, default is 2)
SPEEX_SET_BITRATE† Set the bit-rate to use the closest value not exceeding the parameter (spx_int32_t in bits per second)
SPEEX_GET_BITRATE Get the current bit-rate in use (spx_int32_t in bits per second)
SPEEX_SET_SAMPLING_RATE Set real sampling rate (spx_int32_t in Hz)
SPEEX_GET_SAMPLING_RATE Get real sampling rate (spx_int32_t in Hz)
SPEEX_RESET_STATE Reset the encoder/decoder state to its original state, clearing all memories (no argument)
SPEEX_SET_VAD† Set voice activity detection (VAD) to on (1) or off (0) (spx_int32_t, default is off)
SPEEX_GET_VAD† Get voice activity detection (VAD) status (spx_int32_t)
SPEEX_SET_DTX† Set discontinuous transmission (DTX) to on (1) or off (0) (spx_int32_t, default is off)
SPEEX_GET_DTX† Get discontinuous transmission (DTX) status (spx_int32_t)
SPEEX_SET_ABR† Set average bit-rate (ABR) to a value n in bits per second (spx_int32_t in bits per second)
SPEEX_GET_ABR† Get average bit-rate (ABR) setting (spx_int32_t in bits per second)
SPEEX_SET_PLC_TUNING† Tell the encoder to optimize encoding for a certain percentage of packet loss (spx_int32_t in percent)
SPEEX_GET_PLC_TUNING† Get the current tuning of the encoder for PLC (spx_int32_t in percent)
SPEEX_SET_VBR_MAX_BITRATE† Set the maximum bit-rate allowed in VBR operation (spx_int32_t in bits per second)
SPEEX_GET_VBR_MAX_BITRATE† Get the current maximum bit-rate allowed in VBR operation (spx_int32_t in bits per second)
SPEEX_SET_HIGHPASS Set the high-pass filter on (1) or off (0) (spx_int32_t, default is on)
SPEEX_GET_HIGHPASS Get the current high-pass filter status (spx_int32_t)
† applies only to the encoder
‡ applies only to the decoder

Speex編碼器和解碼器可以通過訪問speex_encoder_ctl和speex_decoder_ctl函數(shù)來設置更多選項,類似于系統(tǒng)函數(shù)ioctl。它們的原型是:

void speex_encoder_ctl( void* encoder, int request, void* ptr );

void speex_decoder_ctl( void* decoder, int request, void* ptr );

盡管擁有這些函數(shù),但一般的應用程序在默認情況下就足夠,如果要設置則需了解并知道為什么需要它們,勿隨變設置。

下面列出了各種需求的允許值,其中一些只能應用于編碼器或解碼器。因為最后一個參數(shù)是void指針,所以_ctl()函數(shù)不是類型安全的,應小心使用。spx_int32_t類型同C99中的int32_t。

SPEEX_SET_ENH:設置知覺增強,1開啟,0關閉(spx_int32_t,默認開啟)

SPEEX_GET_ENH:獲得知覺增強狀態(tài)( spx_int32_t)

SPEEX_SET_QUALITY:設置編碼質(zhì)量(spx_int32_t 從0~10,默認為8 )

SPEEX_GET_QUALITY:獲得當前語音編碼質(zhì)量(spx_int32_t 從0~10 )

SPEEX_SET_MODE:設置模式,指明RTP協(xié)議規(guī)格(spx_int32_t)

SPEEX_GET_MODE:獲得當前模式,指明的RTP協(xié)議規(guī)格(spx_int32_t)

SPEEX_SET_VBR:設置變比特率(VBR),1開啟,0關閉(spx_int32_t, 默認關閉)

SPEEX_GET_VBR: 獲得變比特率功能當前是否開啟(spx_int32_t )

SPEEX_SET_VBR_QUALITY:設置變比特率語音的編碼質(zhì)量(浮點數(shù)從0.0~10.0,默認8.0)

SPEEX_GET_VBR_QUALITY:獲得當前變比特率語音的編碼質(zhì)量( 浮點數(shù)從0.0~10.0)

SPEEX_SET_COMPLEXITY:設置編碼器的可用CPU資源( spx_int32_t從1~10,默認為2)

SPEEX_GET_COMPLEXITY:獲取編碼器的可用CPU資源(spx_int32_t從1~10,默認為2)

SPEEX_SET_BITRATE:設置不超過參數(shù)設置的最佳比特值(spx_int32_t 單位bits/s )

SPEEX_GET_BITRATE:獲取當前使用的比特率( spx_int32_t 單位 bits/s)

SPEEX_SET_SAMPLING_RATE:設置實時采樣率(spx_int32_t 單位 Hz )

SPEEX_GET_SAMPLING_RATE:獲取實時采樣率(spx_int32_t 單位 Hz)

SPEEX_RESET_STATE:重置編/解碼器到原始狀態(tài),并清除所有記憶(無參數(shù))

SPEEX_SET_VAD:設置靜音檢測特性(VAD),1為打開,0為關閉( spx_int32_t, 默認為關閉)

SPEEX_GET_VAD:獲取靜音檢測是否打開( spx_int32_t )

SPEEX_SET_DTX:設計非連續(xù)性傳輸(DTX),1為打開,0為關閉(spx_int32_t, 默認為關閉)

SPEEX_GET_DTX:獲取非連續(xù)性傳輸(DTX)是否打開(spx_int32_t )

SPEEX_SET_ABR:設置平均比特率(ABR)值, 單位 bits/s(spx_int32_t,單位 bits/s )

SPEEX_GET_ABR:獲得平均比特率設置(spx_int32_t,單位bits/s )

SPEEX_SET_PLC_TUNING:讓編碼器對一定的失包率開啟最優(yōu)化編碼(spx_int32_t,單位 %)

SPEEX_GET_PLC_TUNING:獲取編碼器為PLC的當前調(diào)整(spx_int32_t,單位%)

SPEEX_SET_VBR_MAX_BITRATE:設置允許變比特率(VBR)使用的最大比特率(spx_int32_t,單位 bits/s )

SPEEX_GET_VBR_MAX_BITRATE:獲取允許變比特率(VBR)使用的最大比特率(spx_int32_t,單位 bits/s )

SPEEX_SET_HIGHPASS:設置高通濾波器,1為打開,0為關閉(spx_int32_t,默認為打開)

SPEEX_GET_HIGHPASS:獲取高通濾波器狀態(tài)( spx_int32_t )

僅用于編/解碼器。

 

5.4 模式查詢

Speex modes have a query system similar to the speex_encoder_ctl and speex_decoder_ctl calls. Since modes are read-only,it is only possible to get information about a particular mode. The function used to do that is:
void speex_mode_query(SpeexMode *mode, int request, void *ptr);

類似于調(diào)用speex_encoder_ctl和speex_decoder_ctl,Speex有模式查詢系統(tǒng)。因為模式是只讀的,所以只能獲得模式的詳細信息。使用如下函數(shù):

void speex_mode_query( SpeexMode* mode, int request, void* ptr );

 

The admissible values for request are (unless otherwise note, the values are returned through ptr):
SPEEX_MODE_FRAME_SIZE Get the frame size (in samples) for the mode
SPEEX_SUBMODE_BITRATE Get the bit-rate for a submode number specified through ptr (integer in bps).

受理的請求值(除非另有說明,要不返回值都是通過ptr):

SPEEX_MODE_FRAME_SIZE 獲得模式的幀大小(樣本中)

SPEEX_SUBMODE_BITRATE:獲取通過ptr指定的子模式數(shù)量的比特率(以bps為單位的整數(shù))

 

5.5 封包和帶內(nèi)信令

Sometimes it is desirable to pack more than one frame per packet (or other basic unit of storage). The proper way to do it is to call speex_encode N times before writing the stream with speex_bits_write. In cases where the number of frames is not determined by an out-of-band mechanism, it is possible to include a terminator code. That terminator consists of the code 15 (decimal) encoded with 5 bits, as shown in Table 9.2. Note that as of version 1.0.2, calling speex_bits_write automatically inserts the terminator so as to fill the last byte. This doesn’t involves any overhead and makes sure Speex can always detect when there is no more frame in a packet.

有時我們打包的數(shù)據(jù)不只一幀(或其他基本存儲單元),正確做法是在用speex_bits_write寫入流數(shù)據(jù)之前調(diào)用N次speex_encode。這種情況下的幀數(shù)不是由帶外機制決定的,它會包含一個終結(jié)碼。如表9.2所示,這個終結(jié)碼是由用5bits編碼的Mode 15組成。如果是1.0.2版本需注意,調(diào)用speex_bits_write時,為了填充最后字節(jié),它會自動添加終結(jié)碼。這不會增加開銷,并能確保Speex一直檢測到包中沒有更多幀為止。

 

It is also possible to send in-band “messages” to the other side. All these messages are encoded as “pseudo-frames” of mode 14 which contain a 4-bit message type code, followed by the message. Table 5.1 lists the available codes, their meaning and the size of the message that follows. Most of these messages are requests that are sent to the encoder or decoder on the other end, which is free to comply or ignore them. By default, all in-band messages are ignored.

當然也可以通過帶內(nèi)“消息”的方法,所有這些消息是作為Mode14的“偽幀”編碼的,Mode14包含4bit的消息類型代碼。表5.1列出了可用代碼的說明和大小,發(fā)送給編/解碼器的的消息大部分都可隨意的被接受或被忽略。默認情況下,所有帶內(nèi)消息都被忽略掉了。

In-band signalling codes

 

表5.1 帶內(nèi)信號代碼

Finally, applications may define custom in-band messages using mode 13. The size of the message in bytes is encoded with 5 bits, so that the decoder can skip it if it doesn’t know how to interpret it.

最后,一些應用會使用Mode 13自定義帶內(nèi)消息,消息的字節(jié)大小是用5bits編碼的,所以如果編碼器不知道如何解析它就會跳過。

 

補充:

本是第9章--Speex窄帶模式中的圖和表格,但本章中需要參考,貼上來

Analysis-by-synthesis closed-loop optimization on a sub-frame

Figure 9.2: Analysis-by-synthesis closed-loop optimization on a sub-frame.

 

 Quality versus bit rate

Table 9.2: Quality versus bit-rate

 

后記

因為時間問題(英語學的太菜,翻譯對偶來說是件困難的事情),所以直接到第5章了,第3章--編譯和移植和第4章--編/解碼器命令行以后再進行翻譯整理。

 

 




posted on 2012-11-22 00:03 楊粼波 閱讀(3435) 評論(0)  編輯 收藏 引用 所屬分類: 文章收藏 、C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美另类在线观看| 久久超碰97中文字幕| 国产精品成人久久久久| 亚洲欧美日韩在线播放| 国产精品午夜在线| 久久精品网址| 亚洲精品国产视频| 午夜精品久久久久久99热| 国产在线视频欧美一区二区三区| 蜜桃久久精品一区二区| 夜夜嗨av一区二区三区四区| 久久久噜久噜久久综合| 亚洲美女中文字幕| 国产欧美日韩精品专区| 免费黄网站欧美| 亚洲嫩草精品久久| 亚洲第一页自拍| 欧美一区亚洲一区| 亚洲人久久久| 国产亚洲欧美一区二区三区| 欧美福利视频网站| 欧美一级午夜免费电影| 亚洲美女电影在线| 久久综合一区| 香蕉久久夜色精品国产| 日韩午夜激情| 伊人精品视频| 国产精品视频网| 欧美精品一区二区三| 久久精品中文| 亚洲欧美成人| aa日韩免费精品视频一| 欧美激情第六页| 久久免费一区| 先锋影音网一区二区| 一道本一区二区| 1024亚洲| 伊人蜜桃色噜噜激情综合| 国产精品欧美日韩一区| 欧美日韩美女在线| 欧美成人综合在线| 久久视频精品在线| 欧美在线视频一区| 亚洲在线成人精品| 一本色道久久88综合日韩精品| 欧美黄色免费| 免费一级欧美在线大片| 久久人人97超碰国产公开结果| 亚洲欧美成人一区二区三区| 99国内精品久久| 亚洲精品少妇30p| 亚洲国产精品一区二区尤物区| 国内外成人免费视频| 国产日本精品| 国产欧美在线播放| 国产伦精品一区二区三区四区免费| 欧美日韩一卡二卡| 欧美三级小说| 国产精品av久久久久久麻豆网| 欧美绝品在线观看成人午夜影视 | 99日韩精品| 最新日韩中文字幕| 亚洲国产精品电影在线观看| 欧美黄色aa电影| 亚洲国产精品va在看黑人| 欧美激情视频在线播放| 亚洲国产精品女人久久久| 亚洲国产免费看| 亚洲精品一二区| 亚洲免费久久| 亚洲图片欧美日产| 亚洲在线播放| 久久国产成人| 嫩草国产精品入口| 欧美精品情趣视频| 国产精品xxxxx| 国产噜噜噜噜噜久久久久久久久| 国产精品中文在线| 国内精品视频久久| 欧美一级黄色网| 国产日韩一区二区三区在线播放| 欧美视频一区| 国产麻豆午夜三级精品| 国产亚洲一区二区在线观看 | 欧美成人自拍| 亚洲伦理中文字幕| 亚洲一区二区三区免费视频| 欧美一区二区三区视频免费播放| 久久久久久久999精品视频| 欧美成ee人免费视频| 欧美手机在线| 激情一区二区三区| 一区二区三区免费网站| 欧美一区二区福利在线| 欧美91大片| 99一区二区| 久久久久成人精品| 欧美另类视频在线| 国产亚洲人成a一在线v站| 亚洲激情视频在线| 亚洲欧美激情一区| 美国十次了思思久久精品导航| 91久久久久久久久| 欧美一区1区三区3区公司| 欧美激情精品久久久久久蜜臀| 国产精品日日摸夜夜摸av| 亚洲第一偷拍| 先锋资源久久| 亚洲第一免费播放区| 亚洲欧美另类国产| 欧美激情一二区| 国产在线日韩| 亚洲免费在线看| 亚洲国产精品久久久久秋霞影院| 亚洲综合日韩| 欧美日韩你懂的| 亚洲高清精品中出| 久久成人这里只有精品| 亚洲精品免费观看| 久久嫩草精品久久久精品| 国产精品毛片在线看| 日韩视频免费观看| 久久综合网络一区二区| 亚洲午夜免费视频| 欧美理论电影网| 亚洲国产导航| 久久视频免费观看| 亚洲在线中文字幕| 欧美午夜激情视频| 日韩午夜视频在线观看| 麻豆亚洲精品| 欧美中在线观看| 国产欧美一区二区三区久久人妖| 国产精品99久久久久久有的能看| 欧美大色视频| 久久久久www| 国内精品久久久久久影视8| 午夜免费日韩视频| 99人久久精品视频最新地址| 欧美精品少妇一区二区三区| 亚洲国产精品第一区二区| 久久免费视频网站| 欧美在线观看日本一区| 国产欧美视频在线观看| 欧美影院午夜播放| 亚洲影院一区| 国产精品午夜电影| 欧美伊人久久久久久午夜久久久久| 一本色道**综合亚洲精品蜜桃冫| 欧美激情小视频| 夜夜爽99久久国产综合精品女不卡| 亚洲第一在线视频| 欧美fxxxxxx另类| 日韩视频一区二区三区| 亚洲激情在线观看| 欧美日韩大片| 亚洲一区不卡| 亚洲先锋成人| 国产欧美一区二区视频| 久久久久久网| 久久久久久夜精品精品免费| 在线精品一区二区| 欧美激情一区二区三区在线视频观看 | 亚洲级视频在线观看免费1级| 国产日韩在线看片| 国产精品日本精品| 久久xxxx| 久久久久国产精品厨房| 亚洲国产91| 亚洲国产精品欧美一二99| 欧美日韩免费视频| 香蕉免费一区二区三区在线观看| 亚洲欧美一区二区激情| 国内成人精品一区| 亚洲高清资源| 欧美日韩一二三四五区| 欧美在线视频播放| 久久久水蜜桃av免费网站| 亚洲精品免费网站| 中文精品99久久国产香蕉| 国产日本精品| 亚洲国产高清aⅴ视频| 欧美日韩综合另类| 久久久久久9| 欧美激情一区二区在线| 亚洲你懂的在线视频| 久久精品国产免费观看| 亚洲精品免费一二三区| 亚洲欧美国产精品va在线观看| 狠狠色丁香久久婷婷综合_中| 亚洲高清在线观看一区| 国产精品视频一区二区三区| 免费在线观看日韩欧美| 欧美日韩一级大片网址| 久久综合亚州| 欧美日韩中文字幕精品| 久久偷窥视频| 欧美性视频网站| 欧美成人免费视频| 国产精品一区久久|