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

string

string
posts - 27, comments - 177, trackbacks - 0, articles - 0
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
上面一節(jié)是從使用者的角度看Protocol ,這一節(jié)從Protocol提供者的角度來(lái)看Protocol。
作為提供者,我們要了解三個(gè)問(wèn)題:
1. Protocol是什么?
2. Protocol安裝到什么地方。
3. 怎么安裝Protocol。
前兩個(gè)問(wèn)題上一節(jié)已經(jīng)講述,那么我們現(xiàn)在看第三個(gè)問(wèn)題。
BootService 提供了InstallProtocolInterface幫我們把Protocol安裝到Controller Handle上。
EFI_STATUS
InstallProtocolInterface (
    IN OUT EFI_HANDLE *Handle,                 // Protocol將安裝到這兒
    IN EFI_GUID *Protocol,                         // GUID
    IN EFI_INTERFACE_TYPE InterfaceType,  // 通常為EFI_NATIVE_INTERFACE
    IN VOID *Interface                              // Protocol實(shí)例
);

我們希望我們的Protocol能常駐內(nèi)存以提供服務(wù)。 我們知道Application 是不能常駐內(nèi)存的,只有Driver可以常駐內(nèi)存。那么我們就要用driver的形式來(lái)提供服務(wù)。但我們的服務(wù)與通常的driver不同,driver需要特定硬件支持,而我們的服務(wù)不需要。這就使得我們的driver變的簡(jiǎn)單,driver需要安裝到特定的controller上,我們的服務(wù)安裝到任何controller都可以。
那么還有一個(gè)不是問(wèn)題的問(wèn)題,何時(shí)安裝Protocol。作為驅(qū)動(dòng)的Protocol有特定的規(guī)范,將在下一節(jié)講述。通常一個(gè)driver被load到內(nèi)存后會(huì)執(zhí)行InstallProtocolInterface 將 Driver Binding Protocol 和Component Name Protocol安裝到自身Handle(或者其它handle)上。 相比driver我們的服務(wù)要簡(jiǎn)單許多,我們?cè)贗mage初始化的時(shí)候?qū)rotocol安裝到自身Handle即可。

