《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 嵌入式Linux下基于FFmpeg的視頻硬件編解碼
嵌入式Linux下基于FFmpeg的視頻硬件編解碼
單片機與嵌入式系統應用
劉建敏,楊斌
摘要: 對FFmpeg多媒體解決方案中的視頻編解碼流程進行研究。結合對S3C6410處理器視頻硬件編解碼方法的分析,闡述了嵌入式Linux下基于FFmpeg的H.264視頻硬件編解碼在S3C6410處理器上的實現方法,為嵌入式多媒體開發提供參考。
Abstract:
Key words :

引言

目前,智能手機、PDA和平板電腦等越來越多的嵌入式設備支持高清視頻采集和播放功能,高清視頻的采集或播放功能正廣泛用于游戲設備、監控設備、視頻會議設備和數字網絡電視等嵌入式系統中。這些功能的實現建立在高性能視頻硬件編解碼技術基礎之上。本文闡述了基于FFmpeg的H.264視頻硬件編解碼在S3C6410處理器上的實現方法,為數字娛樂、視頻監控和視頻通信系統開發過程中的高清視頻硬件編解碼的實現提供參考。

FFmpeg[1]是一個開源免費跨平臺的視頻和音頻流方案,屬于自由軟件。它包含非常先進的音頻/視頻編解碼庫libavcodec,提供了錄制、轉換以及流化音視頻的完整解決方案。FFmpeg支持MPEG4、FLV等40多種編碼,以及AVI、ASF等90多種解碼。目前國內較為流行的播放器暴風影音和國外較為流行的Mplayer在音頻/視頻編解碼方面都用到了FFmpeg。

S3C6410[2]是三星公司推出的應用處理器芯片,基于ARM11架構,主頻最高可達800 MHz。它具有多媒體硬件加速功能,其中包括大于30 fps的MPEG4 SP、H.264/263 BP和VC1(WMV9)多種視頻硬件編解碼,可用于手機、平板電腦和游戲機等手持移動設備和其他高性能嵌入式設備。國產手機魅族M8的處理器使用的就是S3C6410。

雖然FFmpeg提供了簡單的應用程序編程接口(API),可以很方便地實現多種格式的視頻軟件編解碼[3],但是軟件編解碼在處理復雜視頻編解碼(如H.264)時無法運用到處理速度不快、內存空間不多的嵌入式環境中。為了在資源有限的嵌入式環境下使用FFmpeg實現復雜視頻編解碼,下面在分析FFmpeg視頻編碼流程和S3C6410處理器視頻編解碼方法的基礎上,闡述嵌入式Linux操作系統下基于FFmpeg的H.264硬件編解碼在S3C6410處理器上的實現方法。

1 FFmpeg視頻編解碼流程

FFmpeg主要有encode/decode、muxer/demuxer和內存操作3個模塊。encode/decode模塊用于音視頻的編碼和解碼,存放在libavcodec子目錄中;muxer/demuxer模塊用于音頻和視頻的合并與分離(也稱混合器模塊),存放在libavformat目錄中;內存等常用模塊存放于libavutil目錄中。下面以解碼過程為例分析FFmpeg視頻編解碼流程。

解碼基本流程共分4步:

① 注冊所有可能用到的編解碼器和混合器。av_register_all(void)函數中通過執行 REGISTER_MUXDEMUX(X,x)和REGISTER_ENCDEC(X,x),把所有FFmpeg支持的混合器和編解碼器相關信息以鏈式的結構存放在內存中。

② 打開視頻文件。av_open_input_file(AVFormatContext **ic_ptr,const char *filename,AVInputFormat *fmt,int buf_size,AVFormatParameters *ap)函數中偵測文件的格式,根據文件格式從鏈式的混合器中找到相對應的混合器(demuxer)并分離出視頻信息。

③ 獲取視頻信息。通過av_find_stream_info(AVFormatContext *ic)函數獲取視頻格式。根據視頻格式,在鏈式的視頻解碼器中找到相應的視頻解碼器,并通過avcodec_open(AVCodecContext *avctx,AVCodec *codec)函數將解碼器打開用于下一步視頻的解碼。

④ 解碼一幀視頻,通過 avcodec_decode_video(AVCodecContext *avctx,AVFrame *picture,int *got_picture_ptr,const uint8_t *buf,int buf_size)函數解碼一幀視頻。

FFmpeg的編碼過程與解碼過程類似,不同的是第3步根據要求編碼的格式在鏈式的視頻編碼器中找到相應的視頻編碼器,并執行編碼過程。

