《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計 > 設(shè)計應(yīng)用 > H.264解碼糾錯在軟硬件協(xié)同系統(tǒng)中的實(shí)現(xiàn)
H.264解碼糾錯在軟硬件協(xié)同系統(tǒng)中的實(shí)現(xiàn)
摘要: H.264視頻壓縮標(biāo)準(zhǔn)具有很高的壓縮效率和很好的網(wǎng)絡(luò)支持,非常適應(yīng)于無線多媒體和基于Internet的應(yīng)用。在信息傳輸?shù)倪^程中,不可避免的就是噪聲。
關(guān)鍵詞: 接口IC H.264 解碼糾錯 解碼器 SOC
Abstract:
Key words :

  1 引言

  H.264" title="H.264">H.264 視頻壓縮標(biāo)準(zhǔn)具有很高的壓縮效率和很好的網(wǎng)絡(luò)支持, 非常適應(yīng)于無線多媒體和基于Internet 的應(yīng)用。在信息傳輸?shù)倪^程中,不可避免的就是噪聲。H.264 本身具有很好的抗噪聲技術(shù),如SPS,PPS 和圖像數(shù)據(jù)的分開打包, 一幀中可有多個Slice,靈活宏塊順序(FMO)等。但是也有很多情況錯誤無法被完全修復(fù)。H.264 具有很高的壓縮率(7~50 倍),這就意味著圖像中的冗余已經(jīng)被大大消除,要從其余的碼流中恢復(fù)圖像有很大困難。此外,H.264 壓縮標(biāo)準(zhǔn)采用變長編碼的CAVLC 和CABAC,一旦在這些地方出錯, 解碼器" title="解碼器">解碼器將無法判斷下一個變長碼開始的位置,導(dǎo)致錯誤的擴(kuò)散。

  在硬件方面,解碼過程中各部分的實(shí)現(xiàn)都有其固定的結(jié)構(gòu),如果不及時檢出錯誤,會導(dǎo)致如內(nèi)存溢出、查表錯誤、狀態(tài)機(jī)進(jìn)入死循環(huán)等。解碼出的圖像會錯位或者變形, 更嚴(yán)重的時候整個解碼器會停止運(yùn)行。

  所以在解碼器中加入糾錯功能,及早地發(fā)現(xiàn)碼流噪聲并將解碼器恢復(fù)到正常的狀態(tài)是非常有意義而且非常必要的。

  本項目的解碼器是基于SoC" title="SoC">SoC 的ASIC 解決方案,它具有高速、低功耗、低成本的特點(diǎn)。添加糾錯功能可以提高解碼器的適用性和穩(wěn)定性,另一方面,應(yīng)該盡量減少糾錯模塊對原有芯片的面積和速度的影響。

  2 碼流結(jié)構(gòu)和錯誤檢出

  H.264 標(biāo)準(zhǔn)壓縮的碼流具有嚴(yán)格的格式。公共信息被提取出來作為SPS(序列參數(shù)集), PPS(圖像參數(shù)集)單獨(dú)打包,與像素信息分離。SPS 和PPS 是碼流中極為重要的信息,將它們單獨(dú)打包可以在傳輸環(huán)境較差的情況下多次傳送,這在一定程度上增強(qiáng)了碼流傳輸?shù)目垢蓴_能力。每個包被稱作一個NAL 單元,根據(jù)NAL 類型,各個數(shù)據(jù)包中的數(shù)據(jù)按照協(xié)議中規(guī)定的句法元素順序緊密排列。這為糾錯提供了兩點(diǎn)便利:(1)各個NAL 中的錯誤不會蔓延,即如果當(dāng)前NAL 中檢測出了錯誤而且又無法確定錯誤終止的地方,那么可以將當(dāng)前包丟棄,直到下一個NAL 開始;(2)很多句法元素都有其固定的范圍。檢測解碼出的元素值是否超出范圍限制是一個非常有用的辦法,也能盡早發(fā)現(xiàn)錯誤,避免解碼器進(jìn)入異常狀態(tài)。

  H.264 視頻碼流包括五個層次的信息: 序列層,圖像層,片層,宏塊層,子宏塊層,分別與NAL 類型的SPS,PPS,Slice(包括片頭,宏塊,子宏塊信息)相對應(yīng)。

  宏塊是編解碼處理的基本單位,也是進(jìn)行錯誤修補(bǔ)的基本單位。H.264 視頻碼流結(jié)構(gòu)如圖1 所示。

  

  圖1 H.264 碼流結(jié)構(gòu)

  在上面的幾個層次中,每一層都具有其特定的句法元素結(jié)構(gòu),以及相應(yīng)句法的處理辦法,整個錯誤檢測功能就是基于此實(shí)現(xiàn)的。目前可以檢測到的錯誤基于以下幾類:

  (1)保留位錯誤。這是最容易檢測出的錯誤。在H.264 協(xié)議中規(guī)定了一些保留位, 如NAL 起始的forbidden_zero_bit,SPS 中的reserved_zero_4bits 等。解碼器順序讀入碼流時要確定這些保留位的值是正確的,如果有誤,就應(yīng)該丟棄當(dāng)前的包或者標(biāo)記錯誤,做進(jìn)一步的處理。

  (2)句法元素值不在指定范圍。大多數(shù)的句法元素,尤其是在SPS 和PPS,都有一個指定的范圍。如用于計算最大幀數(shù)的log2_max_frame_num_minus4 必須在0~12 之間,如果讀入的值超出這個范圍,即可以判斷當(dāng)前讀入的碼流有錯誤。

  (3)相關(guān)句法元素矛盾。有一些句法元素讀入了一個錯誤的值,但仍然在正確的范圍內(nèi),單單通過當(dāng)前語句是無法檢測出的。這時候就要利用句法元素之間的相關(guān)性,判斷讀出的值是否合理。例如PPS 中要指定當(dāng)前圖像所引用的序列參數(shù)信息, 即PPS->seq_parAMEter_set_id。如果當(dāng)前引用的SPS 的ID 在所有收到的SPS 中不存在, 即可判斷SPS 或者當(dāng)前PPS 有一方出了問題; 對于slice_type 的I,B,P 各種類型,mb_type 的查表方法也不同, 如果在I slice 中出現(xiàn)了幀間預(yù)測的宏塊類型,也可以判斷出錯。

  以上方法都是可以通過句法元素本身的值判斷出來的,可以在讀入碼流的同時處理,即在處理PPS、SPS 的相應(yīng)語句后加入判斷,不會對原有解碼器造成太大的影響。

  并非所有的碼流錯誤都能直接通過句法元素的值判斷出來。一些句法元素的值會影響解碼方法并且被重復(fù)使用,所以有些錯誤是可以在解碼過程中發(fā)現(xiàn)的,例如:

  (4)引用的參考不存在。H.264 實(shí)現(xiàn)壓縮的途徑之一就是采用幀內(nèi)和幀間預(yù)測,如采用了4 種16×16幀內(nèi)預(yù)測模式和9 種4×4 幀內(nèi)預(yù)測模式。各種模式對周邊宏塊的要求都有所不同,16×16 塊的水平幀內(nèi)預(yù)測模式所需要的相鄰宏塊信息如圖2 所示。若當(dāng)前宏塊X 采用水平幀內(nèi)預(yù)測,那么宏塊A 必須可用。如果當(dāng)前宏塊位于一行的第一個,則說明這種預(yù)測方式是錯誤的。而在幀間預(yù)測時,要指定參考塊所在參考圖像的編號和位置,如果不存在當(dāng)前編號所指向的參考幀或參考塊的位置超出了圖像范圍,就說明當(dāng)前的引用有誤。由于宏塊信息采用變長編碼且沒有特定符號分割,一旦發(fā)現(xiàn)錯誤,其后的數(shù)據(jù)直到下一個NAL 開始都應(yīng)被丟棄。

  

  圖2 亮度分量Intra 16×16 水平預(yù)測模式

  (5)查表無對應(yīng)值。CAVLC 和CABAC 編碼的數(shù)據(jù)由于其碼長不定很難分隔出有錯的數(shù)據(jù),但是解碼這些數(shù)據(jù)中包含大量的查表操作,非常有利于及早檢出錯誤。

  (6)其它異常情況。如參考隊列中出現(xiàn)空缺,這時候只能判斷前面某一幀或幾幀出現(xiàn)了內(nèi)存管理錯誤,管理使能句法元素daptive_ref_pic_marking_mode_flag被錯誤地置1,或是具體的操作類型錯誤等。這種情況無法在解碼句法元素的時候立即判斷出錯誤(值在正常范圍內(nèi)且隊列沒有出現(xiàn)異常), 雖然在人工調(diào)試的時候可以根據(jù)后面往隊列中插入?yún)⒖紟那闆r檢查出來, 但是對于實(shí)時解碼器來說這樣是沒有意義的。這時候不需要放棄當(dāng)前NAL 中的數(shù)據(jù),只要將臨近參考幀的信息復(fù)制到參考隊列里即可。

  以上是檢錯方法的大致概括。由于噪聲是隨機(jī)的,錯誤可能出現(xiàn)在解碼過程的任何一個地方,所以只有通過調(diào)試大量碼流才能達(dá)到一定的錯誤覆蓋率,使解碼器具有更好的適應(yīng)能力。

  1 引言

  H.264 視頻壓縮標(biāo)準(zhǔn)具有很高的壓縮效率和很好的網(wǎng)絡(luò)支持, 非常適應(yīng)于無線多媒體和基于Internet 的應(yīng)用。在信息傳輸?shù)倪^程中,不可避免的就是噪聲。H.264 本身具有很好的抗噪聲技術(shù),如SPS,PPS 和圖像數(shù)據(jù)的分開打包, 一幀中可有多個Slice,靈活宏塊順序(FMO)等。但是也有很多情況錯誤無法被完全修復(fù)。H.264 具有很高的壓縮率(7~50 倍),這就意味著圖像中的冗余已經(jīng)被大大消除,要從其余的碼流中恢復(fù)圖像有很大困難。此外,H.264 壓縮標(biāo)準(zhǔn)采用變長編碼的CAVLC 和CABAC,一旦在這些地方出錯, 解碼器將無法判斷下一個變長碼開始的位置,導(dǎo)致錯誤的擴(kuò)散。

  在硬件方面,解碼過程中各部分的實(shí)現(xiàn)都有其固定的結(jié)構(gòu),如果不及時檢出錯誤,會導(dǎo)致如內(nèi)存溢出、查表錯誤、狀態(tài)機(jī)進(jìn)入死循環(huán)等。解碼出的圖像會錯位或者變形, 更嚴(yán)重的時候整個解碼器會停止運(yùn)行。

  所以在解碼器中加入糾錯功能,及早地發(fā)現(xiàn)碼流噪聲并將解碼器恢復(fù)到正常的狀態(tài)是非常有意義而且非常必要的。

  本項目的解碼器是基于SoC 的ASIC 解決方案,它具有高速、低功耗、低成本的特點(diǎn)。添加糾錯功能可以提高解碼器的適用性和穩(wěn)定性,另一方面,應(yīng)該盡量減少糾錯模塊對原有芯片的面積和速度的影響。

  2 碼流結(jié)構(gòu)和錯誤檢出

  H.264 標(biāo)準(zhǔn)壓縮的碼流具有嚴(yán)格的格式。公共信息被提取出來作為SPS(序列參數(shù)集), PPS(圖像參數(shù)集)單獨(dú)打包,與像素信息分離。SPS 和PPS 是碼流中極為重要的信息,將它們單獨(dú)打包可以在傳輸環(huán)境較差的情況下多次傳送,這在一定程度上增強(qiáng)了碼流傳輸?shù)目垢蓴_能力。每個包被稱作一個NAL 單元,根據(jù)NAL 類型,各個數(shù)據(jù)包中的數(shù)據(jù)按照協(xié)議中規(guī)定的句法元素順序緊密排列。這為糾錯提供了兩點(diǎn)便利:(1)各個NAL 中的錯誤不會蔓延,即如果當(dāng)前NAL 中檢測出了錯誤而且又無法確定錯誤終止的地方,那么可以將當(dāng)前包丟棄,直到下一個NAL 開始;(2)很多句法元素都有其固定的范圍。檢測解碼出的元素值是否超出范圍限制是一個非常有用的辦法,也能盡早發(fā)現(xiàn)錯誤,避免解碼器進(jìn)入異常狀態(tài)。

  H.264 視頻碼流包括五個層次的信息: 序列層,圖像層,片層,宏塊層,子宏塊層,分別與NAL 類型的SPS,PPS,Slice(包括片頭,宏塊,子宏塊信息)相對應(yīng)。

  宏塊是編解碼處理的基本單位,也是進(jìn)行錯誤修補(bǔ)的基本單位。H.264 視頻碼流結(jié)構(gòu)如圖1 所示。

  

  圖1 H.264 碼流結(jié)構(gòu)

  在上面的幾個層次中,每一層都具有其特定的句法元素結(jié)構(gòu),以及相應(yīng)句法的處理辦法,整個錯誤檢測功能就是基于此實(shí)現(xiàn)的。目前可以檢測到的錯誤基于以下幾類:

  (1)保留位錯誤。這是最容易檢測出的錯誤。在H.264 協(xié)議中規(guī)定了一些保留位, 如NAL 起始的forbidden_zero_bit,SPS 中的reserved_zero_4bits 等。解碼器順序讀入碼流時要確定這些保留位的值是正確的,如果有誤,就應(yīng)該丟棄當(dāng)前的包或者標(biāo)記錯誤,做進(jìn)一步的處理。

  (2)句法元素值不在指定范圍。大多數(shù)的句法元素,尤其是在SPS 和PPS,都有一個指定的范圍。如用于計算最大幀數(shù)的log2_max_frame_num_minus4 必須在0~12 之間,如果讀入的值超出這個范圍,即可以判斷當(dāng)前讀入的碼流有錯誤。

  (3)相關(guān)句法元素矛盾。有一些句法元素讀入了一個錯誤的值,但仍然在正確的范圍內(nèi),單單通過當(dāng)前語句是無法檢測出的。這時候就要利用句法元素之間的相關(guān)性,判斷讀出的值是否合理。例如PPS 中要指定當(dāng)前圖像所引用的序列參數(shù)信息, 即PPS->seq_parAMEter_set_id。如果當(dāng)前引用的SPS 的ID 在所有收到的SPS 中不存在, 即可判斷SPS 或者當(dāng)前PPS 有一方出了問題; 對于slice_type 的I,B,P 各種類型,mb_type 的查表方法也不同, 如果在I slice 中出現(xiàn)了幀間預(yù)測的宏塊類型,也可以判斷出錯。

  以上方法都是可以通過句法元素本身的值判斷出來的,可以在讀入碼流的同時處理,即在處理PPS、SPS 的相應(yīng)語句后加入判斷,不會對原有解碼器造成太大的影響。

  并非所有的碼流錯誤都能直接通過句法元素的值判斷出來。一些句法元素的值會影響解碼方法并且被重復(fù)使用,所以有些錯誤是可以在解碼過程中發(fā)現(xiàn)的,例如:

  (4)引用的參考不存在。H.264 實(shí)現(xiàn)壓縮的途徑之一就是采用幀內(nèi)和幀間預(yù)測,如采用了4 種16×16幀內(nèi)預(yù)測模式和9 種4×4 幀內(nèi)預(yù)測模式。各種模式對周邊宏塊的要求都有所不同,16×16 塊的水平幀內(nèi)預(yù)測模式所需要的相鄰宏塊信息如圖2 所示。若當(dāng)前宏塊X 采用水平幀內(nèi)預(yù)測,那么宏塊A 必須可用。如果當(dāng)前宏塊位于一行的第一個,則說明這種預(yù)測方式是錯誤的。而在幀間預(yù)測時,要指定參考塊所在參考圖像的編號和位置,如果不存在當(dāng)前編號所指向的參考幀或參考塊的位置超出了圖像范圍,就說明當(dāng)前的引用有誤。由于宏塊信息采用變長編碼且沒有特定符號分割,一旦發(fā)現(xiàn)錯誤,其后的數(shù)據(jù)直到下一個NAL 開始都應(yīng)被丟棄。

  

  圖2 亮度分量Intra 16×16 水平預(yù)測模式

  (5)查表無對應(yīng)值。CAVLC 和CABAC 編碼的數(shù)據(jù)由于其碼長不定很難分隔出有錯的數(shù)據(jù),但是解碼這些數(shù)據(jù)中包含大量的查表操作,非常有利于及早檢出錯誤。

  (6)其它異常情況。如參考隊列中出現(xiàn)空缺,這時候只能判斷前面某一幀或幾幀出現(xiàn)了內(nèi)存管理錯誤,管理使能句法元素daptive_ref_pic_marking_mode_flag被錯誤地置1,或是具體的操作類型錯誤等。這種情況無法在解碼句法元素的時候立即判斷出錯誤(值在正常范圍內(nèi)且隊列沒有出現(xiàn)異常), 雖然在人工調(diào)試的時候可以根據(jù)后面往隊列中插入?yún)⒖紟那闆r檢查出來, 但是對于實(shí)時解碼器來說這樣是沒有意義的。這時候不需要放棄當(dāng)前NAL 中的數(shù)據(jù),只要將臨近參考幀的信息復(fù)制到參考隊列里即可。

  以上是檢錯方法的大致概括。由于噪聲是隨機(jī)的,錯誤可能出現(xiàn)在解碼過程的任何一個地方,所以只有通過調(diào)試大量碼流才能達(dá)到一定的錯誤覆蓋率,使解碼器具有更好的適應(yīng)能力。

  3 軟硬件協(xié)同系統(tǒng)中的糾錯實(shí)現(xiàn)

  盡管在H.264 的官方參考軟件JM 中給出了較為完善的錯誤修補(bǔ)辦法,但是考慮到盡量減少糾錯部分對原有硬件的影響,我們采用基于幀內(nèi)16×16 預(yù)測的修補(bǔ)辦法, 其原理與解碼幀內(nèi)16×16 預(yù)測的方法相似。如果發(fā)現(xiàn)從某一宏塊開始出現(xiàn)錯誤,解碼器將判斷周邊宏塊的存在和預(yù)測情況,為當(dāng)前的宏塊選擇一個最佳的預(yù)測模式,通過周邊宏塊邊界上的像素值修補(bǔ)當(dāng)前宏塊及其后的宏塊直到當(dāng)前Slice 結(jié)束。

  本解碼器采用軟硬件協(xié)同的SoC 實(shí)現(xiàn)方案。在功能劃分上,SPS / PPS / Slice 頭的解析等分支較多的工作由靈活度較高的軟件部分實(shí)現(xiàn),熵解碼和宏塊預(yù)測等需要大量復(fù)雜運(yùn)算的工作由硬件模塊實(shí)現(xiàn)。硬件部分被分成前端和后端兩個部分,前端部分包括熵解碼單元,IQ / IDCT,后端包括運(yùn)動補(bǔ)償(MC)和濾波模塊。

  CPU 與各個模塊、模塊之間采用wishbONe 總線通信,前后端處理單元之間還有另外一條數(shù)據(jù)通道,以分擔(dān)wishbone 總線的開銷,其結(jié)構(gòu)如圖3 所示。CPU 對輸入的碼流做初步處理,提取出諸如圖像大小、幀類型等信息,然后將處理后的數(shù)據(jù)送入硬件的前端處理部分,前端處理的輸出被送入運(yùn)動補(bǔ)償模塊恢復(fù)出像素信息并去除塊效應(yīng)。

  錯誤檢測是由軟硬件共同完成的。軟件[5]在解析SPS、PPS、Slice head 的同時判斷解出的各個句法元素值是否合理,如果存在錯誤則通過總線向硬件發(fā)送信號HasErr_soft。例如,在解析PPS 的函數(shù)中,解碼無符號指數(shù)哥倫布(ue) 得到用來表示當(dāng)前PPS 所調(diào)用SPS ID 的句法元素seq_parameter_set_id, 然后判斷解碼器是否收到過此ID 標(biāo)號的SPS, 如果無此SPS,則中斷當(dāng)前PPS 的解碼,返回上一級函數(shù)。當(dāng)前PPS的參數(shù)內(nèi)容由其它PPS 復(fù)制得到。即在軟件部分做以下修改:

  read_new_slice() / / 讀入一個NAL 單元

  {

  …

  switch (nalu->nal_unit_type) / / 判斷NAL 類型

  {

  …

  case NALU_TYPE_PPS:

  ProcessPPS(nalu); / / PPS 解析

  break;

  …

  }

  }

  ProcessPPS(NALU_t 觹nalu)

  {

  …

  pps->seq_parameter_set_id =ue_v(…);

  / / 讀入當(dāng)前PPS 所對應(yīng)的SPS_id

  if (pps->seq_parameter_set_id invalid)

  / / 若讀入的SPS_id 不可用

  … / / 復(fù)制前一個PPS 的內(nèi)容

  HasErr=1; / / 錯誤標(biāo)志位置1

  / / (將通過總線發(fā)送信號給硬件)

  return;

  }

  硬件主要負(fù)責(zé)宏塊層和子宏塊層的解碼,能夠發(fā)現(xiàn)預(yù)測模式、熵解碼的錯誤。如果硬件解碼過程中檢測出錯誤,硬件會向軟件發(fā)送HasErr_h(yuǎn)w 信號。例如在幀內(nèi)預(yù)測時,需要判斷相鄰宏塊的可用情況。在讀幀內(nèi)預(yù)測模式的語句后加入以下判斷:

  

  整個糾錯過程由軟件控制,修補(bǔ)過程由軟件直接發(fā)送數(shù)據(jù)給硬件后端。硬件檢測出錯誤并向軟件傳遞HasErr 信號,軟件會做相應(yīng)的數(shù)據(jù)處理,向硬件發(fā)送Err_Processing 信號, 并根據(jù)錯誤修補(bǔ)方案代替前端數(shù)據(jù)處理部分為解碼器后端提供數(shù)據(jù),如圖3 中虛線所示。

  

  圖3 H.264 解碼器結(jié)構(gòu)圖

  在修補(bǔ)過程中, 由于采用基于空間連續(xù)性的預(yù)測,所以可以使用原有硬件中的幀內(nèi)預(yù)測部分。但是,出錯后原有的一些信號需要做相應(yīng)的處理,否則控制部分的一些狀態(tài)機(jī)會進(jìn)入異常狀態(tài)導(dǎo)致硬件無法繼續(xù)正常運(yùn)行。

  4 實(shí)驗(yàn)結(jié)果

  本實(shí)驗(yàn)先在PC 機(jī)上對C 模型修改和完善,硬件測試平臺則采用Xilinx Virtex4 系列的開發(fā)板。解碼器軟件部分使用C 語言編寫,Linux 下gcc 編譯,生成的二進(jìn)制文件運(yùn)行于基于開放核OPENRISC1200 的CPU;硬件部分使用Verilog HDL 描述。測試所用輸入碼流為ITU-T 提供的參考序列[2],加入11 個固定噪聲樣本。實(shí)驗(yàn)證明解碼器能順利解碼的噪聲碼流比例有了很大提高,圖像播放流暢,很多受損的地方得到了較好的修補(bǔ),但是也有一些能看出明顯的修補(bǔ)痕跡。

  5 結(jié)論

  在解碼器中加入錯誤檢查和修補(bǔ)功能,提高了解碼器處理受損碼流的能力,解碼器因此可以在更復(fù)雜的環(huán)境中使用,穩(wěn)定性也有所提高。H.264 視頻壓縮標(biāo)準(zhǔn)本身具有一些支持錯誤修補(bǔ)的技術(shù),比如可以多次重復(fù)傳輸SPS 和PPS,多個Slice,F(xiàn)MO 等。多次傳輸SPS 和PPS 以降低傳輸效率為代價獲得接收端更高的準(zhǔn)確率, 這在某些環(huán)境中是非常必要的。多個Slice 和FMO 在一定程度上增加了編碼和解碼的復(fù)雜度,但是它使得更多的周邊宏塊信息可以用于受損宏塊的預(yù)測和修補(bǔ)。此外,就修補(bǔ)方式而言,也有基于幀間相關(guān)性和其它幀內(nèi)預(yù)測插值方法的研究。本實(shí)驗(yàn)的主要目標(biāo)是使解碼器能順利解碼并且盡量重復(fù)利用已有的硬件單元,減少由于添加糾錯功能帶來的硬件面積增加。采用16×16 幀內(nèi)預(yù)測的方法修補(bǔ),圖像質(zhì)量相對于未修補(bǔ)時有了很大提高,但是有些地方還是有比較明顯的修補(bǔ)痕跡。尋找更好的圖像修補(bǔ)辦法,使修補(bǔ)后的圖像盡量接近原始圖像,減少可以明顯分辨的修補(bǔ)痕跡,這些是需要繼續(xù)研究的內(nèi)容。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