通過(guò)上面的分析,我們決定使用driver來(lái)提供服務(wù),Image初始化的時(shí)候安裝Protocol。具體到我們將要提供的視頻解碼服務(wù),我們還要分析一下我們需要提供哪些函數(shù)。我們需要OpenVideo來(lái)打開視頻,QueryFrame取得一幀,CloseFrame關(guān)閉視頻,還需要一個(gè)函數(shù)來(lái)獲取視頻信息。下面讓我們一步步來(lái)產(chǎn)生這個(gè)Protocol吧。
頭文件ffdecoder.h
首先我們要定義我們Protocol的GUID
#define EFI_FFDECODER_PROTOCOL_GUID \
{ \
    0xce345171, 0xabcd, 0x11d2, {0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
}

//
///// Protocol GUID name defined in EFI1.1.
// 
#define FFDECODER_PROTOCOL  EFI_FFDECODER_PROTOCOL_GUID
然后定義Protocol里服務(wù)的函數(shù)原型
/**
  Open the video 
  @param  This       Indicates a pointer to the calling context.
  @param  FileName   File name of the video under current dir. 
  @retval EFI_SUCCESS           The video is opened successfully. 
  @retval EFI_NOT_FOUND         There is no such file.
**/
typedef 
EFI_STATUS
(EFIAPI* EFI_OPEN_VIDEO)(
        IN EFI_FFDECODER_PROTOCOL* This,
        IN CHAR16* FileName
        );

/**
  Close the video 
  @param  This       Indicates a pointer to the calling context.
  @retval EFI_SUCCESS           The video is closed successfully. 
**/
typedef 
EFI_STATUS
(EFIAPI* EFI_CLOSE_VIDEO)(
        IN EFI_FFDECODER_PROTOCOL* This
        );

/**
  Query a frame from the video. 
  @param  This       Indicates a pointer to the calling context.
  @param  pFrame     Points to the current Frame.  
  @retval EFI_SUCCESS          The video is opened successfully. 
  @retval EFI_NO_MEDIA         There is no opened video. 
  @retval EFI_END_OF_MEDIA     There is no more Frame. 
**/
typedef 
EFI_STATUS
(EFIAPI* EFI_QUARY_FRAME)(
        IN  EFI_FFDECODER_PROTOCOL  *This,
        OUT AVFrame                 **pFrame
        );

/**
  Query the Width and height of a frame. 
  @param  This       Indicates a pointer to the calling context.
  @param  Width      Width(in pixels) of a frame.
  @param  Height     Height(in pixels) of a frame.
  @retval EFI_SUCCESS          Return the Size successfully. 
  @retval EFI_NO_MEDIA         There is no opened video. 
**/
typedef 
EFI_STATUS
(EFIAPI* EFI_QUARY_FRAME_SIZE)(
        IN  EFI_FFDECODER_PROTOCOL  *This,
        OUT UINT32                  *Width,
        OUT UINT32                  *Height 
        );
下面就要定義Protocol本身了, 按照EDK2的規(guī)則,我們的Protocol取名為EFI_FFDECODER_PROTOCOL . 
struct _EFI_FFDECODER_PROTOCOL{
 UINT64          Revision;
 EFI_OPEN_VIDEO  OpenVideo;
 EFI_CLOSE_VIDEO CloseVideo;
 EFI_QUARY_FRAME QueryFrame;
 EFI_QUARY_FRAME_SIZE QueryFrameSize;
};
typedef struct _EFI_FFDECODER_PROTOCOL EFI_FFDECODER_PROTOCOL;
typedef EFI_FFDECODER_PROTOCOL  EFI_FFDECODER;

頭文件ffdecoder.h最后要提供給用戶使用。下面進(jìn)入EFI_FFDECODER_PROTOCOL 的實(shí)現(xiàn)部分ffdecoder.c
ffdecoder.c中我們要提供EFI_FFDECODER_PROTOCOL 的四個(gè)成員函數(shù),以及一個(gè)Image初始化函數(shù), 一個(gè)Private數(shù)據(jù)結(jié)構(gòu),用于存放EFI_FFDECODER_PROTOCOL 的上下文。
首先看Private數(shù)據(jù)結(jié)構(gòu),如果你對(duì)ffmpeg比較熟悉,那么你很快就會(huì)明白我們需要在Private中存放什么
#define FFDECODER_PRIVATE_DATA_SIGNATURE  SIGNATURE_32 ('V', 'I', 'D', 'O')
/**
  @member     Signature         The signature of the Protocol Context
  @member     FFDecoder        The EFI_FFDECODER_PROTOCOL   
  @member     pFormatCtx       Video Format Context
  @member    videoStream       The index of Video Stream in all the streams.
  @member     pCodecCtx        Codec context
  @member     pFrame             The yuv Frame
  @member     pFrameRGBA      The RGBA Frame
  @member     buffer               internal used
  @member     img_convert_ctx  The Context of converting from yuv to rgba.
 **/
typedef struct {
    UINTN                 Signature;
    EFI_FFDECODER_PROTOCOL  FFDecoder; 
    AVFormatContext    *pFormatCtx;
    int                        videoStream;
    AVCodecContext     *pCodecCtx;
    AVFrame               *pFrame; 
    AVFrame               *pFrameRGBA;
    uint8_t                  *buffer;
    struct SwsContext  *img_convert_ctx ;

} FFDECODER_PRIVATE_DATA;

static FFDECODER_PRIVATE_DATA gFFDecoderPrivate;

我們還定義了一個(gè)變量gFFDecoderPrivate, 同時(shí)我們就得到了 EFI_FFDECODER_PROTOCOL 的一個(gè)實(shí)例。下面我們要定義4個(gè)函數(shù),對(duì)應(yīng)EFI_FFDECODER_PROTOCOL 的四個(gè)成員函數(shù)。
EFI_STATUS
OpenVideo(
        IN EFI_FFDECODER_PROTOCOL* This,
        IN CHAR16* FileName
        )
{
    FFDECODER_PRIVATE_DATA* Private;
    Private = FFDECODER_PRIVATE_DATA_FROM_THIS(This);
    ...
}

EFI_STATUS
CloseVideo(
        IN EFI_FFDECODER_PROTOCOL* This
        )
{
    FFDECODER_PRIVATE_DATA* Private;
    Private = FFDECODER_PRIVATE_DATA_FROM_THIS(This);
    ...
}

EFI_STATUS
QueryFrame(
        IN  EFI_FFDECODER_PROTOCOL  *This,
        OUT AVFrame                 **ppFrame
        )
{
    FFDECODER_PRIVATE_DATA* Private;
    Private = FFDECODER_PRIVATE_DATA_FROM_THIS(This);
    ...
}

EFI_STATUS
QueryFrameSize(
        IN  EFI_FFDECODER_PROTOCOL  *This,
        OUT UINT32                  *Width,
        OUT UINT32                  *Height
        )
{
    FFDECODER_PRIVATE_DATA* Private;
    Private = FFDECODER_PRIVATE_DATA_FROM_THIS(This);
    ...
}
宏FFDECODER_PRIVATE_DATA_FROM_THIS(This) 用于根據(jù)Protocol指針取得Protocol的上下文, 定義如下:
#define FFDECODER_PRIVATE_DATA_FROM_THIS(a) CR (a, FFDECODER_PRIVATE_DATA, FFDecoder, FFDECODER_PRIVATE_DATA_SIGNATURE)
本篇重點(diǎn)講述Protocol,所以這個(gè)四個(gè)函數(shù)細(xì)節(jié)不再詳述,感興趣的話可以看附件中的源碼。

下面我們看最重要的部分,Image的初始化函數(shù),回憶一下,我們會(huì)記得,在初始化函數(shù)中我們將要安裝Protocol。
EFI_STATUS
EFIAPI
InitFFdecoder (
        IN EFI_HANDLE        ImageHandle,
        IN EFI_SYSTEM_TABLE  *SystemTable
        )
{
    EFI_STATUS Status;
    FFDECODER_PRIVATE_DATA* Private = &gFFDecoderPrivate;
    //初始化ShellProtocol
    ShellLibConstructorWorker2(NULL,NULL,NULL,NULL);
    //初始化StdLib
    (void) DriverInitMain(0, NULL);

    //設(shè)置Protocol上下文的Signature.
    //初始化Protocol,設(shè)置Protocol成員函數(shù)。
    Private-> Signature= FFDECODER_PRIVATE_DATA_SIGNATURE  ; 
    Private->FFDecoder.OpenVideo = OpenVideo; 
    Private->FFDecoder.CloseVideo = CloseVideo; 
    Private->FFDecoder.QueryFrame= QueryFrame;  
    Private->FFDecoder.QueryFrameSize= QueryFrameSize; 

    //將
EFI_FFDECODER_PROTOCOL的實(shí)例 
&(Private->FFDecoder )安裝到自身Handle中。
    Status = gBS->InstallProtocolInterface (
            &ImageHandle,
            &gEfiFFDecoderProtocolGUID ,
            EFI_NATIVE_INTERFACE,
            &Private->FFDecoder
            );

}

在.inf文件中我們把InitFFdecoder 設(shè)為Entrypoint,當(dāng)Image被load到內(nèi)存后InitFFdecoder 會(huì)自動(dòng)執(zhí)行。
[Defines]
  INF_VERSION                    = 0x00010006
  BASE_NAME                      = ffdecoder
  FILE_GUID                        = 33a97c46-7491-4dfd-b442-74798713ce5f
  #ENTRY_POINT                 = ShellCEntryLib
  #MODULE_TYPE                = UEFI_APPLICATION 
  VERSION_STRING              = 0.1
  MODULE_TYPE                  = UEFI_DRIVER 
  ENTRY_POINT                   = InitFFdecoder 

#
#  VALID_ARCHITECTURES           = IA32 X64 IPF
#

[Sources]
  ffdecoder.c 
  math.c
  InitShell.c
[Packages]
  StdLib/StdLib.dec
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec
  ShellPkg/ShellPkg.dec
  ffmpeg/ffmpeg.dec
  StdLibPrivateInternalFiles/DoNotUse.dec

[LibraryClasses]
  UefiDriverEntryPoint
  LibC
  LibStdio
  LibMath
  LibString
  BsdSocketLib
  EfiSocketLib
  UseSocketDxe
  DevShell
  zlib
  libavcodec
  libavutil
  libswscale
  libavformat

  LibUefi
  LibNetUtil
啊哈,編譯得到ffdecoder.efi. 使用命令 load ffdecoder.efi 加載之后就可以像使用其它Protocol一樣使用EFI_FFDECODER_PROTOCOL了。
下面是一個(gè)簡(jiǎn)單的例子 fplayer.c 用于播放視頻
#ifdef __cplusplus
extern "C"{
#endif
#include 
<Uefi.h> 
#include 
<Base.h> 
#include 
<Library/DebugLib.h>
#include 
<Library/PrintLib.h>
#include 
<Protocol/GraphicsOutput.h>
EFI_GRAPHICS_OUTPUT_PROTOCOL         
*GraphicsOutput;
#ifdef __cplusplus
}
#endif
#include 
"ffdecoder.h"

EFI_STATUS LocateGraphicsOutput()
{
    EFI_STATUS Status 
= gBS->LocateProtocol(
            
&gEfiGraphicsOutputProtocolGuid,
            NULL,
            (VOID 
**)&GraphicsOutput);
    
if (EFI_ERROR(Status)) {
        Print(L
"LocateProtocol %r\n", Status);
    }
    
return Status;
}
void ShowFrame(AVFrame *pFrame, int width, int height, int iFrame)
{
    
if(GraphicsOutput)
        GraphicsOutput
->Blt(
                GraphicsOutput,
                (EFI_GRAPHICS_OUTPUT_BLT_PIXEL 
*)pFrame->data[0],
                EfiBltBufferToVideo,
                
0,0,
                
0,0,
                width, height,
                
0
                );
}

int main(int argc, char *argv[])
{
    AVFrame         
*pFrame; 
    EFI_GUID gEfiFFDecoderProtocolGUID 
= EFI_FFDECODER_PROTOCOL_GUID ;
    EFI_FFDECODER_PROTOCOL 
*FFDecoder; 
    UINT32 Width, Height;
    CHAR16
* FileName = 0;

    
// Locate the Protocol
    EFI_STATUS Status = gBS->LocateProtocol(
            
&gEfiFFDecoderProtocolGUID ,
            NULL,
            (VOID 
**)&FFDecoder );
    
if (EFI_ERROR(Status)) {
        Print(L
"LocateProtocol %r\n", Status);
        
return Status;
    }
    LocateGraphicsOutput();

    
// Open Video
    Status =  gBS->AllocatePool(EfiLoaderData, AsciiStrLen(argv[1]) *2 + 2, (VOID**)&FileName );
    AsciiStrToUnicodeStr(argv[
1], FileName);
    Status 
= FFDecoder -> OpenVideo( FFDecoder, FileName);
    (
void) gBS->FreePool ( FileName);
    
if (EFI_ERROR(Status)) {
        Print(L
"Open %r\n", Status);
        
return Status;
    }
    
// Query Frame Size(Width height)
    Status = FFDecoder-> QueryFrameSize(FFDecoder, &Width, &Height);
    
// Query Frame 
    while!EFI_ERROR( FFDecoder-> QueryFrame(FFDecoder, &pFrame)))
    {
        ShowFrame(pFrame, Width, Height, 
0);
    }
    
// Close Video
    Status = FFDecoder -> CloseVideo(FFDecoder );
    
return 0;
}
在shell里面執(zhí)行
f0:/>ffplayer test.avi                                     
就可以播放視頻了
 下載EFI_FFDECODER_PROTOCOL 附近包含了32-bit的ffdecoder.efi 以及ffdecoder.c fplayer.c