通過以上對FFmpeg視頻編解碼流程分析可以知道,為了在FFmpeg中添加自定義的視頻編解碼器,并在程序運行時使用這個編解碼器,關鍵在于如下兩點:

① 根據FFmpeg對編解碼器的描述,實現自定義編解碼器。

② 通過REGISTER_ENCDEC(X,x)函數將自定義的視頻編解碼器添加到視頻編解碼器鏈中。在獲取視頻信息時,保證需要編碼或解碼的視頻能找到視頻編解碼器鏈中自定義的視頻編解碼器。

2 S3C6410處理器視頻編解碼方法

S3C6410視頻編解碼軟件架構[4]如圖1所示。底層為操作系統空間,上層為用戶空間,視頻編解碼器通過驅動和操作系統以設備文件的形式使用,使用的方法和普通文件一樣,包括文件打開和關閉、文件讀寫和輸入/輸出控制(ioctl,input/output control)。

圖1 S3C6410視頻編解碼軟件架構

具體操作方法如下:

① 通過open函數打開編解碼器設備文件;

② 使用mmap方法在用戶空間和驅動空間之間映射輸入/輸出緩存空間,這樣做的好處是可以快速進行數據輸入/輸出;

③ 通過ioctl設備編解碼參數,初始化編解碼器;

④ 輸入數據,通過ioctl執行編解碼過程,輸出數據;

⑤ 通過close方法關閉編解碼器設備文件。

值得注意的是,無論編碼還是解碼,處理的數據都是以一幀幀的形式操作的,所以第4步是一個不斷循環的過程,直到所有數據處理完成。另外,雖然編解碼器以設備文件的形式使用,但是它不能使用標準的文件讀寫操作,查看編解碼的設備驅動可以發現,其文件讀寫函數是空的,這一點三星公司的開發文檔并沒有說明。

3 H.264硬件編解碼實現

FFmpeg的H.264硬件編解碼[5]實現就是自定義一個視頻編解碼器,加入到FFmpeg庫中。這個視頻編解碼器使用S3C6410處理視頻硬件編解碼功能來實現H.264的視頻編碼和解碼過程,這樣使用FFmpeg庫的多媒體程序可以用訪問FFmpeg其他編解碼器一樣的方法使用這個自定義的編解碼器。添加自定義編解碼器的關鍵是根據FFmpeg中對編解碼的描述定義編解碼器,并實現定義中的相關函數。

在libavcodec/avcodec.h中的AVCodec結構體是定義FFmpeg編解碼器的關鍵結構體,包括編解碼器的名字、類型(聲音/視頻)、編解碼器的識別號(CodecID)、支持格式和一些用于初始化、編碼、解碼和關閉的函數指針。

typedef struct AVCodec {

const char *name;

enum CodecType type;

enum CodecID id;

int priv_data_size;

int (*init)(AVCodecContext *);

int (*encode)(AVCodecContext *,uint8_t *buf,int buf_size,void *data);

int (*close)(AVCodecContext *);

int (*decode)(AVCodecContext *,void *outdata,int *outdata_size,

uint8_t *buf,int buf_size);

int capabilities;

struct AVCodec *next;

void (*flush)(AVCodecContext *);

const AVRational *supported_framerates;

const enum PixelFormat *pix_fmts;

} AVCodec;

H.264硬件編解碼器定義如下:

AVCodec s3cx264_encoder = {

.name="s3cx264",

.type=AVMEDIA_TYPE_VIDEO,

.id=CODEC_ID_H264,

.init=X264_init,

.encode=X264_frame,

.decode=X264_decode,

.close=X264_close,

};

解碼器的名字為s3cx264,類型為視頻。CodecID為H264,表示這個解碼器用于H.264視頻編解碼。初始化、編碼、解碼和關閉函數指針分別指向X264_init、X264_frame、X264_decodec和X264_close函數。

添加s3cx264編解碼器到編解器鏈中,關鍵是通過修改libavcodec/allcodecs.c文件實現,修改如下:

REGISTER_ENCDEC (ASV1,asv1);

REGISTER_ENCDEC (S3CX264,s3cx264);

//添加s3cx264編解碼器

REGISTER_ENCDEC (ASV2,asv2);

