精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

V4l2拓?fù)浼軜?gòu)(基于Rk3568),你學(xué)會(huì)了嗎?

開發(fā) 前端
? 各個(gè)模塊之間最終建立一條數(shù)據(jù)流,便是一條pipeline了,同一條pipeline中的模塊,可以根據(jù)前一個(gè)模塊查找到下一個(gè)模塊,因此也可以很方便進(jìn)行遍歷,并做進(jìn)一步的設(shè)置操作;

一、 設(shè)備節(jié)點(diǎn)、模塊、拓?fù)浣Y(jié)構(gòu)關(guān)系

拓?fù)浣Y(jié)構(gòu)是我們了解MIPI-CSI內(nèi)部模塊以及與攝像頭連接關(guān)系的最直觀最便捷的方法。

  1. 如何表示拓?fù)浣Y(jié)構(gòu)?
  • file視角

圖片

  • v4l2視角

圖片

來(lái)自: 參考文檔《RKISP_Driver_User_Manual_v1.3.pdf》

  • 模塊之間相互獨(dú)立,通過(guò)struct media_entity來(lái)進(jìn)行抽象,通常會(huì)將struct media_entity嵌入到其他結(jié)構(gòu)中,以支持media framework功能;
  • entity模塊包含struct media_pad,pad可以認(rèn)為是端口,與其他模塊進(jìn)行聯(lián)系的媒介,針對(duì)特定模塊來(lái)說(shuō)它是確定的;
  • pad通過(guò)struct media_link來(lái)建立連接,指定source和sink,即可將通路建立起來(lái);
  • 各個(gè)模塊之間最終建立一條數(shù)據(jù)流,便是一條pipeline了,同一條pipeline中的模塊,可以根據(jù)前一個(gè)模塊查找到下一個(gè)模塊,因此也可以很方便進(jìn)行遍歷,并做進(jìn)一步的設(shè)置操作;

2. 設(shè)備節(jié)點(diǎn)-------少media的

在/sys/class/video4linux/下可以找到v4l2相關(guān)的設(shè)備節(jié)點(diǎn):

rk3568_r:/ # ls sys/class/video4linux
ls sys/class/video4linux
v4l-subdev0 v4l-subdev2 video1 video3 video5 video7
v4l-subdev1 video0 video2 video4 video6 video8

rk3568_r:/ # cat sys/class/video4linux/video0/dev
cat sys/class/video4linux/video0/dev
81:0
rk3568_r:/ # cat sys/class/video4linux/video0/name
cat sys/class/video4linux/video0/name
rkisp_mainpath

udev文件系統(tǒng)會(huì)為我們?cè)赿ev/目錄下創(chuàng)建一個(gè)video0節(jié)點(diǎn),即dev/video0

用戶可以打開dev/video0節(jié)點(diǎn),通過(guò)IOCTL命令和內(nèi)核空間進(jìn)行通信。

rk3568_r:/ # ls /dev/video* -l
ls /dev/video* -l
crw-rw---- 1 media camera 81, 0 2022-11-09 17:06 /dev/video0
crw-rw---- 1 media camera 81, 1 2022-11-09 17:06 /dev/video1
crw-rw---- 1 media camera 81, 2 2022-11-09 17:06 /dev/video2
crw-rw---- 1 media camera 81, 3 2022-11-09 17:06 /dev/video3
crw-rw---- 1 media camera 81, 4 2022-11-09 17:06 /dev/video4
crw-rw---- 1 media camera 81, 5 2022-11-09 17:06 /dev/video5
crw-rw---- 1 media camera 81, 6 2022-11-09 17:06 /dev/video6
crw-rw---- 1 media camera 81, 7 2022-11-09 17:06 /dev/video7
crw-rw---- 1 media camera 81, 8 2022-11-09 17:06 /dev/video8

rk3568_r:/ # ls /dev/v4l-sub* -l
ls /dev/v4l-sub* -l
crw-rw-rw- 1 media camera 81, 9 2022-11-09 17:06 /dev/v4l-subdev0
crw-rw-rw- 1 media camera 81, 10 2022-11-09 17:06 /dev/v4l-subdev1
crw-rw-rw- 1 media camera 81, 11 2022-11-09 17:06 /dev/v4l-subdev2

3. 拓?fù)浣Y(jié)構(gòu)圖

命令media-ctl可以查看拓?fù)浣Y(jié)構(gòu)圖

rk3568_r:/ # media-ctl -d /dev/media0 -p                  
media-ctl -d /dev/media0 -p
Opening media device /dev/media0
Enumerating entities
Found 13 entities
Enumerating pads and links
Media controller API version 0.0.255

Media device information
------------------------
driver rkisp-vir0
model rkisp0
serial
bus info
hw revision 0x0
driver version 0.0.255