Feedback

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2012-03-27 03:58 by djx_zh
下載EFI_FFDECODER_PROTOCOL
http://codelibrarydzh.googlecode.com/files/EFI_FFDECODER_PROTOCOL_1.0.zip

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2012-07-14 22:56 by djx_zh
@djx_zh
https://codelibrarydzh.googlecode.com/files/EFI_FFDECODER_PROTOCOL_1.1.zip
修正一個(gè)bug: 顯示的時(shí)候應(yīng)采用BGRA格式。
增加了timer用于控制播放。按'q'退出播放

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2012-08-23 15:44 by Amin
ffdecoder.efi 的driver存放在U盤中,要在shell下運(yùn)行Load,老是無(wú)法成功
指令 fs0:\ Load ffdecoder.efi
都只會(huì)顯示Load : fs0:\ffdecoder.efi is not a image

請(qǐng)問(wèn)是否哪邊有錯(cuò)誤?

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2012-08-23 17:02 by Amin
請(qǐng)問(wèn)ffdecoder.efi 與ffplayer.efi是否有X64版本可以提供?

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2012-08-23 17:50 by Amin
我無(wú)法找出以下的LibraryClasses
zlib
libavcodec
libavutil
libswscale
libavformat
請(qǐng)問(wèn)可從哪里獲取?

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)[未登錄]  回復(fù)  更多評(píng)論   

