• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于TMS320DM6446的X264編碼器的移植和優(yōu)化

      2012-12-30 09:48:04蘇寒松
      電子器件 2012年4期
      關(guān)鍵詞:編譯器編碼器代碼

      郭 昕,蘇寒松

      (天津大學(xué)電子信息工程學(xué)院,天津300072)

      H.264是ITU-T的視頻編碼專家組(VCEG)和ISO/IEC的活動(dòng)圖像專家組(MPEG)聯(lián)合制定的視頻壓縮標(biāo)準(zhǔn),引入了更多的新的高效的編碼技術(shù),在相同圖像質(zhì)量下,編碼效率提高了50%,但同時(shí)帶來了巨大的編碼運(yùn)算復(fù)雜度,影響了實(shí)時(shí)的要求。DSP的運(yùn)行速度已經(jīng)可以滿足H.264對(duì)圖像進(jìn)行實(shí)時(shí)處理的要求。本文采用合眾達(dá)公司基于TI達(dá)芬奇(DaVinci)DSP TMS320DM6446視頻處理模板Seed-DVS6446[1]來進(jìn)行移植工作,由于 H.264 直接移植到DSP平臺(tái)上編碼效率很低,需對(duì)其進(jìn)行優(yōu)化才能達(dá)到實(shí)時(shí)編碼的要求。

      1 編碼硬件平臺(tái)簡介

      德州儀器(TI)推出的TMS320DM6446采用Da-Vinci技術(shù)。TMS320DM6446采用雙核架構(gòu)集成了一個(gè)時(shí)鐘頻率為594 MHz的C64x+DSP內(nèi)核和一個(gè)297 MHz的ARM926EJ-S內(nèi)核。TMS320DM6446是定點(diǎn)DSP,便于進(jìn)行視頻處理的任務(wù)。由于其內(nèi)部有一個(gè)ARM內(nèi)核采用精簡指令集,所以可以對(duì)DSP進(jìn)行精確的控制,實(shí)現(xiàn)DSP的高速處理。并且集成了豐富的外設(shè)接口,如DDR2存儲(chǔ)器接口、視頻處理前端模塊VPFE和視頻顯示設(shè)備連接的視頻處理后端模塊VPBE等,方便進(jìn)行視頻處理[2]。

      其中,TMS320C64x+DSP是 TMS320C6000系列里最高性能的定點(diǎn)DSP平臺(tái),基于第二代高性能超長指令字結(jié)構(gòu),使其更適合數(shù)字多媒體的應(yīng)用TMS320C64x+DSP處理器集成了64個(gè)32 bit通用寄存器、8個(gè)高性能獨(dú)立功能單元—2個(gè)乘法器和6個(gè)算術(shù)邏輯單元。TMS320DM6446采用二級(jí)Cache結(jié)構(gòu),L1程序Cache為256 kbit直接映射Cache、L1數(shù)據(jù)Cache為640 kbit的雙向配置Cache、L2存儲(chǔ)/Cache包含一個(gè)512 kbit的存儲(chǔ)器空間由程序和數(shù)據(jù)共享[3]。

      2 編碼器的算法流程

      H264的實(shí)現(xiàn)版本主要有3種:JM、X264、T264,相比較而言,作為官方測試源碼,JM更偏重于學(xué)術(shù)研究,編碼復(fù)雜度高,不宜實(shí)用;T264是國內(nèi)組織自行編寫的代碼,速度遠(yuǎn)高于JM,但目前還不甚完善;而X264結(jié)合了JM和T264的各自優(yōu)點(diǎn),所以本文選用 X264 作為算法原型[4]。X264 編碼流程[5-6]如圖1所示。

      圖1 X264編碼流程

      3 X264編碼器的移植

      3.1 代碼裁剪

      Baseline檔次已經(jīng)具備所需要的功能[7],所以刪除程序中Baseline檔次以外的功能模塊(包括cabac.c和eval.c等),以及源程序中的解碼部分;因?yàn)閷?shí)時(shí)編碼應(yīng)用的環(huán)境要求低緩存延遲,而B幀預(yù)測需要較大緩存,決定去除B幀;采用幀方式,而去除和場方式有關(guān)的代碼和數(shù)據(jù);muxers.c文件的一些函數(shù)主要是定義了對(duì) yuv、mp4、y4m、mkv文件格式的輸入輸出支持,將yuv部分單獨(dú)提出來在X264.c中重寫,這樣重寫的代碼就只針對(duì)yuv視頻;由于主處理器TMS320DM6446是定點(diǎn)DSP,然而在X264中存在一定比例的浮點(diǎn)運(yùn)算,浮點(diǎn)運(yùn)算是很費(fèi)時(shí)的,因此保留計(jì)算 Y、U、V三種分量的PSNR值浮點(diǎn)運(yùn)算外,其它的都需要?jiǎng)h除;在源程序中,使用了大量的語句進(jìn)行調(diào)試和測試,用于觀察編譯器的狀態(tài)并防止一些異常情況,如assert函數(shù)printf函數(shù)、exit函數(shù)以及用于help提示信息、文件操作、用戶界面操作和Debug信息等,在能夠確保程序正確執(zhí)行的前提上,基本上可以去除;此外很多函數(shù)和數(shù)據(jù)在整個(gè)系統(tǒng)中,雖然被定義和聲明了,卻從來沒有被真正使用過,對(duì)于這一點(diǎn),CCS的編譯器給出了警告,把這一部分也刪除。

      3.2 編譯器的差異

      (1)X264程序是在VC環(huán)境下開發(fā)的,包含大量適用于VC環(huán)境下的頭文件,由于TMS320C6000實(shí)時(shí)支持庫包括ISO標(biāo)準(zhǔn)庫以及與DSP硬件相關(guān)的特殊指令庫,與VC的實(shí)時(shí)支持庫不盡相同,一些VC支持的庫不被C6000系統(tǒng)所支持,例如VC中支持的malloc、calloc等動(dòng)態(tài)存儲(chǔ)分布函數(shù),在CCS中都包含在stdlib庫中,因此必須對(duì)原來的include文件進(jìn)行修改;CCS中沒有timeb.h只能用DSP/BIOS中的CSL庫函數(shù)CLK_getltime實(shí)現(xiàn)原有的計(jì)時(shí)系統(tǒng)。需要根據(jù)TMS320C6000的優(yōu)化編譯器用戶手冊在CCS庫中匹配到與之功能相類似的文件和函數(shù)。

      (2)CCS只兼容ANSIC代碼,所以需要對(duì)非標(biāo)準(zhǔn)C部分的代碼進(jìn)行修改,使之能在CCS環(huán)境下運(yùn)行的C代碼。

      (3)在VC中,編譯器對(duì)所有的未初始化的變量默認(rèn)統(tǒng)一賦上了初值0。而CCS同樣會(huì)對(duì)未初始化的變量進(jìn)行系統(tǒng)賦值,但賦的值決定于相應(yīng)存儲(chǔ)器位置的原有數(shù)據(jù),會(huì)造成程序的重大錯(cuò)誤。因此,必須在移植時(shí)對(duì)所有變量進(jìn)行初始化。

      (4)CCS和VC環(huán)境下的數(shù)據(jù)類型并不完全相同,兩者數(shù)據(jù)類型對(duì)比見表1。在CCS中,長整型變量long在存儲(chǔ)器中被分配了40 bit。從節(jié)約CPU處理時(shí)間角度考慮應(yīng)對(duì)其進(jìn)行相應(yīng)的數(shù)據(jù)類型調(diào)整。

      表1 數(shù)據(jù)類型對(duì)比

      C語言定義了bool數(shù)據(jù)類型,而CCS中并未定義數(shù)據(jù)類型bool,所以如果在CCS中用到bool數(shù)據(jù)類型時(shí),需要預(yù)定義。

      (5)原始的X264代碼是基于PC平臺(tái)的,程序通過采用MMX和SSE語言編寫SAD、DCT等函數(shù)使X264具有很高的編碼速度,然而DSP和微處理的體系結(jié)構(gòu)不同使得這些技術(shù)不能應(yīng)用在DSP中,在X264代碼中將HAVE_MMX編譯選項(xiàng)屏蔽,同時(shí)將代碼中與該編譯選項(xiàng)相關(guān)的代碼注釋掉,只保留用標(biāo)準(zhǔn)C函數(shù)編寫的部分。

      3.3 存儲(chǔ)空間的分配

      在CCS中,設(shè)置程序和數(shù)據(jù)在寄存器中的存放是由編寫.cmd文件來完成的,也可以通過MEM配置工具將每一個(gè)段指定到某個(gè)邏輯存儲(chǔ)器空間中去。除了這種按段整體的分配之外,CCS還提供了一些類似預(yù)編譯的宏指令如#PRAGMA CODE_SECTION()#PRAGMA DATA_SECTION,可以在代碼中把某個(gè)函數(shù)或者數(shù)據(jù)指定到某個(gè)虛擬存儲(chǔ)器空間中去。把進(jìn)行編碼計(jì)算中可能被調(diào)用頻繁的程序段(如DCT變換、SAD)放在片內(nèi)程序存儲(chǔ)區(qū)中,把頻繁用到的數(shù)據(jù)段分配到片內(nèi)數(shù)據(jù)存儲(chǔ)器中,把其他程序和數(shù)據(jù)段放在片外存儲(chǔ)器中,另外,考慮到一幀圖像的數(shù)據(jù)量很大,故將參考幀和當(dāng)前幀的數(shù)據(jù)放到片外,在需要用到當(dāng)前塊和參考幀數(shù)據(jù)時(shí),再將它們從外存讀入到內(nèi)存中,提高效率。

      堆(heap)和棧(stack)的默認(rèn)值為1 kB(kbyte)??梢栽诰幾g選項(xiàng)中修改其默認(rèn)值,也可以用.cmd文件來對(duì)系統(tǒng)中的-heap和-stack進(jìn)行配置。由于X264編碼器中存在大量的動(dòng)態(tài)存儲(chǔ)空間的分配和函數(shù)的頻繁嵌套調(diào)用,在代碼移植初期,應(yīng)盡量將heap和stack設(shè)置的足夠大,以防止分配的存儲(chǔ)空間不夠,優(yōu)化時(shí)再根據(jù)具體情況做相應(yīng)的調(diào)整。

      4 X264 編碼器的優(yōu)化[8]

      4.1 編譯器優(yōu)化[9]:

      在代碼調(diào)試過程中編譯器選項(xiàng)設(shè)置為-g-kpm-op0-o3-fr"$(Proj_dir)"-d"_DEBUG"-mt-mw-mh-ms0-mv6400+

      -g選項(xiàng)使能符號(hào)調(diào)試和匯編源語句調(diào)試。no debug:生成的程序較精簡,但不能對(duì)其進(jìn)行調(diào)試。對(duì)程序調(diào)試完成后可以選擇此項(xiàng)。

      -o3選項(xiàng)使編譯器執(zhí)行各種優(yōu)化循環(huán)的方法,比如軟件流水、循環(huán)展開和SIMD(單指令多數(shù)據(jù)流)等技術(shù),使編碼時(shí)間大概減少到未優(yōu)化之前的1/2左右,并且和-g選項(xiàng)一起使用時(shí),程序優(yōu)化不會(huì)出現(xiàn)錯(cuò)誤。

      -k選項(xiàng)選擇后,編譯器將保留編譯過程產(chǎn)生的asm文件,在asm文件中,編譯器的缺省的反饋信息也同時(shí)保留下來。-mw選項(xiàng)也可以生成詳細(xì)的消息反饋,反饋信息基本上集中于循環(huán)的分析以及如何對(duì)循環(huán)進(jìn)行流水編排從而提高性能。用戶可以依照其對(duì)程序進(jìn)行修改。

      -pm選項(xiàng)表示程序級(jí)優(yōu)化,編譯器在編譯時(shí)可以從整個(gè)程序的角度來優(yōu)化程序。-op(n):通常和-pm一起聯(lián)合使用,控制程序級(jí)的優(yōu)化。-op0選項(xiàng)說明有外部變量引用和函數(shù)調(diào)用。

      -mt選項(xiàng)向編譯器說明代碼中沒有使用混迭技術(shù),打開-pm和-mt選項(xiàng)后可以提高編碼一幀的時(shí)間3 ms~4 ms。

      -mh:-mh[n]:去掉流水線 epilog(排空),減小程序的大小。

      -ms0選項(xiàng)不使用冗余進(jìn)行優(yōu)化,減少程序的大小。一般推薦-o與-ms0和-ms1聯(lián)合使用,表示性能優(yōu)化最重要,同時(shí)要考慮代碼尺寸。

      4.2 運(yùn)動(dòng)估計(jì)算法優(yōu)化

      X264編碼器提供了4種整像素運(yùn)動(dòng)估計(jì)搜索算法:X264_ME_DIA(鉆石搜索算法);X264_ME_HEX(六邊形搜索算法);X264_ME_UMH(非對(duì)稱十字型多層次六邊形格點(diǎn)搜索算法);X264_ME_ESA(全搜索算法)。X264_ME_ESA算法的PSNR(峰值信噪比)最高,X264_ME_UMH,X264_ME_HEX算法依次降低,X264_ME_DIA算法最低,但相互之間的質(zhì)量差別并不大,碼率差別也很小,但編碼速度上X264_ME_DIA算法最快,為了滿足實(shí)時(shí)的要求,選用X264_ME_DIA算法并對(duì)其改進(jìn)[10]。

      (1)匹配準(zhǔn)則

      運(yùn)動(dòng)估計(jì)一般的匹配準(zhǔn)則是采用率失真最優(yōu)化,準(zhǔn)則匹配誤差函數(shù)為:

      其中SAD(絕對(duì)差值和)計(jì)算公式如下:

      式中:M、N分別表示當(dāng)前編碼宏塊的長寬尺寸R(MV-PMV)代表了對(duì)運(yùn)動(dòng)矢量差編碼所需比特?cái)?shù);λmotion為拉格朗日常數(shù)[11]。文中將J(MV λmotion)最小的點(diǎn)記為最小誤差點(diǎn)MBD(Minimum Block Distortion)。

      (2)搜索起點(diǎn)

      候選的 MV包括:當(dāng)前塊的預(yù)測運(yùn)動(dòng)矢量PMV;當(dāng)前塊左、左上、上、右上塊的運(yùn)動(dòng)矢量MV參考幀(本文只采用一個(gè)參考幀)中的當(dāng)前位置塊、右邊塊、下邊塊運(yùn)動(dòng)矢量乘以時(shí)間差權(quán)重之后的MV;還有(0,0)。在候選 MV中選擇使得J(MV,λmotion)最小的為最佳MV,該MV對(duì)應(yīng)的點(diǎn)為運(yùn)動(dòng)估計(jì)的搜索起點(diǎn).

      (3)搜索方法的改進(jìn):以(2)中所得的搜索起點(diǎn)為中心點(diǎn),對(duì)搜索區(qū)域內(nèi)的點(diǎn)以如圖2(a)所示的小菱形模板(模板半徑為1),進(jìn)行搜索,即對(duì)中心和菱形四個(gè)頂點(diǎn)計(jì)算匹配誤差,得到MBD點(diǎn),并記最小代價(jià)為bcost。若MBD點(diǎn)在菱形的中心,則這個(gè)點(diǎn)就是整個(gè)搜索域內(nèi)的最優(yōu)匹配點(diǎn),若不是,則以現(xiàn)在的MBD點(diǎn)為中心進(jìn)行小菱形搜索,直到MBD點(diǎn)落在中心點(diǎn)[12]。

      在搜索過程中會(huì)出現(xiàn)某些點(diǎn)的重復(fù)搜索,例如,從圖2(b)中可以看出 a、b、c、d、e為搜索過程中重復(fù)搜索的點(diǎn),重復(fù)搜索必然造成運(yùn)動(dòng)估計(jì)效率低下。采用無重復(fù)搜索的小鉆石搜索法時(shí),第1次搜索5點(diǎn),第2次搜索3點(diǎn)(△表示),第3次搜索2點(diǎn)(□表示),第4次搜索2點(diǎn)(◆表示),只需12次搜索,可以省去不少計(jì)算量。

      圖2 鉆石搜索模板及搜索路徑舉例

      (4)提前終止:當(dāng)計(jì)算16×16模塊時(shí),由計(jì)算SAD的代碼可知每個(gè)塊需要計(jì)算pixl[x]-pix2[x]減法16×16次,在程序中添加if(i_sum>=bcost)條件判定,若滿足提前終止循環(huán)計(jì)算,即在i_sum的值大于或等于最優(yōu)的代價(jià)時(shí)跳出循環(huán),節(jié)省多余的計(jì)算量,具體程序十分簡單不在此贅述。

      4.3 EDMA 優(yōu)化[13]

      視頻編碼需要處理較大的數(shù)據(jù)量,如一幀CIF格式的YUV數(shù)據(jù)約有150 kB,而X264除了原始數(shù)據(jù)輸入外,處理完圖像數(shù)據(jù)的傳出圖像、插值數(shù)據(jù)輸出、圖像上下邊界擴(kuò)展、運(yùn)動(dòng)估計(jì)時(shí)參考幀圖像的傳入等都涉及到大量的數(shù)據(jù)搬移,但DSP對(duì)不同的存儲(chǔ)器的訪問速度相差數(shù)倍。為了提高編碼器的運(yùn)行效率,節(jié)省DSP核對(duì)各個(gè)模塊訪問所消耗的時(shí)鐘周期,需要啟用DSP的DMA作為數(shù)據(jù)在兩個(gè)存儲(chǔ)器之間的傳輸通路。C64x+在外部存儲(chǔ)器與內(nèi)部存儲(chǔ)器之間的數(shù)據(jù)傳遞可以通過增強(qiáng)型DMA(EDMA)實(shí)現(xiàn)。在片內(nèi)存儲(chǔ)器L2中開辟兩個(gè)大小相同的緩沖區(qū)Pingbuffer和Pongbuffer,兩個(gè)緩沖區(qū)輪流交替工作。當(dāng)EDMA傳輸數(shù)據(jù)到Pingbuffer時(shí),CPU處理Pongbuffer中的數(shù)據(jù);當(dāng)CPU和EDMA操作完畢后,Pingbuffer和Pongbuffer緩沖區(qū)互換,EDMA繼續(xù)傳輸數(shù)據(jù)覆蓋 Pongbuffer中的數(shù)據(jù),CPU處理Pingbuffer中的數(shù)據(jù)。由于傳輸時(shí)間小于編碼運(yùn)算的時(shí)間,則EDMA完全獨(dú)立于CPU在后臺(tái)運(yùn)行,不耗費(fèi)一個(gè)時(shí)鐘周期,實(shí)現(xiàn)了數(shù)據(jù)傳輸和CPU并行提高了代碼的運(yùn)行效率。

      4.4 進(jìn)一步優(yōu)化

      (1)內(nèi)聯(lián)函數(shù)優(yōu)化:C6000編譯器提供了許多內(nèi)聯(lián)函數(shù)intrinsics,可迅速優(yōu)化C代碼,使用時(shí)與普通函數(shù)一樣調(diào)用,它們與C6000匯編指令一一對(duì)應(yīng),直接使用內(nèi)聯(lián)函數(shù)可以快速實(shí)現(xiàn)SIMD[14],如未使用內(nèi)聯(lián)函數(shù)優(yōu)化前X264程序計(jì)算16×16模塊的SAD的函數(shù)每次只能計(jì)算一個(gè)像素點(diǎn)的絕對(duì)值差,而使用內(nèi)聯(lián)函數(shù)_mem4()、_subabs4()等進(jìn)行優(yōu)化后,一次可以計(jì)算4個(gè)像素點(diǎn)的絕對(duì)值差,大大提高了運(yùn)算速度。

      (2)循環(huán)優(yōu)化:C語言中使用偽指令#pragma MUST_ITERATE(min,max,multiple)可以明確告訴編譯器循環(huán)次數(shù)或最小循環(huán)次數(shù),從而防止冗余循環(huán)產(chǎn)生,也便于編譯器將循環(huán)展開,此外,由于在編譯器進(jìn)行優(yōu)化時(shí)只會(huì)在最內(nèi)層循環(huán)中形成一個(gè)pipeline,盡量將多重循環(huán)拆開形成一個(gè)單層循環(huán)不要使用多重循環(huán),這樣循環(huán)語句才能充分利用編譯器的軟件流水線。

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

      TMS320DM6446的時(shí)鐘頻率為594 MHz,選取100幀、CIF格式(352×288)的測試序列container foreman、mobile,量化步長取 27,視頻為 Y:U:V 4:2 0格式,采用IPPP…編碼模式。表2為優(yōu)化前后各視頻序列的結(jié)果比較,從表中可以看出,優(yōu)化后的編碼器幀率比優(yōu)化前有了較大幅度的提高,基本能夠?qū)崿F(xiàn)CIF格式實(shí)時(shí)編碼,PSNR值在優(yōu)化前后并沒有明顯變化,說明優(yōu)化后編碼質(zhì)量未受到大的影響

      表2 優(yōu)化前后對(duì)比

      6 結(jié)論

      本文結(jié)合DM6446的硬件結(jié)構(gòu)特點(diǎn),將X264編碼器在DM6446上成功地進(jìn)行了移植,并對(duì)編譯器選項(xiàng)、運(yùn)動(dòng)估計(jì)、內(nèi)聯(lián)函數(shù)及DSP在編碼時(shí)的數(shù)據(jù)搬移等方面進(jìn)行了優(yōu)化,基本可達(dá)到CIF格式序列的實(shí)時(shí)編碼要求。

      [1]SEED-DVS6446 用戶指南[S].Texas Instruments,2008.10.

      [2]TMS320DM644x DMSoC VPBE User’s Guide[S].Texas Instruments,2007.04.

      [3]李方慧,王飛,何佩琨.TMS320C6000系列DSPs原理及應(yīng)用[M].電子工業(yè)出版社,2003.

      [4]李博丞,嚴(yán)勝剛,曲鵬.基于TMS320DM6446的H.264編碼器實(shí)現(xiàn)與優(yōu)化[J].電子設(shè)計(jì)工程,2009,17(05):122-123.

      [5]畢厚杰.新一代視頻壓縮編碼標(biāo)準(zhǔn)——H.264/AVC[M].北京:人民郵電出版社,2005.

      [6]劉仕翔.基于DM642 DSP的x264編碼器研究及實(shí)現(xiàn)[D].西南交通大學(xué),2010.17-18.

      [7]王鶴,H.264視頻編碼算法在DM6446上的研究與實(shí)現(xiàn)[D].內(nèi)蒙古大學(xué),2011.40-41.

      [8]Video Encoding Optimization on TMS320DM64x/C64x[S].Texas Instruments,2004.10

      [9]TMS320C6000 Optimizing Compiler User’s Guide[S].Texas In struments,2002

      [10]王宏志,蘇令華,王曉紅.基于達(dá)芬奇平臺(tái)的視頻編碼器實(shí)現(xiàn)[J].計(jì)算機(jī)測量與控制,2011,19(05):1159-1160

      [11]石迎波,吳成柯.基于H264的多參考幀運(yùn)動(dòng)估計(jì)快速算法[J].計(jì)算機(jī)工程,2008,34(10):218-220

      [12]錢瑛.基于X264的運(yùn)動(dòng)估計(jì)算法研究[J].硅谷,2008,24

      [13]TMS320C6000 DSP Enhanced Direct Memory Access(EDMA Controller Reference Guide(SPRU234A)[S].Texas Instrument.

      [14]劉定佳.H.264視頻編碼算法研究及DSP實(shí)現(xiàn)[D].西安電子科技大學(xué),2010.49-50.

      猜你喜歡
      編譯器編碼器代碼
      基于相異編譯器的安全計(jì)算機(jī)平臺(tái)交叉編譯環(huán)境設(shè)計(jì)
      創(chuàng)世代碼
      創(chuàng)世代碼
      創(chuàng)世代碼
      創(chuàng)世代碼
      基于FPGA的同步機(jī)軸角編碼器
      基于PRBS檢測的8B/IOB編碼器設(shè)計(jì)
      JESD204B接口協(xié)議中的8B10B編碼器設(shè)計(jì)
      電子器件(2015年5期)2015-12-29 08:42:24
      多總線式光電編碼器的設(shè)計(jì)與應(yīng)用
      通用NC代碼編譯器的設(shè)計(jì)與實(shí)現(xiàn)
      青河县| 福鼎市| 招远市| 海宁市| 漠河县| 始兴县| 江油市| 班戈县| 共和县| 灵宝市| 宣化县| 乌海市| 会宁县| 安溪县| 射洪县| 西昌市| 托克托县| 阿瓦提县| 肇东市| 内黄县| 宾川县| 民丰县| 汾西县| 乐陵市| 泸州市| 富川| 晋城| 新野县| 北碚区| 寻甸| 永清县| 湖北省| 徐水县| 嘉义市| 吴川市| 海原县| 龙川县| 嘉黎县| 郓城县| 吐鲁番市| 兴宁市|