Device topology
- entity 1: rkisp-isp-subdev (4 pads, 7 links)
type V4L2 subdev subtype Unknown
device node name /dev/v4l-subdev0
pad0: Sink
[fmt:SBGGR10/4224x3136
crop.bounds:(0,0)/4096x3072
crop:(0,0)/4096x3072]
<- "rkisp-csi-subdev":1 []
<- "rkisp_rawrd0_m":0 []
<- "rkisp_rawrd2_s":0 []
pad1: Sink
<- "rkisp-input-params":0 []
pad2: Source
[fmt:YUYV2X8/4096x3072
crop.bounds:(0,0)/4096x3072
crop:(0,0)/4096x3072]
-> "rkisp_mainpath":0 []
-> "rkisp_selfpath":0 []
pad3: Source
-> "rkisp-statistics":0 []

- entity 6: rkisp-csi-subdev (6 pads, 5 links)
type V4L2 subdev subtype Unknown
device node name /dev/v4l-subdev1
pad0: Sink
<- "rockchip-csi2-dphy0":1 []
pad1: Source
-> "rkisp-isp-subdev":0 []
pad2: Source
-> "rkisp_rawwr0":0 []
pad3: Source
pad4: Source
-> "rkisp_rawwr2":0 []
pad5: Source
-> "rkisp_rawwr3":0 []

- entity 13: rkisp_mainpath (1 pad, 1 link)
type Node subtype V4L
device node name /dev/video0
pad0: Sink
<- "rkisp-isp-subdev":2 []

- entity 19: rkisp_selfpath (1 pad, 1 link)
type Node subtype V4L
device node name /dev/video1
pad0: Sink
<- "rkisp-isp-subdev":2 []

- entity 25: rkisp_rawwr0 (1 pad, 1 link)
type Node subtype V4L
device node name /dev/video2
pad0: Sink
<- "rkisp-csi-subdev":2 []

- entity 31: rkisp_rawwr2 (1 pad, 1 link)
type Node subtype V4L
device node name /dev/video3
pad0: Sink
<- "rkisp-csi-subdev":4 []

- entity 37: rkisp_rawwr3 (1 pad, 1 link)
type Node subtype V4L
device node name /dev/video4
pad0: Sink
<- "rkisp-csi-subdev":5 []

- entity 43: rkisp_rawrd0_m (1 pad, 1 link)
type Node subtype V4L
device node name /dev/video5
pad0: Source
-> "rkisp-isp-subdev":0 []

- entity 49: rkisp_rawrd2_s (1 pad, 1 link)
type Node subtype V4L
device node name /dev/video6
pad0: Source
-> "rkisp-isp-subdev":0 []

- entity 55: rkisp-statistics (1 pad, 1 link)
type Node subtype V4L
device node name /dev/video7
pad0: Sink
<- "rkisp-isp-subdev":3 []

- entity 61: rkisp-input-params (1 pad, 1 link)
type Node subtype V4L
device node name /dev/video8
pad0: Source
-> "rkisp-isp-subdev":1 []

- entity 67: rockchip-csi2-dphy0 (2 pads, 2 links)
type V4L2 subdev subtype Unknown
device node name /dev/v4l-subdev2
pad0: Sink
<- "m00_b_ov13850 4-0010":0 []
pad1: Source
-> "rkisp-csi-subdev":0 []

- entity 70: m00_b_ov13850 4-0010 (1 pad, 1 link)
type V4L2 subdev subtype Sensor
device node name /dev/v4l-subdev3
pad0: Source
[fmt:SBGGR10/4224x3136]
-> "rockchip-csi2-dphy0":0 []

下面是根據(jù)顯示內(nèi)容繪制的拓?fù)鋱D:

圖片

拓?fù)浣Y(jié)構(gòu)

該圖中各個(gè)entity對(duì)應(yīng)的設(shè)備節(jié)點(diǎn)名稱已經(jīng)標(biāo)注。模塊的上方的黃色pad默認(rèn)是source pad,下方的黃色pad是sink pad

字符設(shè)備類型主要有兩種(只考慮攝像頭):

  • /dev/videox  (x取值0~8) (所有設(shè)備共用主設(shè)備號(hào)81,次設(shè)備號(hào)區(qū)分)
  • /dev/v4l-subdevx   (x取值0~3)

video設(shè)備主要用于圖像操作,必須創(chuàng)建結(jié)構(gòu)體struct video_device變量, v4l-subdev設(shè)備主要對(duì)應(yīng)sensor等具體從設(shè)備,必須創(chuàng)建struct  v4l2_subdev變量, 內(nèi)部的isp和csi、csi-dphy也都需要注冊(cè)為subdev

這些entity由media_entity模塊負(fù)責(zé)維護(hù),將他們連接起來(lái)。

4. 模塊功能

這些entity瑞芯微已經(jīng)設(shè)定了他們各自的功能:

圖片

圖片

這些entity我們可以理解為一個(gè)個(gè)功能模塊。

這些功能模塊有的用于驅(qū)動(dòng)csi、有的驅(qū)動(dòng)isp、有的用于預(yù)覽圖像、有的用于統(tǒng)計(jì)視頻信息、有的用于配置參數(shù)。

這些功能模塊,并不是都一定每個(gè)camera控制器都有的,有一些是通用的,比如,mainpath、selfpath,有一些要完全看SoC設(shè)計(jì),即使瑞芯微的SoC,不同型號(hào),差別也不小。所以具體問(wèn)題要具體分析,不可教條。

v4l2只定義了基本架構(gòu),定義好了回調(diào)函數(shù)接口,要實(shí)現(xiàn)模塊具體功能只需要填充好對(duì)應(yīng)的回調(diào)函數(shù)即可,應(yīng)用層通過(guò)這些字符設(shè)備文件和對(duì)應(yīng)的ioctrl命令,就可以實(shí)現(xiàn)相應(yīng)的功能。

二、 如何描述拓?fù)洌?/h2>

1. struct rkisp_device

rk3568的camera控制器使用結(jié)構(gòu)體struct rkisp_device管理所有的資源。

/*
* struct rkisp_device - ISP platform device
* @base_addr: base register address
* @active_sensor: sensor in-use, set when streaming on
* @isp_sdev: ISP sub-device
* @cap_dev: image capture device
* @stats_vdev: ISP statistics output device
* @params_vdev: ISP input parameters device
* @dmarx_dev: image input device
* @csi_dev: mipi csi device
* @br_dev: bridge of isp and ispp device
*/
struct rkisp_device {
struct list_head list;
void __iomem *base_addr;
struct device *dev;
char name[128];
void *sw_base_addr;
struct rkisp_hw_dev *hw_dev;
struct v4l2_device v4l2_dev;
struct v4l2_ctrl_handler ctrl_handler;
struct media_device media_dev;
struct v4l2_async_notifier notifier;
struct v4l2_subdev *subdevs[RKISP_SD_MAX];
struct rkisp_sensor_info *active_sensor;
struct rkisp_sensor_info sensors[RKISP_MAX_SENSOR];
int num_sensors;
struct rkisp_isp_subdev isp_sdev;
struct rkisp_capture_device cap_dev;
struct rkisp_isp_stats_vdev stats_vdev;
struct rkisp_isp_params_vdev params_vdev;
struct rkisp_dmarx_device dmarx_dev;
struct rkisp_csi_device csi_dev;
struct rkisp_bridge_device br_dev;
struct rkisp_luma_vdev luma_vdev;
struct proc_dir_entry *procfs;
struct rkisp_pipeline pipe;
enum rkisp_isp_ver isp_ver;
struct rkisp_emd_data emd_data_fifo[RKISP_EMDDATA_FIFO_MAX];
unsigned int emd_data_idx;
unsigned int emd_vc;
unsigned int emd_dt;
int vs_irq;
struct gpio_desc *vs_irq_gpio;
struct rkisp_hdr hdr;
unsigned int isp_state;
unsigned int isp_err_cnt;
unsigned int isp_isr_cnt;
unsigned int isp_inp;
struct mutex apilock; /* mutex to serialize the calls of stream */
struct mutex iqlock; /* mutex to serialize the calls of iq */
wait_queue_head_t sync_onoff;
dma_addr_t resmem_addr;
phys_addr_t resmem_pa;
size_t resmem_size;
int dev_id;
unsigned int skip_frame;
unsigned int irq_ends;
unsigned int irq_ends_mask;
bool send_fbcgain;
struct rkisp_ispp_buf *cur_fbcgain;
struct rkisp_buffer *cur_spbuf;
bool is_thunderboot;

struct kfifo rdbk_kfifo;
spinlock_t rdbk_lock;
int rdbk_cnt;
int rdbk_cnt_x1;
int rdbk_cnt_x2;
int rdbk_cnt_x3;
u32 rd_mode;
u8 filt_state[RDBK_F_MAX];
};

其中與isp2.1拓?fù)浣Y(jié)構(gòu)相關(guān)的的幾個(gè)結(jié)構(gòu)體成員以及他們之間的關(guān)系:

成員

含義

拓?fù)鋱D中的entity

設(shè)備名

void __iomem *base_addr

基地址

-

-

struct rkisp_sensor_info *active_sensor;

正在使用的sensor

-

-

struct rkisp_isp_subdev isp_sdev;

isp模塊

rkisp-isp-subdev

v4l-subdev0

struct rkisp_capture_device cap_dev;

capture模塊, 維護(hù)struct vb2_v4l2_buffer

對(duì)應(yīng)拓?fù)鋱D中的rkisp_mainpath、rkisp_selfpath、rkisp_rawwr0、rkisp_rawwr2、rkisp_rawwr3