2012-08-24 08:54 by djx_zh
@Amin
X64的仍有些技術(shù)問(wèn)題沒有解決。解碼速度已經(jīng)足夠了,但是GraphOutputProtocol的顯示速度太慢。 你可以留個(gè)email給我,我發(fā)給你。

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2012-08-24 09:28 by Amin
我的mail : white_5168@hotmail.com
請(qǐng)問(wèn)我在build x64時(shí)有很多的LIB加得很辛苦,請(qǐng)問(wèn)有什麼方法可以include一個(gè)文檔就可以build成功
我的環(huán)境只有用X64的,所以32位元的ffdecoder與ffplayer都無(wú)法執(zhí)行

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2012-08-24 10:08 by djx_zh
@Amin
你是說(shuō)編譯ffdecoder很辛苦嗎? ffdecoder的編譯比較麻煩,需要修改EDK2的源碼和ffmpeg源碼。除非你很有興趣去學(xué)習(xí)EDK2, 否則沒必要去編譯ffdecoder.
ffplayer編譯非常簡(jiǎn)單。
X64的.efi文件已經(jīng)發(fā)給你了。

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2012-09-19 10:38 by Amin
不是編譯ffdecoder很辛苦,而是你所附上的附檔,里面真的缺了很多文檔,光是要找出來(lái)與引用就需要很費(fèi)時(shí)間,不知是否能提供的完整,如libavcodec.inf,libavutil.inf,libswscale.inf,libavformat.inf,ffmpeg/ffmpeg.dec

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)[未登錄]  回復(fù)  更多評(píng)論   