日韩亚洲欧美成人| 国产视频在线观看一区二区三区| 亚洲深夜福利在线| 亚洲日本aⅴ片在线观看香蕉| 欧美亚洲一区三区| 亚洲一区二区三区高清| 99热在这里有精品免费| 亚洲精华国产欧美| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美精品在线播放| 欧美高清在线播放| 欧美大片免费久久精品三p| 麻豆freexxxx性91精品| 看欧美日韩国产| 美女免费视频一区| 久久综合九色综合欧美就去吻| 久久精品一区二区国产| 欧美在线观看视频一区二区三区| 欧美亚洲一级片| 欧美一区二区三区电影在线观看| 午夜精品久久99蜜桃的功能介绍| 亚洲欧美日韩精品一区二区| 亚洲免费在线视频| 亚洲综合成人婷婷小说| 亚洲欧美国产视频| 午夜视频久久久| 欧美一区二区在线看| 久久成人免费电影| 91久久精品国产91久久性色tv| 亚洲欧洲一区二区在线播放| 亚洲免费av片| 亚洲午夜精品久久| 午夜精品一区二区三区在线| 欧美在线欧美在线| 久久久女女女女999久久| 久久综合影视| 欧美精品18+| 国产精品国产精品| 国产欧美日韩视频| 黄色成人av网| 亚洲欧洲一区二区三区在线观看| 99视频精品免费观看| 亚洲午夜国产成人av电影男同| 亚洲午夜精品一区二区| 午夜欧美视频| 亚洲精品激情| 亚洲午夜激情在线| 久久精品系列| 欧美久久综合| 国产精品自拍在线| 在线看欧美日韩| 亚洲最新在线视频| 久久av最新网址| 日韩亚洲综合在线| 亚洲欧美综合精品久久成人| 99国内精品| 亚洲国产日韩欧美在线99| 亚洲精品久久久久久久久久久久久 | 亚洲视频欧美在线| 性亚洲最疯狂xxxx高清| 亚洲欧洲视频在线| 亚洲免费在线精品一区| 鲁大师成人一区二区三区 | 一区二区三区日韩精品视频| 性亚洲最疯狂xxxx高清| 99国产精品久久久久久久久久| 午夜精品电影| 欧美成年人在线观看| 国产精品久久久久久久久果冻传媒 | 久久五月天婷婷| 欧美日韩一区二区高清| 国产一区美女| 日韩午夜在线电影| 欧美在线91| 亚洲一区在线观看免费观看电影高清| 久久国产手机看片| 欧美日韩三级电影在线| 好吊色欧美一区二区三区四区 | 亚洲伊人网站| 亚洲乱码国产乱码精品精天堂| 欧美一区1区三区3区公司| 嫩草影视亚洲| 国产亚洲欧美日韩日本| 一区二区精品| 亚洲免费成人| 久久综合色播五月| 国产精品午夜在线| 日韩小视频在线观看专区| 久久精品五月婷婷| 性欧美在线看片a免费观看| 欧美激情一二三区| 国产一区二区三区四区| 国产精品99久久久久久宅男| 亚洲看片免费| 免播放器亚洲| 国产日韩欧美综合在线| 夜夜狂射影院欧美极品| 亚洲精品日产精品乱码不卡| 久久久久久久久一区二区| 国产精品免费看久久久香蕉| 亚洲精品一区在线观看香蕉| 亚洲激情一区二区三区| 久久久免费精品视频| 国产欧美欧美| 亚洲一卡二卡三卡四卡五卡| 亚洲一区二区三区精品视频 | 欧美日韩中文字幕精品| 亚洲国产精品尤物yw在线观看| 久久国产精品一区二区三区四区 | 久久久久国产成人精品亚洲午夜| 国产精品成人一区二区网站软件| 亚洲精品在线视频| 亚洲精品免费网站| 免费看av成人| 一区二区亚洲欧洲国产日韩| 欧美在线观看网站| 欧美在线www| 国产麻豆日韩欧美久久| 亚洲一区图片| 亚洲欧美日韩国产综合在线| 国产精品高清网站| 亚洲午夜激情免费视频| 亚洲嫩草精品久久| 国产精品久久久久久久电影| 亚洲在线一区二区三区| 午夜亚洲影视| 国产伦精品一区二区三区高清版| 亚洲女人天堂av| 欧美一区二区私人影院日本 | 国内伊人久久久久久网站视频| 欧美专区亚洲专区| 欧美在线视频二区| 狠狠色丁香婷婷综合| 亚洲黄色高清| 欧美高清日韩| 亚洲精品午夜精品| 亚洲性人人天天夜夜摸| 国产精品国产三级国产专播品爱网| 一区二区三区久久精品| 亚洲欧美激情一区二区| 国产欧美激情| 欧美中文字幕精品| 免费中文字幕日韩欧美| 亚洲精品国产拍免费91在线| 亚洲网在线观看| 国产伦精品一区二区三区视频孕妇 | 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲免费视频一区二区| 久久久久在线观看| 亚洲第一精品夜夜躁人人爽| 在线亚洲国产精品网站| 国产精品爽爽ⅴa在线观看| 欧美影院在线| 欧美日韩国产成人| 亚洲综合色婷婷| 麻豆精品一区二区综合av| 亚洲精品乱码久久久久久日本蜜臀 | 久久久久久久久伊人| 亚洲人成毛片在线播放| 亚洲影音一区| 国产一区二区三区四区| 亚洲裸体视频| 国产精品一区三区| 亚洲福利电影| 欧美日韩亚洲一区二区三区在线观看| 亚洲一区影音先锋| 老司机一区二区三区| 亚洲精品在线一区二区| 久久国产主播| 亚洲三级免费电影| 欧美一区二区在线看| 最新成人av网站| 欧美影院精品一区| 亚洲国产片色| 久久成人免费网| 亚洲理论电影网| 久久久久国内| av成人免费在线| 免费成人激情视频| 亚洲午夜极品| 欧美激情区在线播放| 午夜在线精品偷拍| 欧美女激情福利| 久久av一区二区| 国产精品久久中文| 亚洲精品乱码久久久久久久久 | 影音先锋日韩精品| 午夜精品久久久久久 | 亚洲精品美女久久久久| 久久精品国产69国产精品亚洲| 日韩视频一区二区| 久热精品视频在线观看| 亚洲自拍偷拍福利| 欧美破处大片在线视频| 久久riav二区三区| 国产精品大片wwwwww| 亚洲激情国产精品| 国产欧美欧洲在线观看| 亚洲午夜免费视频| 在线精品国产欧美|