video0~video4

struct rkisp_isp_stats_vdev stats_vdev;

數(shù)據(jù)統(tǒng)計(jì)模塊

rkisp-statistics

video7

struct rkisp_isp_params_vdev params_vdev;

參數(shù)配置模塊

rkisp-input-params

video8

struct rkisp_dmarx_device dmarx_dev;

dma數(shù)據(jù)接收模塊

rkisp_rawrd0_m、rkisp_rawrd2_s

video5、video6

struct rkisp_csi_device csi_dev;

csi的sub device從設(shè)備

rkisp-csi-subdev

v4l-subdev1

struct rkisp_bridge_device br_dev;

橋接模塊備,isp2.0中有

-

-

enum rkisp_isp_ver isp_ver;

isp版本號(hào),rk3568是2.1

-

-

2. 舉例1:rkisp-csi-subdev注冊(cè)到拓?fù)浣Y(jié)構(gòu)中

要添加到拓?fù)浣Y(jié)構(gòu)中,表示該模塊的結(jié)構(gòu)體中包含成員struct media_pad ,它和struct v4l2_subdev中的 struct media_entity entity;共同生成拓?fù)浣Y(jié)構(gòu)。

rkisp-csi-subdev設(shè)備結(jié)構(gòu)體定義如下:

struct rkisp_csi_device {
struct rkisp_device *ispdev;
struct v4l2_subdev sd;
struct media_pad pads[CSI_PAD_MAX];
struct sink_info sink[CSI_PAD_MAX - 1];
int max_pad;
u32 err_cnt;
u32 irq_cnt;
u8 mipi_di[CSI_PAD_MAX - 1];
u8 tx_first[HDR_DMA_MAX];
};

參考第二節(jié)的拓?fù)鋱D中 entity6 :

圖片

由上圖可知,該模塊有6個(gè)pad,pad屬性定義如下

#define MEDIA_PAD_FL_SINK   (1 << 0)
#define MEDIA_PAD_FL_SOURCE (1 << 1)
#define MEDIA_PAD_FL_MUST_CONNECT (1 << 2)

pad的名稱定義如下:

enum rkisp_csi_pad {
CSI_SINK = 0,
CSI_SRC_CH0,
CSI_SRC_CH1,
CSI_SRC_CH2,
CSI_SRC_CH3,
CSI_SRC_CH4,
CSI_PAD_MAX
};

isp的in pad

//isp的in pad
enum rkisp_isp_inp {
INP_INVAL = 0,
INP_RAWRD0 = BIT(0),
INP_RAWRD1 = BIT(1),
INP_RAWRD2 = BIT(2),
INP_CSI = BIT(4),
INP_DVP = BIT(5),
INP_DMARX_ISP = BIT(6),
INP_LVDS = BIT(7),
INP_CIF = BIT(8),
};

根據(jù)該拓?fù)鋱D,pads[0] 為sink ,pads[1~5] 均為source

以下是驅(qū)動(dòng)中pad初始化代碼:

rkisp_register_csi_subdev()
{
……
v4l2_subdev_init(sd, &rkisp_csi_ops);
sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; //是否需要子節(jié)點(diǎn)
sd->entity.ops = &rkisp_csi_media_ops;
sd->entity.function = MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN;
snprintf(sd->name, sizeof(sd->name), CSI_DEV_NAME);//名字前綴,#define CSI_DEV_NAME DRIVER_NAME "-csi-subdev"

csi_dev->pads[CSI_SINK].flags =
MEDIA_PAD_FL_SINK | MEDIA_PAD_FL_MUST_CONNECT; //pad0屬性
csi_dev->pads[CSI_SRC_CH0].flags =
MEDIA_PAD_FL_SOURCE | MEDIA_PAD_FL_MUST_CONNECT; //pad1屬性

csi_dev->max_pad = CSI_SRC_CH0 + 1;
if (dev->isp_ver == ISP_V20 || dev->isp_ver == ISP_V21) {
csi_dev->max_pad = CSI_PAD_MAX;
csi_dev->pads[CSI_SRC_CH1].flags = MEDIA_PAD_FL_SOURCE;//pad2屬性
csi_dev->pads[CSI_SRC_CH2].flags = MEDIA_PAD_FL_SOURCE;//pad3屬性
csi_dev->pads[CSI_SRC_CH3].flags = MEDIA_PAD_FL_SOURCE;//pad4屬性
csi_dev->pads[CSI_SRC_CH4].flags = MEDIA_PAD_FL_SOURCE;//pad5屬性
}

ret = media_entity_pads_init(&sd->entity, csi_dev->max_pad,
csi_dev->pads);
……
}

一些關(guān)鍵的宏匯總:

//各個(gè)模塊對(duì)應(yīng)的名字
【kernel\drivers\media\platform\rockchip\isp\dev.h
#define DRIVER_NAME "rkisp"
#define ISP_VDEV_NAME DRIVER_NAME "_ispdev"
#define SP_VDEV_NAME DRIVER_NAME "_selfpath"
#define MP_VDEV_NAME DRIVER_NAME "_mainpath"
#define DMA_VDEV_NAME DRIVER_NAME "_dmapath"
#define RAW_VDEV_NAME DRIVER_NAME "_rawpath"
#define DMATX0_VDEV_NAME DRIVER_NAME "_rawwr0"
#define DMATX1_VDEV_NAME DRIVER_NAME "_rawwr1"
#define DMATX2_VDEV_NAME DRIVER_NAME "_rawwr2"
#define DMATX3_VDEV_NAME DRIVER_NAME "_rawwr3"
#define DMARX0_VDEV_NAME DRIVER_NAME "_rawrd0_m"
#define DMARX1_VDEV_NAME DRIVER_NAME "_rawrd1_l"
#define DMARX2_VDEV_NAME DRIVER_NAME "_rawrd2_s"

#define GRP_ID_SENSOR BIT(0)
#define GRP_ID_MIPIPHY BIT(1)
#define GRP_ID_ISP BIT(2)
#define GRP_ID_ISP_MP BIT(3)
#define GRP_ID_ISP_SP BIT(4)
#define GRP_ID_ISP_DMARX BIT(5)
#define GRP_ID_ISP_BRIDGE BIT(6)
#define GRP_ID_CSI BIT(7)



//pad的屬性
[kernel\include\uapi\linux\media.h]
#define MEDIA_PAD_FL_SINK (1 << 0)
#define MEDIA_PAD_FL_SOURCE (1 << 1)
#define MEDIA_PAD_FL_MUST_CONNECT (1 << 2)

由代碼可得,拓?fù)潢P(guān)系由csi_dev->pads描述。

最終調(diào)用函數(shù)media_entity_pads_init()注冊(cè)。

rkisp_register_platform_subdevs()
isp_subdev_notifier()
v4l2_async_notifier_parse_fwnode_endpoints()
__v4l2_async_notifier_parse_fwnode_endpoints()
{
for ( fwnode = fwnode_graph_get_next_endpoint())
{
dev_fwnode = fwnode_graph_get_port_parent(fwnode);
is_available = fwnode_device_is_available(dev_fwnode);
fwnode_handle_put(dev_fwnode);
fwnode_graph_parse_endpoint(fwnode, &ep);
}
for ( fwnode = fwnode_graph_get_next_endpoint())
{
dev_fwnode = fwnode_graph_get_port_parent(fwnode);
is_available = fwnode_device_is_available(dev_fwnode);
fwnode_handle_put(dev_fwnode);
fwnode_graph_parse_endpoint(fwnode, &ep);
v4l2_async_notifier_fwnode_parse_endpoint();
}
fwnode_handle_put(fwnode);
}

大家也可以試著去分析其他的模塊。

三、設(shè)備樹如何描述攝像頭拓?fù)浣Y(jié)構(gòu)?

1. 設(shè)備樹說(shuō)明文檔

瑞芯微MIPI-CSI設(shè)備樹節(jié)點(diǎn)屬性說(shuō)明參考內(nèi)核說(shuō)明文檔:

[kernel\Documentation\devicetree\bindings\media\]
video-interfaces.txt 關(guān)于sensor節(jié)點(diǎn)屬性的說(shuō)明,接口類型,
rockchip-isp1.txt isp模塊屬性說(shuō)明
rockchip-mipi-dphy.txt dphy模塊的說(shuō)明
kernel\Documentation\devicetree\bindings\media\i2c\ovxxxxxx.txt ov系列的攝像設(shè)備樹說(shuō)明

這些文檔中有關(guān)于port、remote-endpoint等節(jié)點(diǎn)的詳細(xì)說(shuō)明,如果不是廠家,我們只需要搞懂?dāng)z像頭拓?fù)浣Y(jié)構(gòu)即可。

2. ov13850

我們移植的攝像頭為ov13850,他的連接關(guān)系如下:

  • 數(shù)據(jù)通道通過(guò)mipi接口連接到rk3568的mipi通道0
  • Camera控制器的csi2-dphy0模塊負(fù)責(zé)從mipi通道中接收數(shù)據(jù)幀

外設(shè)攝像頭拓?fù)潢P(guān)系由設(shè)備樹來(lái)描述,內(nèi)核會(huì)自動(dòng)解析并幫我們自動(dòng)注冊(cè)。

千言萬(wàn)語(yǔ),不如一圖:

圖片

