


版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、內(nèi)文內(nèi)容主要來(lái)源于網(wǎng)絡(luò)定義V4L2(VideoForLinuxTwo)是內(nèi)核提供給應(yīng)用程序訪問(wèn)音、視頻驅(qū)動(dòng)的統(tǒng)一接口。1. 工作流程:打開(kāi)設(shè)備一檢查和設(shè)置設(shè)備屬性一設(shè)置幀格式一設(shè)置一種輸入輸出方法(緩沖區(qū)管理)循環(huán)獲取數(shù)據(jù)關(guān)閉設(shè)備。2. 設(shè)備的打開(kāi)和關(guān)閉:#includeintopen(constchar*device_name,intflags);#includeintclose(intfd);例:intfd=open(/dev/video0”,O_RDWR);/打開(kāi)設(shè)備close(fd);/關(guān)閉設(shè)備注意:V4L2的相關(guān)定義包含在頭文件中.查詢?cè)O(shè)備屬性:VIDIOC_QUERYCAP相關(guān)函數(shù)
2、:intioctl(intfd,intrequest,structv4l2_capability*argp);相關(guān)結(jié)構(gòu)體:structv4l2_capabilityu8driver16;/驅(qū)動(dòng)名字u8card32;/設(shè)備名字u8bus_info32;/設(shè)備在系統(tǒng)中的位置u32version;/驅(qū)動(dòng)版本號(hào)u32capabilities;/設(shè)備支持的操作u32reserved4;/保留字段;capabilities常用值:V4L2_CAP_VIDEO_CAPTURE/是否支持圖像獲取例:顯示設(shè)備信息structv4l2_capabilitycap;ioctl(fd,VIDIOC_QUERYCAP,
3、&cap);printf(“DriverName:%snCardName:%snBusinfo:%snDriverVersion:%u.%u.%un,cap.driver,cap.card,cap.bus_info,(cap.version6)&0XFF(cap.version8)&0XFFcap.version&0XFF;設(shè)置視頻的制式和幀格式制式包括PAL,NTSC相關(guān)函數(shù):intioctl(幀的格式個(gè)包括寬度和高度等。intfd,intrequest,structv4l2_fmtdesc*argp);intioctl(相關(guān)結(jié)構(gòu)體:v4l2_cropcapv4l2_cropcapv4l2_
4、cropcapintfd,intrequest,structv4l2_format*argp);結(jié)構(gòu)體用來(lái)設(shè)置攝像頭的捕捉能力,在捕捉上視頻時(shí)應(yīng)先先設(shè)置的type域,再通過(guò)VIDIO_CROPCAP操作命令獲取設(shè)備捕捉能力的參數(shù),結(jié)構(gòu)體中,包括bounds(最大捕捉方框的左上角坐標(biāo)和寬高),defrect保存于(默認(rèn)捕捉方框的左上角坐標(biāo)和寬高)等。v4l2_format結(jié)構(gòu)體用來(lái)設(shè)置攝像頭的視頻制式、幀格式等,在設(shè)置這個(gè)參數(shù)時(shí)應(yīng)先填v4l2_format的各個(gè)域,如type(傳輸流類型),fmt.pix.width(寬),fmt.pix.heigth(高),fmt.pix.field(采樣區(qū)域
5、,如隔行采樣),fmt.pix.pixelformat(樣類型,如YUV4:2:2),然后通過(guò)VIDIO_S_FMT操作命令設(shè)置視頻捕捉格式。如下圖所示:5.1查詢并顯示所有支持的格式:VIDIOCENUMFMT相關(guān)函數(shù):intioctl(intfd,intrequest,structv4l2_fmtdesc*argp);相關(guān)結(jié)構(gòu)體:structv4l2fmtdesc(u32index;/要查詢的格式序號(hào),應(yīng)用程序設(shè)置enumv4l2_buf_typetype;/幀類型,應(yīng)用程序設(shè)置u32flags;/是否為壓縮格式u8description32;/格式名稱u32pixelformat;/格式
6、u32reserved4;/保留;例:顯示所有支持的格式structv4l2_fmtdescfmtdesc;fmtdesc.index=0;fmtdesc.type=V4L2_BUF_TYPE_VIDEO_CAPTUFpEi;ntf(Supportformat:n);while(ioctl(fd,VIDIOC_ENUM_FMT,&fmtdesc)!=-1)(printf(t%d.%sn,fmtdesc.index+1,fmtdesc.description);fmtdesc.index+;5.2查看或設(shè)置當(dāng)前格式:VIDIOC_G_FMT,VIDIOC_S_FMT檢查是否支持某種格式:VIDI
7、OC_TRY_FMT相關(guān)函數(shù):intioctl(intfd,intrequest,structv4l2_format*argp);相關(guān)結(jié)構(gòu)體:structv4l2_formatenumv4l2_buf_typetype;/幀類型,應(yīng)用程序設(shè)置unionfmtstructv4l2_pix_formatpix;/視頻設(shè)備使用structv4l2_windowwin;structv4l2_vbi_formatvbi;structv4l2_sliced_vbi_formatsliced;u8raw_data200;一;structv4l2_pix_formatu32width;/幀寬,單位像素u32h
8、eight;/幀高,單位像素u32pixelformat;/幀格式enumv4l2_fieldfield;u32bytesperline;u32sizeimage;enumv4l2_colorspacecolorspace;u32priv;例:顯示當(dāng)前幀的相關(guān)信息structv4l2_formatfmt;fmt.type=V4L2_BUF_TYPE_VIDEO_CAPTURoctl(fd,VIDIOC_G_FMT,&fmt);printf(“Currentdataformatinformation:ntwidth:%dntheight:%dnfmt.fmt.pix.width,fmt.fmt.
9、pix.height);structv4l2_fmtdescfmtdesc;fmtdesc.index=0;fmtdesc.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;while(ioctl(fd,VIDIOC_ENUM_FMT,&fmtdesc)!=-1)if(fmtdesc.pixelformat&fmt.fmt.pix.pixelformat)printf(tformat:%sn”,fmtdesc.description);break;fmtdesc.index+;例:檢查是否支持某種幀格式structv4l2_formatfmt;fmt.type=V4L2_BUF
10、_TYPE_VIDEO_CAPTURE;fmt.fmt.pix.pixelformat=V4L2_PIX_FMT_RGB32;if(ioctl(fd,VIDIOC_TRY_FMT,&fmt)=-1)if(errno=EINVAL)printf(“notsupportformatRGB32!n”);6.圖像的縮放VIDIOC_CROPCAP相關(guān)函數(shù):intioctl(intfd,intrequest,structv4l2_cropcap*argp);intioctl(intfd,intrequest,structv4l2_crop*argp);intioctl(intfd,intrequest,
11、conststructv4l2_crop*argp);相關(guān)結(jié)構(gòu)體:Cropping和scaling主要指的是圖像的取景范圍及圖片的比例縮放的支持。Crop就是把得到的數(shù)據(jù)作一定的裁剪和伸縮,裁剪可以只取樣我們可以得到的圖像大小的一部分,剪裁的主要參數(shù)是位置、長(zhǎng)度、寬度。而scale的設(shè)置是通過(guò)VIDIOC_G_FMT和VIDIOC_S_FMT來(lái)獲得和設(shè)置當(dāng)前的image的長(zhǎng)度,寬度來(lái)實(shí)現(xiàn)的。看下圖我們可以假設(shè)bounds是sensor最大能捕捉到的圖像范圍,而defrect是設(shè)備默認(rèn)的最大取樣范圍,這個(gè)可以通過(guò)VIDIOC_CROPCAP的ioctl來(lái)獲得設(shè)備的crap相關(guān)的屬性v4l2_cr
12、opcap,其中的bounds就是這個(gè)bounds,其實(shí)就是上限。每個(gè)設(shè)備都有個(gè)默認(rèn)的取樣范圍,就是defrect,就是defaultrect的意思,它比bounds要小一些。這個(gè)范圍也是通過(guò)VIDIOC_CROPCAP的ioctl來(lái)獲得的v4l2_cropcap結(jié)構(gòu)中的defrect來(lái)表示的,我們可以通過(guò)VIDIOC_G_CROP和VIDIOC_S_CROP來(lái)獲取和設(shè)置設(shè)備當(dāng)前的crop設(shè)置。6.1設(shè)置設(shè)備捕捉能力的參數(shù)相關(guān)函數(shù):intioctl(intfd,intrequest,structv4l2_cropcap*argp);相關(guān)結(jié)構(gòu)體:structv4l2_cropcapenumv4l
13、2_buf_typetype;/數(shù)據(jù)流的類型,應(yīng)用程序設(shè)置structv4l2_rectbounds;/這是camera的鏡頭能捕捉到的窗口大小的局限structv4l2_rectdefrect;/定義默認(rèn)窗口大小,包括起點(diǎn)位置及長(zhǎng),寬的大小,大小以像素為單位structv4l2_fractpixelaspect;/定義了圖片的寬高比;6.2設(shè)置窗口取景參數(shù)VIDIOC_G_CROPffiVIDIOC_S_CROP相關(guān)函數(shù):intioctl(intfd,intrequest,structv4l2_crop*argp);intioctl(intfd,intrequest,conststructv
14、4l2_crop*argp);相關(guān)結(jié)構(gòu)體:structv4l2_crop(enumv4l2_buf_typetype;/應(yīng)用程序設(shè)置structv4l2_rectc;videoInputsandOutputsVIDIOC_G_INPUT和VIDIOC_S_INPUT用來(lái)查詢和選則當(dāng)前的input,一個(gè)video設(shè)備節(jié)點(diǎn)可能對(duì)應(yīng)多個(gè)視頻源,比如saf7113可以最多支持四路cvbs輸入,如果上層想在四個(gè)cvbs視頻輸入間切換,那么就要調(diào)用ioctl(fd,VIDIOC_S_INPUT,&input)來(lái)切換。VIDIOC_G_INPUTandVIDIOC_G_OUTPUT返回當(dāng)前的videoinp
15、ut和output的index.相關(guān)函數(shù):intioctl(intfd,intrequest,structv4l2_input*argp);相關(guān)結(jié)構(gòu)體:structv4l2_input(_u32index;/*Whichinput*/_u8name32;/*Label*/_u32type;/*Typeofinput*/_u32audioset;/*Associatedaudios(bitfield)*/_u32tuner;/*Associatedtuner*/v4l2_std_idstd;_u32status;_u32reserved4;T我們可以通過(guò)VIDIOC_ENUMINPUTandVI
16、DIOC_ENUMOUTPUT別列舉一個(gè)input或者output的信息,我們使用一個(gè)v4l2_input結(jié)構(gòu)體來(lái)存放查詢結(jié)果,這個(gè)結(jié)構(gòu)體中有一個(gè)index域用來(lái)指定你索要查詢的是第幾個(gè)input/ouput,如果你所查詢的這個(gè)input是當(dāng)前正在使用的,那么在v4l2_input還會(huì)包含一些當(dāng)前的狀態(tài)信息,如果所查詢的input/output不存在,那么回返回EINVAL錯(cuò)誤,所以,我們通過(guò)循環(huán)查找,直到返回錯(cuò)誤來(lái)遍歷所有的input/output.VIDIOC_G_INPUTandVIDIOC_G_OUTPUT返回當(dāng)前的videoinput和output的index.例:列舉當(dāng)前輸入視頻所
17、支持的視頻格式structv4l2_inputinput;structv4l2_standardstandard;memset(&input,0,sizeof(input);/首先獲得當(dāng)前輸入的index,注意只是index,要獲得具體的信息,就的調(diào)用列舉操作if(-1=ioctl(fd,VIDIOC_G_INPUT,&input.index)perror(”VIDIOC_G_INPUT);exit(EXIT_FAILURE);/調(diào)用歹0舉操作,獲得input.index對(duì)應(yīng)的輸入的具體信息if(-1=ioctl(fd,VIDIOC_ENUMINPUT,&input)perror(”VIDIO
18、C_ENUM_INPUT;exit(EXIT_FAILURE);printf(”Currentinput%ssupports:n”,);memset(&standard,0,sizeof(standard);standard.index=0;/歹0舉所有的所支持的standard,如果standard.id與當(dāng)前input的input.std有共同的bitflag,意味著當(dāng)前的輸入支持這個(gè)standard,這樣將所有驅(qū)動(dòng)所支持的standard歹U舉一個(gè)遍,就可以找到該輸入所支持的所有standard了。while(0=ioctl(fd,VIDIOC_ENUMSTD,&st
19、andard)if(standard.id&input.std)printf(”sn”,);standard.index+;/*EINVALindicatestheendoftheenumeration,whichcannotbeemptyunlessthisdevicefallsundertheUSBexception.*/if(errno!=EINVAL|standard.index=0)perror(”VIDIOC_ENUMSTD;exit(EXIT_FAILURE);Videostandards相關(guān)函數(shù):v4l2_std_idstd_id;/這個(gè)就是個(gè)64bi
20、t得數(shù)intioctl(intfd,intrequest,structv4l2_standard*argp);相關(guān)結(jié)構(gòu)體:typedefu64v4l2_std_id;structv4l2_standardu32index;v4l2_std_idid;u8name24;structv4l2_fractframeperiod;/*Frames,notfields*/u32framelines;u32reserved4;當(dāng)然世界上現(xiàn)在有多個(gè)視頻標(biāo)準(zhǔn),如NTSCPAL他們又細(xì)分為好多種,那么我們的設(shè)備輸入/輸出究竟支持什么樣的標(biāo)準(zhǔn)呢?我們的當(dāng)前在使用的輸入和輸出正在使用的是哪個(gè)標(biāo)準(zhǔn)呢?index,然后
21、查出它的屬性,的信息進(jìn)行個(gè)集合,而這個(gè)我們?cè)趺丛O(shè)置我們的某個(gè)輸入輸出使用的標(biāo)準(zhǔn)呢?這都是有方法的。查詢我們的輸入支持什么標(biāo)準(zhǔn),首先就得找到當(dāng)前的這個(gè)輸入的在其屬性里面可以得到該輸入所支持的標(biāo)準(zhǔn),將它所支持的各個(gè)標(biāo)準(zhǔn)與所有的標(biāo)準(zhǔn)比較,就可以獲知所支持的各個(gè)標(biāo)準(zhǔn)的屬性。一個(gè)輸入所支持的標(biāo)準(zhǔn)應(yīng)該是一集合是用bit與的方式用一個(gè)64位數(shù)字表示。因此我們所查到的是一個(gè)數(shù)字。這個(gè)就Example:Informationaboutthecurrentvideostandardv4l2_std_idstd_id;/是個(gè)64bit得數(shù)structv4l2_standardstandard;/VIDIOC_G_S
22、T就是獲得當(dāng)前輸入使用的standard,不過(guò)這里只是得到了該標(biāo)準(zhǔn)的id/即flag,還沒(méi)有得到其具體的屆性信息,具體的屆性信息要通過(guò)列舉操作來(lái)得到。if(-1=ioctl(fd,VIDIOC_G_STD,&std_id)/獲得了當(dāng)前輸入使用的standard/NotewhenVIDIOC_ENUMSTDWaysreturnsEINVALthisisnovideodevice/oritfallsundertheUSBexception,andVIDIOC_G_STDeturningEINVAL/isnoerror.perror(”VIDIOC_G_STD);exit(EXIT_FAILURE)
23、;memset(&standard,0,sizeof(standard);standard.index=0;/從第一個(gè)開(kāi)始歹U舉/VIDIOC_ENUMSTffi來(lái)列舉所支持的所有的video標(biāo)準(zhǔn)的信息,不過(guò)要先給standard/結(jié)構(gòu)的index域制定一個(gè)數(shù)值,所歹U舉的標(biāo)準(zhǔn)的信息屆性包含在standard里面,/如果我們所列舉的標(biāo)準(zhǔn)和std_id有共同的bit,那么就意味著這個(gè)標(biāo)準(zhǔn)就是當(dāng)前輸/入所使用的標(biāo)準(zhǔn),這樣我們就得到了當(dāng)前輸入使用的標(biāo)準(zhǔn)的屆性信息while(0=ioctl(fd,VIDIOC_ENUMSTD,&standard)if(standard.id&std_id)printf
24、(”Currentvideostandard:%sn”,);exit(EXIT_SUCCESS);standard.index+;/*EINVALindicatestheendoftheenumeration,whichcannotbeemptyunlessthisdevicefallsundertheUSBexception.*/if(errno=EINVAL|standard.index=0)perror(”VIDIOC_ENUMSTD;exit(EXIT_FAILURE);申請(qǐng)和管理緩沖區(qū)應(yīng)用程序和設(shè)備有三種交換數(shù)據(jù)的方法,直接read/write、內(nèi)存映射(m
25、emorymapping)和用戶指針。這里只討論內(nèi)存映射(memorymapping)。9.1向設(shè)備申請(qǐng)緩沖區(qū)VIDIOC_REQBUFS相關(guān)函數(shù):intioctl(intfd,intrequest,structv4l2_requestbuffers*argp);相關(guān)結(jié)構(gòu)體:structv4l2_requestbuffersu32count;/緩沖區(qū)內(nèi)緩沖幀的數(shù)目enumv4l2_buf_typetype;/緩沖幀數(shù)據(jù)格式enumv4l2_memorymemory;/區(qū)別是內(nèi)存映射還是用戶指針?lè)绞絬32reserved2;注:enumv4l2_memoyV4L2_MEMORY_MMAP,V4L
26、2_MEMORY_USERPTR);/count,type,memory都要應(yīng)用程序設(shè)置例:申請(qǐng)一個(gè)擁有四個(gè)緩沖幀的緩沖區(qū)structv4l2_requestbuffersreq;req.count=4;req.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;req.memory=V4L2_MEMORY_MMAP;ioctl(fd,VIDIOC_REQBUFS,&req);9.2獲取緩沖幀的地址,長(zhǎng)度:VIDIOC_QUERYBUF相關(guān)函數(shù):intioctl(intfd,intrequest,structv4l2_buffer*argp);相關(guān)結(jié)構(gòu)體:structv4l2_b
27、ufferu32index;/buffer序號(hào)enumv4l2_buf_typetype;/buffer類型u32byteused;/buffer中已使用的字節(jié)數(shù)u32flags;/區(qū)分是MMAF是USERPTRenumv4l2_fieldfield;structtimevaltimestamp;/獲取第一個(gè)字節(jié)時(shí)的系統(tǒng)時(shí)間structv4l2_timecodetimecode;u32sequence;/隊(duì)歹U中的序號(hào)enumv4l2_memorymemory;/IO方式,被應(yīng)用程序設(shè)置unionmu32offset;/緩沖幀地址,只對(duì)MMAPt效unsignedlonguserptr;u32
28、length;/緩沖幀長(zhǎng)度u32input;u32reserved;;9.3內(nèi)存映射MMAP及定義一個(gè)結(jié)構(gòu)體來(lái)映射每個(gè)緩沖幀。相關(guān)結(jié)構(gòu)體:structbuffervoid*start;unsignedintlength;*buffers;相關(guān)函數(shù):#includevoid*mmapVoid*addr,size_tlength,intprot,intflags,intfd,off_toffset)/addr映射起始地址,一般為NULL,讓內(nèi)核自動(dòng)選擇/length被映射內(nèi)存塊的長(zhǎng)度/prot標(biāo)志映射后能否被讀寫(xiě),其值為PROT_EXEC,PROT_READ,PROT_WRITE,PROT_NON
29、E/flags確定此內(nèi)存映射能否被其他進(jìn)程共享,MAP_SHARED,MAP_PRIVATE/fd,offset,確定被映射的內(nèi)存地址返回成功映射后的地址,不成功返回MAP_FAILED(void*)-1)相關(guān)函數(shù):intmunmap(void*addr,size_tlength);/斷開(kāi)映射/addr為映射后的地址,length為映射后的內(nèi)存長(zhǎng)度例:將四個(gè)已申請(qǐng)到的緩沖幀映射到應(yīng)用程序,用buffers指針記錄。buffers=(buffer*)calloc(req.count,sizeof(*buffers);if(!buffers)/映射fprintf(stderr,Outofmemory/n);exit(EXIT_FAILURE);for(unsignedintn_buffers=0;n_buffersreq.count;+n_buffers)(structv4l2_bufferbuf;memset(&buf,0,sizeof(buf);buf.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory=V4L2_MEMORY_MMAP;buf.index=n_buffers;/查詢序號(hào)為n_buffers的緩沖區(qū),得到其起始物理地址和大小if(-
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 氨綸抽條密絲絨項(xiàng)目投資可行性研究分析報(bào)告(2024-2030版)
- 口腔健康與肌膚護(hù)理
- 2025-2030年中國(guó)產(chǎn)銷化工油漆類行業(yè)深度研究分析報(bào)告
- 護(hù)具系列項(xiàng)目可行性研究報(bào)告
- 中國(guó)三星盆臺(tái)行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告(2024-2030)
- 智能曬衣架項(xiàng)目可行性研究報(bào)告模板
- 2025年中國(guó)3G無(wú)線網(wǎng)卡行業(yè)市場(chǎng)發(fā)展現(xiàn)狀及投資戰(zhàn)略咨詢報(bào)告
- 2025年中國(guó)鉸接式卡車(chē)行業(yè)發(fā)展運(yùn)行現(xiàn)狀及投資潛力預(yù)測(cè)報(bào)告
- 2025年中國(guó)30頭配套餐具行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 圖書(shū)出版合同
- 【提分攻略·河北專用】《專題07 生物的遺傳和變異》中考生物大題(解析版)
- 新版建設(shè)工程工程量清單計(jì)價(jià)標(biāo)準(zhǔn)解讀
- 初中數(shù)學(xué)專題講座課件
- 國(guó)家開(kāi)放大學(xué)礦井火災(zāi)防治課程形成性考核作業(yè)1-4
- 【MOOC】人像攝影-中國(guó)傳媒大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 【MOOC】計(jì)算機(jī)組成原理-電子科技大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 【MOOC】電路分析AⅡ-西南交通大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 幼兒園 中班語(yǔ)言繪本《章魚(yú)先生賣(mài)雨傘》
- 小學(xué)生數(shù)學(xué)邏輯推理題100道及答案解析
- 嬰幼兒發(fā)展引導(dǎo)員(育嬰員)職業(yè)技能競(jìng)賽理論考試題庫(kù)(含答案)
- 2024年《中央經(jīng)濟(jì)工作會(huì)議》重要試題及答案
評(píng)論
0/150
提交評(píng)論