這樣,在程序運行時調用av_register_all(void)函數后,就可以把自定義的編解碼器s3cx264添加到FFmpeg存放在內存中的解編碼器鏈中。值得提出的是,對同一個視頻格式FFmpeg有多個編解碼器與之相對應。如H.264格式的視頻,FFmpeg本身就帶有對應的軟解碼器,現在添加了硬解碼器,為了避免不確定是哪一個解碼器在執行,可以把自定義的硬件編解碼器在注冊時放在注冊過程的最前面,這樣編解碼器在添加到解編器鏈中時就會放在靠前的位置,查找時就可以優于軟件解碼器找到硬解碼器。

把硬件編解碼器s3cx264注冊到編解碼器鏈后,還要完成X264_init、X264_frame、X264_decodec和X264_close函數,編解碼器才能正常工作。以下結合前面對S3C6410視頻編解碼過程的分析,以編碼為例詳細闡述實現過程。

定義X264Context結構體,保存設備文件描述符、編碼參數和輸入/輸出地址等信息,用于FFmpeg模塊間數據的傳遞:

typedef struct X264Context {

int dev_fd;

uint8_t *addr;

s3c_mfc_enc_init_arg_t enc_init;

s3c_mfc_enc_exe_arg_t enc_exe;

s3c_mfc_get_buf_addr_arg_t get_buf_addr;

uint8_t *in_buf,*out_buf;

AVFrame out_pic;

} X264Context;

X264_init實現的是編碼器初始化過程, 用于編碼器設備文件的打開、內存空間的映射、編碼參數設置和獲取編解碼數據輸入/輸出地址。

static av_cold int X264_init(AVCodecContext *avctx){

X264Context *x4 = avctx>priv_data;

//打開編碼器設備文件

x4>dev_fd = open(MFC_DEV_NAME,O_RDWR|O_NDELAY);

//內存空間映射

x4>addr = (uint8_t *) mmap(0,BUF_SIZE,PROT_READ |PROT_WRITE,MAP_SHARED,x4>dev_fd,0);

//編碼參數設置

ioctl(x4>dev_fd,S3C_MFC_IOCTL_MFC_H264_ENC_INIT,&x4>enc_init);

//獲取輸入/輸出地址

x4>get_buf_addr.in_usr_data = (int)x4>addr;

ioctl(x4>dev_fd,S3C_MFC_IOCTL_MFC_GET_YUV_BUF_ADDR,&x4>get_buf_addr);

x4>in_buf = (uint8_t *)x4>get_buf_addr.out_buf_addr;

x4>get_buf_addr.in_usr_data = (int)x4>addr;

ioctl(x4>dev_fd,S3C_MFC_IOCTL_MFC_GET_LINE_BUF_ADDR,&x4>get_buf_addr);

x4>out_buf = (uint8_t *)x4>get_buf_addr.out_buf_addr;

return 0;

}

ioctl的參數為S3C_MFC_IOCTL_MFC_H264_ENC_INIT,表示使用H.264編碼。

X264_frame函數執行編碼過程。需要注意的是data參數保存了需要編碼的數據,是一個四維的數組,要把它轉換成一維數組用于S3C6410編碼器輸入。另外,編碼數據存在空的情況,也就是空幀。這是需要處理的,方法是返回“0”,表示沒有輸出數據,否則程序運行時會出現段錯誤。

static int X264_frame(AVCodecContext *ctx,uint8_t *buf,int bufsize,void *data){

……

//空間轉換

if(frame){

memcpy(x4>in_buf,frame>data[0],ctx>width*ctx>height);

memcpy(x4>in_buf+ctx>width*ctx>height,frame>data[1],ctx>width*ctx>height/4);

memcpy(x4>in_buf+ctx>width*ctx>height+ctx>width*ctx>height/4,frame>data[2],

ctx>width*ctx>height/4);

}

else

return 0;//空幀,返回

//執行編碼過程

ioctl(x4>dev_fd,S3C_MFC_IOCTL_MFC_H264_ENC_EXE,&x4>enc_exe);

//編碼數據輸出

bufsize = x4>enc_exe.out_encoded_size;

memcpy(buf,x4>out_buf,bufsize);

……

return bufsize;

}

X264_close關閉函數用于編碼結束后的資源釋放,包括取消空間映射和關閉設備文件。

static av_cold int X264_close(AVCodecContext *avctx){

//取消空間映射

munmap(x4>addr,BUF_SIZE);

//關閉設備文件

close(x4>dev_fd);

return 0;

}

解碼函數的實現過程類似于編碼函數,包括空間轉換、執行解碼和解碼數據輸出。初始化時使用S3C_MFC_IOCTL_MFC_H264_DEC_INIT參數,執行時使用S3C_MFC_IOCTL_MFC_H264_ENC_EXE參數。