2013-05-06 10:52 by 張揚(yáng)
博主,你好,請(qǐng)問(wèn)有什么方法可以直接調(diào)用shellpkg這個(gè)包里面的函數(shù)呢,比如讀寫文件,可以用simple_file_protocol,但是shellpkg里面的方法如何調(diào)用?
還有關(guān)于視屏播放的源碼能否分享?(如果不涉及您的版權(quán)的前提下)
多謝!

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)[未登錄]  回復(fù)  更多評(píng)論   

2013-05-06 10:53 by 張揚(yáng)
我的Email:1102878561@qq.com

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2013-12-19 09:18 by lingming
有X64的嗎?麻煩給我一份,saillimited@hotmail.com,謝謝。

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2014-07-17 17:41 by 李波
您好,非常希望能繼續(xù)拜讀您的大作,請(qǐng)問(wèn)一下哪里能買到你的書???
另外,能不能把這份源碼發(fā)給我,我是新手,有些地方不是很清楚。我的郵箱 lumia361@hotmail.com ,謝謝。

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2014-11-12 21:41 by Xexerse
你好,能把代碼發(fā)給我一份嗎,314018436@qq.com,那個(gè)鏈接不能用了。還有你的書出版了嗎?叫什么名字啊,現(xiàn)在在學(xué)UEFI,想買來(lái)參考下

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2015-05-25 15:43 by 周彬彬
您好,能給我發(fā)一份完整的整個(gè)代碼嗎?1146625664@qq.com,謝謝

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)[未登錄]  回復(fù)  更多評(píng)論   