由上圖可得:

  1. 攝像頭ov13850設(shè)備樹只有一個(gè)port子節(jié)點(diǎn),所以pad為0,out表示該pad是source pad
  2. remote-endpoint屬性表示該pad連接的上游模塊的pad名字:mipi_in_ucam0,而模塊csi2_dphy0中包含pad:mipi_in_ucam0,所以ov13850連接到該模塊
  3. csi2_dphy0 port0節(jié)點(diǎn)的mipi_in_ucam0設(shè)備,通過(guò)remote-endpoint即可知道該pad所連接的是設(shè)備ov13850的pad
  4. 綜上可得csi2_dphy0的pad0(sink pad)連接的ov13850的pad0(source pad)


責(zé)任編輯:武曉燕 來(lái)源: 一口Linux
相關(guān)推薦

2024-01-30 18:29:29

微服務(wù)架構(gòu)Ingress

2023-01-04 17:59:00

BeautifulPython

2024-01-19 08:25:38

死鎖Java通信

2023-01-10 08:43:15

定義DDD架構(gòu)

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺(tái)工具

2024-01-02 12:05:26

Java并發(fā)編程

2023-08-01 12:51:18

WebGPT機(jī)器學(xué)習(xí)模型

2021-12-26 08:24:14

網(wǎng)關(guān)拓?fù)?/a>結(jié)構(gòu)

2024-02-29 13:12:30

2023-01-30 09:01:54

圖表指南圖形化

2024-08-06 09:47:57

2022-07-08 09:27:48

CSSIFC模型

2023-10-10 11:04:11

Rust難點(diǎn)內(nèi)存

2024-07-31 08:39:45

Git命令暫存區(qū)

2023-12-12 08:02:10

2024-05-06 00:00:00

InnoDBView隔離

2022-04-25 09:10:50

RK3568鴻蒙

2024-09-09 09:00:12

架構(gòu)設(shè)計(jì)算法

2024-01-26 08:24:16

Dalvik架構(gòu)ART
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