4 運行測試

s3cx264編解碼器添加到FFmpeg后,可以通過以下方式測試:

① 用如下命令編譯FFmpeg。

./configure enablecrosscompile

arch=armv6 cpu=armv6

targetos=linux crossprefix

=/usr/local/arm/4.3.2/bin/

armlinux

② 運行 ./ffmpeg codecs查看可以找到s3cx264編解碼器,如圖2所示。

圖2 FFmpeg顯示s3cx264編解碼器信息

③ 結合USB攝像頭測試s3cx264編碼。運行 ./ffmpeg s 320x240 r 50 f video4linux2 i /dev/video2 vcodec s3cx264 test.mp4 可以看到FFmpegg正使用s3cx264編碼器將USB攝像頭采集的數據編碼壓縮成test.mp4文件。test.mp4能夠正常播放顯示。

以上測試說明已經成功地將s3cx264硬件視頻編碼器添加到了FFmpeg中,能夠編碼視頻數據,可以運用到其他使用FFmpeg庫的多媒體程序中。

結語

對于多媒體開發來說,編解碼時使用FFmpeg多媒體庫是一個不錯的選擇,支持較多的音視頻編解碼,編程接口簡單易用。了解FFmpeg編解碼過程,熟悉FFmpeg硬件編解碼器添加方法,對多媒體開發,尤其是資源有限的嵌入式多媒體開發有很大幫助。本文通過分析FFmpeg視頻編解碼過程和三星S3C6410處理器視頻硬件編解碼方法,在FFmpeg庫中成功添加S3C6410硬件編解碼器,使FFmpeg庫具有H.264視頻格式的硬件編解碼能力,可運用于游戲設備、監控設備、視頻會議設備和數字網絡電視等嵌入式系統中,同時也為其他嵌入式設備添加別的視頻格式的編解碼器到FFmpeg多媒體庫提供了參考。

參考文獻

[1] http://www.ffmpeg.org/.

[2] Samsung.S3C6410 Datasheet,2010.

[3] 李少春.基于FFMPEG的嵌入式視頻監控系統[J].電子技術,2007(3):3437.

[4] API Document S3C6400/6410 MultiFormat Codec,2008.

[5] FFmpeg codec HOWTO[EB/OL].2010[201101].http://wiki.multimedia.cx/index.php?title=FFmpeg_codec_HOWTO/.