2015-06-02 22:23 by djx_zh
ffmpeg的源代碼可到此處下載
https://github.com/zhenghuadai/uefi-programming/releases/download/1.0/ffmpeg-0.10.2-for-UEFI.tgz

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2015-12-29 11:06 by Zafir
樓主,可否給我也發(fā)一份64位的。511599737@qq.com萬(wàn)分感謝

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2016-02-17 17:55 by pingl
樓主,可否發(fā)一份64位的給我,謝謝。568900705@qq.com

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2016-02-17 17:57 by pingl
@Amin

樓主,可否發(fā)一份64位的給我,謝謝。568900705@qq.com

# re: UEFI 實(shí)戰(zhàn)(4) protocol 之利用Protocol提供視頻解碼服務(wù)  回復(fù)  更多評(píng)論   

2016-02-25 03:11 by djxzh
@pingl

http://pan.baidu.com/s/1pKwBzy7

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久精品在线视频| 久久国产色av| 亚洲欧美在线播放| 亚洲精品久久嫩草网站秘色| 美女视频网站黄色亚洲| 久久久激情视频| 欧美亚洲一区二区在线观看| 一区二区三区视频在线观看| 亚洲欧美日韩天堂| 欧美在线视频免费播放| 午夜久久久久久| 小嫩嫩精品导航| 毛片av中文字幕一区二区| 欧美午夜精品一区| 久久视频在线视频| 欧美日本国产精品| 欧美色大人视频| 在线免费观看视频一区| 日韩一区二区电影网| 亚洲专区一区二区三区| 久久精品综合一区| 亚洲国产精品www| av不卡在线看| 久久国产福利| 国产精品久久久久久久久久直播 | 亚洲精选在线观看| 一区二区三欧美| 久久一区二区三区四区五区| 欧美黄色aaaa| 在线精品视频一区二区三四| 亚洲一区美女视频在线观看免费| 欧美一区网站| 在线视频欧美日韩精品| 欧美激情第10页| 国模私拍视频一区| 欧美一区精品| 亚洲欧美日韩在线播放| 欧美日韩在线精品一区二区三区| 狠狠色香婷婷久久亚洲精品| 香蕉乱码成人久久天堂爱免费| 亚洲精品小视频| 欧美丰满高潮xxxx喷水动漫| 一区二区三区我不卡| 一区精品在线| 久久精品天堂| 亚洲最黄网站| 久久夜色精品国产亚洲aⅴ| 午夜精品偷拍| 国产综合一区二区| 久久久亚洲精品一区二区三区| 一本色道久久综合亚洲精品不| 欧美日韩系列| 欧美亚洲综合在线| 久久精品国产在热久久| 亚洲成色999久久网站| 免费美女久久99| 麻豆av福利av久久av| 国产精品入口福利| 免费观看一级特黄欧美大片| 久久婷婷丁香| 一个人看的www久久| 国产欧美一区二区三区在线看蜜臀 | 久久视频在线视频| 日韩午夜黄色| 美女脱光内衣内裤视频久久网站| 亚洲电影免费观看高清| 亚洲在线免费观看| 亚洲一区三区电影在线观看| 久久久青草青青国产亚洲免观| 99亚洲一区二区| 久久久精品国产免大香伊| 性色av一区二区怡红| 欧美日韩精品免费观看视一区二区| 久久久久高清| 激情综合中文娱乐网| 欧美亚洲日本一区| 欧美一级黄色网| 日韩视频免费观看高清完整版| 国产欧美欧美| 99国产精品国产精品毛片| 日韩一级在线观看| 99精品黄色片免费大全| 久久精品国产亚洲一区二区| 亚洲国产精品va在线看黑人动漫| 国产精品资源| 欧美在线|欧美| 久久久久网站| 香港久久久电影| 欧美成人精品福利| 亚洲视频国产视频| 国产精品国产福利国产秒拍| 亚洲图片激情小说| 欧美www视频| 亚洲欧洲av一区二区三区久久| 国产综合久久| 欧美日韩国产片| 久久精品成人欧美大片古装| 亚洲第一色在线| 午夜在线播放视频欧美| 亚洲精品在线三区| 国产在线拍揄自揄视频不卡99 | 久久国产精品久久久久久| 国产一区美女| 欧美系列精品| 欧美久久久久久| 久久国产精品久久精品国产| 亚洲性感美女99在线| 亚洲国产岛国毛片在线| 久久久久久久久综合| 午夜欧美不卡精品aaaaa| 一区二区三区久久久| 亚洲免费高清| 亚洲精品专区| 99精品国产一区二区青青牛奶 | 在线观看日韩一区| 国产精品视频xxxx| 欧美日韩亚洲高清| 欧美性淫爽ww久久久久无| 欧美日韩国产精品一卡| 欧美不卡在线视频| 欧美国产视频日韩| 欧美日韩一区二区高清| 国产精品国产三级国产专播精品人| 欧美日韩国产成人| 国产精品国产精品| 国内伊人久久久久久网站视频| 国产亚洲二区| 在线日本高清免费不卡| 亚洲精品久久久蜜桃| 亚洲自拍偷拍麻豆| 老司机aⅴ在线精品导航| 亚洲第一在线综合网站| 一本色道久久综合狠狠躁篇的优点| 日韩一二在线观看| 久久国产日韩| 国产精品成av人在线视午夜片 | 在线观看中文字幕不卡| 亚洲国产天堂网精品网站| 一区二区三区.www| 美国十次成人| 午夜欧美大片免费观看| 老鸭窝毛片一区二区三区| 欧美性片在线观看| 亚洲国产免费看| 久久久免费观看视频| 一区二区三区**美女毛片| 巨胸喷奶水www久久久免费动漫| 国产精品久久9| 亚洲天堂成人在线视频| 91久久亚洲| 欧美韩日一区二区三区| 国内外成人免费激情在线视频网站| 亚洲午夜未删减在线观看| 亚洲国产精品久久久久婷婷老年| 久久久国际精品| 久久在线免费观看视频| 欧美日韩在线播放三区| 亚洲国产精品一区二区第一页| 亚洲一区二区黄色| 亚洲天堂偷拍| 国产精品美女主播| 亚洲欧美激情诱惑| 欧美自拍偷拍| 亚洲日本成人| 亚洲精品中文在线| 国产欧美一区二区精品性色| 久久精品观看| 欧美黄色一级视频| 午夜日本精品| 另类图片国产| 亚洲综合丁香| 久久精品卡一| 中文一区二区| 久久久人成影片一区二区三区观看 | 国产一区三区三区| 亚洲大片免费看| 国产精品久久久久久影院8一贰佰 国产精品久久久久久影视 | 亚洲资源av| 久久综合给合久久狠狠色| 一本色道久久综合精品竹菊| 欧美主播一区二区三区美女 久久精品人| 国产日韩欧美二区| 99国产成+人+综合+亚洲欧美| 国内自拍一区| 亚洲欧美日韩高清| 亚洲伊人伊色伊影伊综合网| 久久综合给合| 欧美freesex8一10精品| 国产精品一区二区视频| 国产日韩在线看| 国产一区二区三区高清在线观看| 欧美一区二区三区视频免费| 日韩视频精品在线观看| 久久另类ts人妖一区二区| 亚洲欧美偷拍卡通变态| 欧美日韩人人澡狠狠躁视频| 亚洲成色777777在线观看影院| 国产精品欧美一区喷水| 日韩亚洲精品电影| 亚洲一区国产视频|