污污网站在线观看视频| 国产精品久久久久久久久久小说| 国产男女无遮挡猛进猛出| 黄色av网站在线播放| 经典三级在线一区| 久久综合色影院| 久久久久久无码精品人妻一区二区| 国产精品刘玥久久一区| 国产精品99久久久久久久vr| 九九精品在线视频| 日本少妇xxxx| 精品3atv在线视频| 国产精品国产三级国产普通话99| 92看片淫黄大片欧美看国产片| 免费三片在线播放| 亚洲免费成人av在线| 欧美日韩一区二区三区四区五区 | 9l视频自拍9l视频自拍| 亚洲精品国产精品国| 毛片一区二区| 久久精品免费电影| 亚洲激情 欧美| 日韩三级影视| 亚洲精品国产精华液| 久久av免费一区| 中文字幕 自拍偷拍| 欧美日韩亚洲一区二区三区在线| 日韩av在线精品| 伊人色在线观看| 后进极品白嫩翘臀在线播放| 国产色婷婷亚洲99精品小说| 91亚洲国产精品| 国产精品美女久久久久av爽| 我不卡伦不卡影院| 日韩久久免费视频| 污视频在线观看免费网站| 在线视频cao| 亚洲人成影院在线观看| 久久涩涩网站| 精品久久人妻av中文字幕| 葵司免费一区二区三区四区五区| 欧美精品做受xxx性少妇| 黄色aaa视频| 久久婷婷五月综合色丁香| 亚洲成人一区二区在线观看| 亚洲国产精品123| 性感美女福利视频| 国产成人精品免费| 国产成人亚洲精品| 九九九国产视频| 欧美一二区在线观看| 亚洲国产成人在线视频| 国产福利在线免费| 美女写真久久影院| 亚洲成a人片综合在线| 一本色道久久综合亚洲精品婷婷 | 高清日韩电视剧大全免费| 国产精品美乳在线观看| 成年人免费高清视频| 国语精品一区| 欧美成人午夜剧场免费观看| 成人在线手机视频| 久久不见久久见中文字幕免费| 精品国产免费一区二区三区香蕉| 爱豆国产剧免费观看大全剧苏畅| 日韩天堂在线| 在线一区二区观看| 丰满人妻中伦妇伦精品app| av在线中出| 亚洲一区二区高清| 丁香六月激情网| 牛牛电影国产一区二区| 一区二区三区在线视频免费观看| 亚洲免费av网| 米奇777四色精品人人爽| 国产欧美精品一区二区三区四区| 欧美久久久久久久| 国产在线小视频| 日本一区免费视频| 日韩国产伦理| 婷婷免费在线视频| 中文字幕日韩精品一区| 亚洲午夜精品久久久中文影院av| av在线播放免费| 国产精品成人一区二区艾草 | 日本r级电影在线观看| 性欧美video另类hd尤物| 欧美老女人在线| 在线播放黄色av| 欧美中文高清| 精品美女一区二区三区| 奇米777在线视频| 青草伊人久久| 日韩欧美综合在线| 国产无套精品一区二区三区| 美女精品久久| 欧美精品一区二区在线播放| 亚洲色图14p| 国产免费久久| 久久久精品一区二区三区| 激情五月少妇a| 99国产精品视频免费观看一公开 | 亚洲欧美在线观看视频| 99精品热视频只有精品10| 国产99久久精品一区二区 夜夜躁日日躁| 综合网在线观看| 天堂资源在线中文精品| 国产欧美一区二区三区久久| 精品人妻伦一二三区久久| 99r国产精品| 亚洲在线观看一区| 欧美xxx黑人xxx水蜜桃| 欧美性极品xxxx做受| 亚洲美女爱爱视频| 国产精品毛片视频| 国产一区二区精品丝袜| 日本一级特级毛片视频| 亚洲东热激情| 国产精品高潮在线| 精品人妻一区二区三区含羞草| www.亚洲在线| 一卡二卡3卡四卡高清精品视频| 黄页网站在线观看免费| 日本精品视频一区二区三区| 免费黄视频在线观看| 亚洲第一福利专区| 久久99视频精品| 精品视频一二三区| 国产98色在线|日韩| 日韩欧美精品久久| 欧美日韩经典丝袜| 欧美日韩国产综合一区二区| 无码人妻一区二区三区在线| 欧美三级美国一级| 午夜精品一区二区三区在线视| 亚洲一级av毛片| 99精品在线观看视频| 天天做天天爱天天高潮| 免费日韩电影| 欧美成人伊人久久综合网| 国产黄色片在线| 美女网站久久| 国产一区二区三区四区hd| 麻豆tv入口在线看| 在线观看日韩精品| 亚洲中文字幕无码av| 伊人成综合网| 国产日韩在线精品av| 视频一区二区三区国产| 亚洲在线观看免费| 国产欧美一区二| 欧美日韩一区二区三区四区不卡| 日韩亚洲精品视频| 91午夜精品亚洲一区二区三区| 成人性视频免费网站| 亚洲人久久久| 日本精品在线中文字幕| 亚洲精品一区在线观看| 午夜剧场免费在线观看| 麻豆精品视频在线观看| 欧美亚洲国产免费| 在线观看涩涩| 日韩经典第一页| 国产在线观看免费视频今夜| 国产成人综合在线| 今天免费高清在线观看国语| 日韩在线激情| 丝袜情趣国产精品| 一级淫片免费看| 欧美国产日韩精品免费观看| 亚欧在线免费观看| 色棕色天天综合网| 国产精品88a∨| 毛片免费在线观看| 91福利区一区二区三区| 亚洲av无码国产精品麻豆天美| 亚洲一区亚洲| 欧美裸体网站| 99精品国自产在线| 最新91在线视频| 国产日本精品视频| 一区二区三区丝袜| 怡红院一区二区| 99精品视频网| 欧美日韩亚洲一区二区三区在线观看 | 久久一区二区三区av| 手机在线观看av| 亚洲一级黄色av| 91福利在线观看视频| 亚洲激情自拍视频| 日本黄色录像片| 亚洲免费综合| 亚洲精品乱码视频| 国产免费av国片精品草莓男男| 欧美成在线观看| 国产日韩欧美中文字幕| 亚洲日本一区二区三区| 日本国产在线视频| 亚洲欧美不卡| 亚洲一区二区三区免费看| 国产精品国产亚洲精品| 久久99视频精品| 亚洲爱情岛论坛永久| 欧美视频国产精品| 一本一本久久a久久| 国产成人av在线影院| 精品视频免费在线播放| 精品国产一区二区三区| 91天堂在线观看| 成人免费图片免费观看| 伊人av综合网| 亚洲精品一级片| 在线观看成人免费视频| 特级片在线观看| 国产亚洲欧美色| 欧美体内she精高潮| 国产日韩综合| 在线观看成人免费| 日本国产精品| 91亚洲va在线va天堂va国| 欧美亚洲日本精品| 久久精品视频在线播放| 青草久久伊人| 日韩欧美在线网站| 久久久精品毛片| 亚洲综合清纯丝袜自拍| 美女100%露胸无遮挡| 成人夜色视频网站在线观看| 色免费在线视频| 亚洲狼人精品一区二区三区| 综合操久久久| 国产探花在线精品| 国产日产精品一区二区三区四区 | 91精品久久久久久| 手机在线理论片| 欧美精品久久久久a| 午夜在线视频播放| 日韩成人久久久| 俄罗斯嫩小性bbwbbw| 7777精品伊人久久久大香线蕉最新版| 日韩黄色在线播放| 亚洲精品免费一二三区| jizz日本在线播放| 久久久久久亚洲综合| xxxx视频在线观看| 九九精品视频在线看| 免费裸体美女网站| 亚洲人成毛片在线播放女女| 大地资源第二页在线观看高清版| 国产不卡一区| 国产高清精品一区二区三区| 激情中国色综合| 日韩免费观看网站| 免费亚洲电影| 欧美在线亚洲一区| 欧亚av在线| 韩剧1988免费观看全集| 久久青青色综合| 久久久久久亚洲精品| 91麻豆国产福利在线观看宅福利| www.亚洲成人| av小片在线| 最近2019中文字幕一页二页| 免费在线超碰| 亚洲免费视频在线观看| 丝袜+亚洲+另类+欧美+变态| 亚洲黄色www网站| 少妇高潮一区二区三区99小说| 欧美成人vr18sexvr| 国产又粗又猛又爽又黄的视频一| 91国在线观看| 亚洲一级在线播放| 在线播放一区二区三区| japanese国产在线观看| 天天色天天操综合| 欧美一级淫片免费视频黄| 色综合天天综合网国产成人综合天| 亚洲 欧美 成人| 91久久香蕉国产日韩欧美9色| 九九热最新视频| 欧美日韩国产综合久久| 国产伦精品一区二区三区视频痴汉 | 国产精成人品免费观看| 国产精品久久久久久久久图文区| 欧美性生给视频| 亚洲精品日韩专区silk| 久草中文在线视频| 欧美午夜女人视频在线| 国产99久久久久久免费看| 欧美久久久久久久久| 最近国语视频在线观看免费播放| 欧美丰满少妇xxxxx高潮对白| av中文在线观看| 欧美精品一区二区在线观看| 国产 日韩 欧美 精品| 精品无人区太爽高潮在线播放 | 精品国产黄a∨片高清在线| 国产日韩欧美另类| 91精品短视频| 欧美日本韩国在线| 天天操综合网| 日韩av高清在线看片| 可以免费看不卡的av网站| 欧美视频亚洲图片| caoporn国产精品| 在线看片中文字幕| 亚洲一区二区三区在线看| 欧美一区免费看| 欧美一区二区在线免费观看| 天天操天天干天天操| 中文日韩电影网站| 不卡av免费观看| 国产精品6699| 日韩精品成人| 欧美在线3区| 欧美性久久久| 日本激情综合网| 成人激情校园春色| 色偷偷男人天堂| 午夜国产精品一区| 在线免费一级片| 亚洲精品在线免费观看视频| 色大18成网站www在线观看| 久久久亚洲国产天美传媒修理工| 色猫猫成人app| 精品一区二区三区视频日产| 你懂的成人av| 亚洲国产精品三区| av在线播放成人| 在线看的片片片免费| 在线亚洲欧美专区二区| 乱精品一区字幕二区| 国产亚洲欧美日韩精品| 国产资源在线观看入口av| 国产精品一区二区三区久久久| 狼人精品一区二区三区在线| 懂色av粉嫩av蜜臀av| 青草av.久久免费一区| 朝桐光av一区二区三区| 亚洲激情自拍偷拍| 亚洲天堂国产精品| 亚洲精品一区二区三区不| 啦啦啦中文在线观看日本| 91九色国产视频| 日韩精品二区| 久久久久久久久久久99| 久久成人18免费观看| 精品夜夜澡人妻无码av| 亚洲精品免费一二三区| 中文在线观看av| 亚洲男人7777| 黄页网站在线| 成人区精品一区二区| 日本道不卡免费一区| 91蝌蚪视频在线观看| 26uuu色噜噜精品一区二区| 可以免费看的av毛片| 精品国产三级a在线观看| 久久国产精品黑丝| 成人区精品一区二区| 亚洲成人在线| 久久免费精品国产| 亚洲国产日韩综合久久精品| 国产xxxx在线观看| 色综合久久悠悠| 草莓视频一区二区三区| 国产一区二区片| 成人免费av网站| 国产精品变态另类虐交| 亚洲第一精品夜夜躁人人爽| 123区在线| 久久久久se| 日本aⅴ亚洲精品中文乱码| 在线免费观看视频| 欧美丝袜丝nylons| 欧美另类极品| 99视频日韩| 夜夜嗨一区二区| 国产中年熟女高潮大集合| 色哦色哦哦色天天综合| 1769在线观看| 成人黄色免费网站在线观看| 亚洲欧美综合久久久| 黑人性生活视频| 午夜免费久久看| www三级免费| 欧美激情精品久久久久久大尺度| 日韩一区二区三区在线看| 日韩在线观看a| 成人高清av在线| 怡红院av久久久久久久| 亚洲欧洲一区二区三区在线观看| 最新日韩一区| 亚洲高潮无码久久| 91原创在线视频| 伊人影院中文字幕| 欧美日本中文字幕| 国产图片一区| 999在线免费视频| 亚洲制服丝袜一区|