劉建敏(碩士生)、楊斌(教授),主要研究方向為單片機與嵌入式系統及應用。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          黄色在线成人| 亚洲视频精品| 国产日韩欧美中文在线播放| 久久免费视频这里只有精品| 亚洲精品网站在线播放gif| **性色生活片久久毛片| 午夜精品久久久久久| 中国成人在线视频| 欧美亚洲一级| 中文成人激情娱乐网| 欧美精品首页| 欧美日韩一区二区在线观看视频| 一区二区三区在线免费观看| 欧美中文字幕精品| 国产婷婷成人久久av免费高清| 亚洲电影在线看| 欧美另类视频| 欧美一区二区三区视频在线观看| 精品动漫3d一区二区三区免费| 国产中文一区二区| 欧美r片在线| 一区二区在线视频播放| 宅男噜噜噜66一区二区66| 亚洲欧美一区二区激情| 国产日韩欧美中文在线播放| 欧美中文字幕在线播放| 亚洲午夜免费视频| 国产精品欧美经典| 亚洲啪啪91| 久久久www| 伊甸园精品99久久久久久| 国产美女精品视频免费观看| 久久久久国色av免费看影院| 欧美日韩一卡| 亚洲男女毛片无遮挡| 免费精品99久久国产综合精品| 欧美一区二区三区免费观看| 亚洲欧美激情视频在线观看一区二区三区| 国产精品私拍pans大尺度在线| 欧美激情视频网站| 欧美视频一区二区三区…| 亚洲国产精品久久久久久女王| 亚洲激情视频| 久久九九99| 亚洲色图制服丝袜| 亚洲一区二区视频在线观看| 欧美日韩裸体免费视频| 国产精品美女久久久久久免费| 久久免费视频观看| 在线播放日韩专区| 亚洲三级电影全部在线观看高清| 国产伦精品一区二区三区四区免费| 欧美日韩国产精品一区二区亚洲| 亚洲福利电影| 国产欧亚日韩视频| 国产精品一区二区女厕厕| 国产精品一二| 亚洲狼人精品一区二区三区| 欧美大香线蕉线伊人久久国产精品| 亚洲男人天堂2024| 久久久人成影片一区二区三区| 欧美精品国产一区| 国产区欧美区日韩区| 欧美r片在线| 欧美韩日精品| 国产精品xvideos88| 欧美激情一区在线| 国产精品vip| 欧美激情欧美激情在线五月| 91久久中文| 夜夜爽99久久国产综合精品女不卡| 亚洲茄子视频| 国产精品人人爽人人做我的可爱| 伊人色综合久久天天五月婷| 欧美不卡在线视频| 好吊成人免视频| 久久婷婷人人澡人人喊人人爽| 久久国产精品黑丝| 久久在线免费视频| 欧美日韩激情小视频| 老**午夜毛片一区二区三区| 国产手机视频一区二区| 美女露胸一区二区三区| 亚洲精品美女久久7777777| 国产精品久久久久一区二区三区共| 欧美激情成人在线视频| 欧美日韩一本到| 欧美日韩岛国| 久久久www成人免费毛片麻豆| 欧美日本簧片| 亚洲国产免费看| 亚洲欧美bt| 亚洲一区二区在线| 欧美日韩在线精品一区二区三区| 国产一区激情| 欧美自拍偷拍午夜视频| 国产婷婷色一区二区三区四区| 午夜精品免费视频| 久久精品在线播放| 欧美亚洲第一区| 亚洲精品一区二区三区樱花| 欧美精品xxxxbbbb| 国产精品久久久久久久久久久久| 欧美成人有码| 国产一区二区三区久久久久久久久| 亚洲黄一区二区三区| 在线视频亚洲欧美| 麻豆精品精华液| 亚洲国产99精品国自产| 亚洲二区免费| 亚洲第一黄色网| 在线视频日韩精品| 精品福利电影| 亚洲高清一区二| 国产精品美女久久久久av超清| 毛片一区二区| 91久久精品国产91性色| 午夜电影亚洲| 99国产精品私拍| 99热免费精品| 欧美体内she精视频在线观看| 午夜在线播放视频欧美| 蜜臀久久久99精品久久久久久| 久久久www免费人成黑人精品| 欧美激情一区二区三区在线视频观看| 国产亚洲精品aa午夜观看| 91久久精品一区二区别| 亚洲永久免费| 亚洲精品乱码久久久久久日本蜜臀| 国产精品毛片va一区二区三区| 久久美女艺术照精彩视频福利播放| 欧美精品性视频| 一区二区日韩欧美| 亚洲视频二区| 一区二区三区蜜桃网| 国产精品一区二区在线观看网站| 亚洲综合首页| 91久久国产综合久久| 国产一区二区在线观看免费播放| 欧美日韩亚洲综合| 欧美性理论片在线观看片免费| 国内精品美女av在线播放| 久久精品中文字幕一区二区三区| 欧美日韩午夜精品| 亚洲福利专区| 久久久久久九九九九| 亚洲精品一区二区三区蜜桃久| 欧美日韩91| 亚洲电影毛片| 亚洲国产精品视频一区| 麻豆久久久9性大片| 欧美日韩的一区二区| 亚洲免费观看在线视频| 欧美日韩午夜精品| 亚洲欧洲在线免费| 亚洲福利免费| 亚洲欧美春色| 欧美日韩国产首页在线观看| 久久综合久久综合久久| 欧美日韩国产三区| 久久精视频免费在线久久完整在线看| 亚洲欧美日韩天堂| 在线观看的日韩av| 国产日韩欧美视频在线| 欧美精品18| 亚洲美女av黄| 在线看欧美日韩| 国模精品娜娜一二三区| 欧美色区777第一页| 男女视频一区二区| 亚洲国产乱码最新视频| 国产酒店精品激情| 欧美日本国产| 久久精品欧美日韩精品| 99国产精品久久久久久久| 国产精品视频1区| 国产一区二区三区黄| 亚洲一级黄色| 尤物九九久久国产精品的分类| 欧美日韩国产在线看| 亚洲夫妻自拍| 欧美精品激情在线观看| 一区二区冒白浆视频| 欧美一区二区三区精品电影| 极品尤物久久久av免费看| 一区二区三区欧美在线| 中文精品99久久国产香蕉| 一本色道久久加勒比精品| 亚洲福利免费| 久久精品国产精品亚洲综合| 欧美日韩另类丝袜其他| 亚洲日本精品国产第一区| 亚洲永久字幕| 欧美日韩久久不卡| 欧美激情性爽国产精品17p| 国产精品羞羞答答xxdd| 宅男噜噜噜66国产日韩在线观看| 欧美精品一区在线发布| 国外成人在线| 亚洲国产精品悠悠久久琪琪| 欧美视频二区36p| 国内自拍视频一区二区三区| 久久久成人网| 国产精品一区二区三区观看| 国产视频欧美视频| 欧美激情精品久久久久久免费印度| 亚洲手机在线| 一区二区在线观看视频在线观看| 欧美人与性动交α欧美精品济南到| 欧美成人激情视频免费观看| 一区二区三区高清视频在线观看| 久久久噜噜噜久久中文字免| 亚洲自拍三区| 久久激情五月丁香伊人| 午夜精品国产精品大乳美女| 国产亚洲成人一区| 午夜精品久久久久| 亚洲精选中文字幕| 在线成人激情黄色| 国产真实乱偷精品视频免| 伊人成年综合电影网| 在线观看欧美黄色| 亚洲一区在线直播| 亚洲视频一二区| 欧美激情欧美狂野欧美精品| 亚洲精品日日夜夜| 国产日韩亚洲欧美| 亚洲欧美日韩综合aⅴ视频| 久久久91精品国产一区二区三区| 欧美伊人久久久久久久久影院| 日韩午夜在线视频| 久久最新视频| 亚洲欧美日韩综合一区| 久久久久久夜| 国产欧美日韩亚洲精品| 欧美一区二区三区四区在线| 欧美日韩国产a| 欧美日韩综合视频网址| 麻豆成人精品| 久久精品91久久香蕉加勒比| 欧美激情区在线播放| 久久午夜精品一区二区| 久久午夜羞羞影院免费观看| 99精品热视频| 亚洲无玛一区| 欧美日韩视频第一区| 欧美精品一区在线| 嫩模写真一区二区三区三州| 欧美伊久线香蕉线新在线| 亚洲欧美另类中文字幕| 亚洲国产成人在线视频| 亚洲在线不卡| 六月婷婷一区| 欧美人成在线视频| 亚洲欧洲一区二区三区| 欧美日韩 国产精品| 欧美三级电影网| 欧美一区免费| 在线日韩中文| 999亚洲国产精| 欧美影视一区| 国产精品久久久久久久久搜平片| 亚洲一级片在线观看| 亚洲欧美视频在线观看视频| 日韩西西人体444www| 亚洲伊人一本大道中文字幕| 老司机67194精品线观看| 欧美日本在线播放| 久久伊伊香蕉| 国产精品免费久久久久久| 国产在线精品成人一区二区三区| 国产精品一区二区在线观看| 欧美成人在线免费视频| 1024国产精品| 精品999在线观看| 日韩一区二区精品在线观看| 亚洲激精日韩激精欧美精品| 亚洲精品国偷自产在线99热| 亚洲日本黄色| 亚洲人成亚洲人成在线观看| 久久亚洲电影| 亚洲性视频h| 亚洲精品一区二区三区在线观看| 欧美久久综合| 国产九九精品| 黄色资源网久久资源365| 亚洲精品永久免费精品| 国产视频在线观看一区二区三区| 国产日韩在线一区二区三区| 国产精品日韩| 国产欧美日韩视频| 欧美一区午夜精品| 国产日韩欧美精品综合| 99精品久久免费看蜜臀剧情介绍| 国产一区二区主播在线| 欧美激情第一页xxx| 欧美精品在线视频观看| 欧美成人网在线| 欧美性猛片xxxx免费看久爱| 欧美区一区二| 亚洲一区二区在线观看视频| 久久免费视频这里只有精品| 欧美图区在线视频| 噜噜噜91成人网| 蜜臀av性久久久久蜜臀aⅴ| 一区二区久久久久久| 欧美日韩国产成人| 久热精品视频在线观看一区| 午夜精品www| 国产精品激情av在线播放| 欧美精品免费看| 欧美寡妇偷汉性猛交| 欧美激情久久久久久| 亚洲美女淫视频| 中文在线资源观看网站视频免费不卡| 新67194成人永久网站| 亚洲三级电影全部在线观看高清| 精品不卡视频| 亚洲狼人综合| 亚洲一区精彩视频| 欧美色123| 中文在线资源观看网站视频免费不卡| 国语自产偷拍精品视频偷| 国产三区二区一区久久| 久久久久久一区二区| 久久婷婷人人澡人人喊人人爽| 欧美日韩亚洲系列| 国产精品青草综合久久久久99|