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

開源一個上架App Store的相機App

移動開發 iOS
Osho 相機是我獨立開發上架的一個相機 App,它支持1:1,4:3,16:9多種分辨率拍攝,濾鏡可在取景框的實時預覽,拍攝過程可與濾鏡實時合成,支持分段拍攝,支持回刪等特性。下面先分享分享開發這個 App 的一些心得體會,文末會給出項目的下載地址,閱讀本文可能需要一點點 AVFoundation 開發的基礎。

Osho 相機是我獨立開發上架的一個相機 App,App Store地址:https://itunes.apple.com/cn/app/osho/id1203312279?mt=8。它支持1:1,4:3,16:9多種分辨率拍攝,濾鏡可在取景框的實時預覽,拍攝過程可與濾鏡實時合成,支持分段拍攝,支持回刪等特性。下面先分享分享開發這個 App 的一些心得體會,文末會給出項目的下載地址,閱讀本文可能需要一點點 AVFoundation 開發的基礎。  

 

1、GLKView和GPUImageVideoCamera

一開始取景框的預覽我是基于 GLKView 做的,GLKView 是蘋果對 OpenGL 的封裝,我們可以使用它的回調函數 -glkView:drawInRect: 進行對處理后的 samplebuffer 渲染的工作(samplebuffer 是在相機回調 didOutputSampleBuffer 產生的),附上當初簡版代碼:

  1. - (CIImage *)renderImageInRect:(CGRect)rect { 
  2.  
  3.     CMSampleBufferRef sampleBuffer = _sampleBufferHolder.sampleBuffer; 
  4.  
  5.   
  6.  
  7.     if (sampleBuffer != nil) { 
  8.  
  9.         UIImage *originImage = [self imageFromSamplePlanerPixelBuffer:sampleBuffer]; 
  10.  
  11.         if (originImage) { 
  12.  
  13.            if (self.filterName && self.filterName.length > 0) { 
  14.  
  15.   
  16.  
  17.                GPUImageOutput<GPUImageInput> *filter; 
  18.  
  19.                 if ([self.filterType isEqual: @"1"]) { 
  20.  
  21.                     Class class = NSClassFromString(self.filterName); 
  22.  
  23.                     filter = [[class alloc] init]; 
  24.  
  25.                 } else { 
  26.  
  27.                     NSBundle *bundle = [NSBundle bundleForClass:self.class]; 
  28.  
  29.                     NSURL *filterAmaro = [NSURL fileURLWithPath:[bundle pathForResource:self.filterName ofType:@"acv"]]; 
  30.  
  31.                     filter = [[GPUImageToneCurveFilter alloc] initWithACVURL:filterAmaro]; 
  32.  
  33.                 } 
  34.  
  35.                 [filter forceProcessingAtSize:originImage.size]; 
  36.  
  37.                 GPUImagePicture *pic = [[GPUImagePicture alloc] initWithImage:originImage]; 
  38.  
  39.                 [pic addTarget:filter]; 
  40.  
  41.                 [filter useNextFrameForImageCapture]; 
  42.  
  43.                 [filter addTarget:self.gpuImageView]; 
  44.  
  45.                 [pic processImage];               
  46.  
  47.                 UIImage *filterImage = [filter imageFromCurrentFramebuffer]; 
  48.  
  49.                 //UIImage *filterImage = [filter imageByFilteringImage:originImage]; 
  50.  
  51.   
  52.  
  53.                 _CIImage = [[CIImage alloc] initWithCGImage:filterImage.CGImage options:nil]; 
  54.  
  55.             } else { 
  56.  
  57.             _CIImage = [CIImage imageWithCVPixelBuffer:CMSampleBufferGetImageBuffer(sampleBuffer)]; 
  58.  
  59.         } 
  60.  
  61.     }   
  62.  
  63.     CIImage *image = _CIImage; 
  64.  
  65.   
  66.  
  67.     if (image != nil) { 
  68.  
  69.         image = [image imageByApplyingTransform:self.preferredCIImageTransform]; 
  70.  
  71.   
  72.  
  73.         if (self.scaleAndResizeCIImageAutomatically) { 
  74.  
  75.            image = [self scaleAndResizeCIImage:image forRect:rect]; 
  76.  
  77.         } 
  78.  
  79.     } 
  80.  
  81.   
  82.  
  83.     return image; 
  84.  
  85.  
  86.   
  87.  
  88. - (void)glkView:(GLKView *)view drawInRect:(CGRect)rect { 
  89.  
  90.     @autoreleasepool { 
  91.  
  92.         rect = CGRectMultiply(rect, self.contentScaleFactor); 
  93.  
  94.         glClearColor(0, 0, 0, 0); 
  95.  
  96.         glClear(GL_COLOR_BUFFER_BIT); 
  97.  
  98.   
  99.  
  100.         CIImage *image = [self renderImageInRect:rect]; 
  101.  
  102.   
  103.  
  104.         if (image != nil) { 
  105.  
  106.             [_context.CIContext drawImage:image inRect:rect fromRect:image.extent]; 
  107.  
  108.         } 
  109.  
  110.     } 
  111.  
  112.  

這樣的實現在低端機器上取景框會有明顯的卡頓,而且 ViewController 上的列表幾乎無法滑動,雖然手勢倒是還可以支持。 因為要實現分段拍攝與回刪等功能,采用這種方式的初衷是期望更高度的自定義,而不去使用 GPUImageVideoCamera, 畢竟我得在 AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureAudioDataOutputSampleBufferDelegate 這兩個回調做文章,為了滿足需求,所以得在不侵入 GPUImage 源代碼的前提下點功夫。

怎么樣才能在不破壞 GPUImageVideoCamera 的代碼呢?我想到兩個方法,第一個是創建一個類,然后把 GPUImageVideoCamera 里的代碼拷貝過來,這么做簡單粗暴,缺點是若以后 GPUImage 升級了,代碼維護起來是個小災難;再來說說第二個方法——繼承,繼承是個挺優雅的行為,可它的麻煩在于獲取不到私有變量,好在有強大的 runtime,解決了這個棘手的問題。下面是用 runtime 獲取私有變量:

  1. - (AVCaptureAudioDataOutput *)gpuAudioOutput { 
  2.  
  3.     Ivar var = class_getInstanceVariable([super class], "audioOutput"); 
  4.  
  5.     id nameVar = object_getIvar(self, var); 
  6.  
  7.     return nameVar; 
  8.  
  9.  

至此取景框實現了濾鏡的渲染并保證了列表的滑動幀率。

2、實時合成以及 GPUImage 的 outputImageOrientation

顧名思義,outputImageOrientation 屬性和圖像方向有關的。GPUImage 的這個屬性是對不同設備的在取景框的圖像方向做過優化的,但這個優化會與 videoOrientation 產生沖突,它會導致切換攝像頭導致圖像方向不對,也會造成拍攝完之后的視頻方向不對。 最后的解決辦法是確保攝像頭輸出的圖像方向正確,所以將其設置為 UIInterfaceOrientationPortrait,而不對 videoOrientation 進行設置,剩下的問題就是怎樣處理拍攝完成之后視頻的方向。

先來看看視頻的實時合成,因為這里包含了對用戶合成的 CVPixelBufferRef 資源處理。還是使用繼承的方式繼承 GPUImageView,其中使用了 runtime 調用私有方法:

  1. SEL s = NSSelectorFromString(@"textureCoordinatesForRotation:"); 
  2.  
  3. IMP imp = [[GPUImageView class] methodForSelector:s]; 
  4.  
  5. GLfloat *(*func)(id, SEL, GPUImageRotationMode) = (void *)imp; 
  6.  
  7. GLfloat *result = [GPUImageView class] ? func([GPUImageView class], s, inputRotation) : nil; 
  8.  
  9.   
  10.  
  11. ...... 
  12.  
  13.   
  14.  
  15. glVertexAttribPointer(self.gpuDisplayTextureCoordinateAttribute, 2, GL_FLOAT, 0, 0, result);  

直奔重點——CVPixelBufferRef 的處理,將 renderTarget 轉換為 CGImageRef 對象,再使用 UIGraphics 獲得經 CGAffineTransform 處理過方向的 UIImage,此時 UIImage 的方向并不是正常的方向,而是旋轉過90度的圖片,這么做的目的是為 videoInput 的 transform 屬性埋下伏筆。下面是 CVPixelBufferRef 的處理代碼:

  1. int width = self.gpuInputFramebufferForDisplay.size.width; 
  2.  
  3. int height = self.gpuInputFramebufferForDisplay.size.height; 
  4.  
  5.   
  6.  
  7. renderTarget = self.gpuInputFramebufferForDisplay.gpuBufferRef; 
  8.  
  9.   
  10.  
  11. NSUInteger paddedWidthOfImage = CVPixelBufferGetBytesPerRow(renderTarget) / 4.0; 
  12.  
  13. NSUInteger paddedBytesForImage = paddedWidthOfImage * (int)height * 4; 
  14.  
  15.   
  16.  
  17. glFinish(); 
  18.  
  19. CVPixelBufferLockBaseAddress(renderTarget, 0); 
  20.  
  21. GLubyte *data = (GLubyte *)CVPixelBufferGetBaseAddress(renderTarget); 
  22.  
  23. CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, data, paddedBytesForImage, NULL); 
  24.  
  25. CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); 
  26.  
  27. CGImageRef iref = CGImageCreate((int)width, (int)height, 8, 32, CVPixelBufferGetBytesPerRow(renderTarget), colorspace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst, ref, NULLNO, kCGRenderingIntentDefault); 
  28.  
  29.   
  30.  
  31. UIGraphicsBeginImageContext(CGSizeMake(height, width)); 
  32.  
  33. CGContextRef cgcontext = UIGraphicsGetCurrentContext(); 
  34.  
  35. CGAffineTransform transform = CGAffineTransformIdentity; 
  36.  
  37. transform = CGAffineTransformMakeTranslation(height / 2.0, width / 2.0); 
  38.  
  39. transform = CGAffineTransformRotate(transform, M_PI_2); 
  40.  
  41. transform = CGAffineTransformScale(transform, 1.0, -1.0); 
  42.  
  43. CGContextConcatCTM(cgcontext, transform); 
  44.  
  45.   
  46.  
  47. CGContextSetBlendMode(cgcontext, kCGBlendModeCopy); 
  48.  
  49. CGContextDrawImage(cgcontext, CGRectMake(0.0, 0.0, width, height), iref); 
  50.  
  51. UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
  52.  
  53. UIGraphicsEndImageContext(); 
  54.  
  55. self.img = image; 
  56.  
  57.   
  58.  
  59. CFRelease(ref); 
  60.  
  61. CFRelease(colorspace); 
  62.  
  63. CGImageRelease(iref); 
  64.  
  65. CVPixelBufferUnlockBaseAddress(renderTarget, 0); 

 而 videoInput 的 transform 屬性設置如下:

  1. _videoInput.transform = CGAffineTransformRotate(_videoConfiguration.affineTransform, -M_PI_2); 

經過這兩次方向的處理,合成的小視頻終于方向正常了。此處為簡版的合成視頻代碼:

  1. CIImage *image = [[CIImage alloc] initWithCGImage:img.CGImage options:nil]; 
  2.  
  3. CVPixelBufferLockBaseAddress(pixelBuffer, 0); 
  4.  
  5. [self.context.CIContext render:image toCVPixelBuffer:pixelBuffer]; 
  6.  
  7. ... 
  8.  
  9. [_videoPixelBufferAdaptor appendPixelBuffer:pixelBuffer withPresentationTime:bufferTimestamp]  

可以看到關鍵點還是在于上面繼承自 GPUImageView 這個類獲取到的 renderTarget 屬性,它應該即是取景框實時預覽的結果,我在最初的合成中是使用 sampleBuffer 轉 UIImage,再通過 GPUImage 添加濾鏡,最后將 UIImage 再轉 CIImage,這么做導致拍攝時會卡。當時我幾乎想放棄了,甚至想采用拍好后再加濾鏡的方式繞過去,最后這些不純粹的方法都被我 ban 掉了。

既然濾鏡可以在取景框實時渲染,我想到了 GPUImageView 可能有料。在閱讀過 GPUImage 的諸多源碼后,終于在 GPUImageFramebuffer.m 找到了一個叫 renderTarget 的屬性。至此,合成的功能也告一段落。

3、關于濾鏡

這里主要分享個有意思的過程。App 里有三種類型的濾鏡。基于 glsl 的、直接使用 acv 的以及直接使用 lookuptable 的。lookuptable 其實也是 photoshop 可導出的一種圖片,但一般的軟件都會對其加密,下面簡單提下我是如何反編譯“借用”某軟件的部分濾鏡吧。使用 Hopper Disassembler 軟件進行反編譯,然后通過某些關鍵字的搜索,幸運地找到了下圖的一個方法名。 

 

 

 

reverse 只能說這么多了….在開源代碼里我已將這一類敏感的濾鏡剔除了。

小結

開發相機 App 是個挺有意思的過程,在其中邂逅不少優秀開源代碼,向開源代碼學習,才能避免自己總是寫出一成不變的代碼。最后附上項目的開源地址 https://github.com/hawk0620/ZPCamera,希望能夠幫到有需要的朋友,也歡迎 star 和 pull request。 

責任編輯:龐桂玉 來源: iOS大全
相關推薦

2019-07-04 14:11:48

App StoreiOS應用開發

2022-01-17 09:22:42

SwiftUI App Store開源

2020-02-22 13:00:26

App StoreiOSOffice

2012-04-25 22:41:37

APP

2012-06-15 09:43:20

蘋果App Store盜版書

2011-12-28 10:09:53

云計算App StoreCA

2013-08-06 14:37:37

App Store定價移動應用定價移動應用市場

2013-08-05 14:52:01

蘋果微信5.0App Store

2011-12-31 21:19:56

App Store

2013-01-21 10:27:47

蘋果App Store下架

2017-08-14 10:05:50

開發者App Store

2013-07-30 16:27:20

App Store潛規則

2021-06-22 16:21:40

鴻蒙HarmonyOS應用

2012-06-15 09:35:17

2010-08-26 11:00:23

2012-04-26 13:30:05

iPhoneApp Store發布程序

2012-03-07 10:50:39

APP經驗

2011-10-11 08:39:04

LinuxApp store

2012-01-05 08:50:52

App Store定價策略

2023-05-19 19:35:11

ChatGPT數據泄露
點贊
收藏

51CTO技術棧公眾號

国产又黄又爽视频| 国产精品一区二区3区| gogo亚洲国模私拍人体| 爱啪啪综合导航| 视频一区二区国产| 中文字幕精品国产| 性一交一黄一片| 日本不良网站在线观看| 国产精品色在线| 动漫精品视频| 怡春院在线视频| 日韩视频三区| 久久伊人91精品综合网站| 青青草视频网站| 国产高清视频一区二区| 日韩欧美主播在线| 国产剧情久久久久久| 麻豆91精品91久久久| 九九久久婷婷| 亚洲第一福利网站| 日本福利视频在线观看| 青青青草原在线| 国产福利一区二区三区视频在线 | 久久免费视频网站| 国产伦精品一区二区三区视频女| 91精品久久久久久综合五月天| 色哦色哦哦色天天综合| 久久精品magnetxturnbtih| 伊人免费在线观看| 性欧美长视频| 久久久中文字幕| 日本中文字幕免费在线观看| 电影中文字幕一区二区| 欧美性猛交xxxx偷拍洗澡| 麻豆传媒网站在线观看| 精品久久无码中文字幕| 欧美 日韩 国产 一区| 亚洲天堂网站在线观看视频| 在线视频 日韩| 日本超碰一区二区| 欧美人伦禁忌dvd放荡欲情| 国产精品亚洲αv天堂无码| 美女尤物在线视频| 亚洲欧美日韩国产手机在线| 亚洲成人自拍视频| 草碰在线视频| 国产精品自拍三区| 国产精品一二三在线| 一二三区免费视频| 99久久亚洲精品| 亚洲天堂精品在线| 亚洲 小说 欧美 激情 另类| 天天躁日日躁狠狠躁欧美| 亚洲精品国产美女| 97视频在线免费播放| 国产激情视频在线看| 亚洲国产美女搞黄色| 免费人成自慰网站| 白白色在线观看| 午夜在线电影亚洲一区| 日本中文字幕网址| 捆绑调教日本一区二区三区| 亚洲v精品v日韩v欧美v专区| 草草视频在线免费观看| a天堂资源在线| 精品日本高清在线播放| 国产午夜伦鲁鲁| 亚洲精品动漫| 欧美中文字幕亚洲一区二区va在线| 成人亚洲视频在线观看| se01亚洲视频| 五月天亚洲婷婷| 可以在线看的av网站| 最近高清中文在线字幕在线观看1| 欧美日韩国产中文字幕| 北条麻妃视频在线| 日韩成人免费av| 欧美性xxxx极品hd满灌| 黄色国产小视频| www一区二区三区| 欧美一级理论片| 欧美夫妇交换xxx| 久久91精品| 久久资源免费视频| 日本一区二区三区免费视频| 四季av一区二区凹凸精品| 日韩亚洲精品视频| 国产污视频在线观看| 欧美一级二区| 成人免费网站在线看| www毛片com| 久久爱另类一区二区小说| 99re在线国产| 国产原创av在线| 亚洲激情一二三区| 国产在线观看福利| 电影中文字幕一区二区| 日韩电影免费观看在线观看| 超碰人人人人人人人| 欧美日本在线| 国产精品高精视频免费| 日韩精品手机在线| 狠色狠色综合久久| 国产成人精品999| 成人av一区二区三区在线观看| 久久午夜羞羞影院免费观看| 久久综合一区二区三区| 尤物视频在线免费观看| 日本一区二区三区免费乱视频 | 五月婷婷激情综合网| 日本人视频jizz页码69| 老司机凹凸av亚洲导航| 久久激情视频久久| 国产免费一区二区三区四区五区| 国产一区在线看| 视频一区视频二区视频三区高| 久草在线视频福利| 欧美剧在线免费观看网站| 天天碰免费视频| av综合网页| 精品国内自产拍在线观看| 国产区一区二区三| 成人午夜看片网址| 桥本有菜av在线| 美女羞羞视频在线观看| 欧美性xxxx极品hd满灌| 性囗交免费视频观看| 中文精品久久| 国产欧美日韩最新| 成人18在线| 日韩欧美在线视频免费观看| 亚洲av成人片色在线观看高潮 | 91爱爱小视频k| www.黄色av| 亚洲精品写真福利| 91丨九色丨蝌蚪| 日韩理论在线| 国产美女久久久| 自拍视频在线免费观看| 在线观看日韩国产| 日本理论中文字幕| 玖玖玖国产精品| 欧美二区在线| 向日葵视频成人app网址| 亚洲精品国产精品国产自| 翔田千里88av中文字幕| 免费成人小视频| 午夜精品一区二区在线观看| 久久99久久99精品免观看软件| 亚洲精品一区久久久久久| 成年人视频在线免费看| 99精品视频一区二区| 国产激情片在线观看| 久久精品xxxxx| 中国人与牲禽动交精品| 怡红院男人的天堂| 亚洲欧洲成人自拍| 欧美视频亚洲图片| 欧美亚洲不卡| 国产精品一区二区三区在线观 | 欧美日韩国产一区二区三区| 亚洲の无码国产の无码步美| 国产欧美大片| 日本一区视频在线观看免费| 成人国产精品| 美日韩丰满少妇在线观看| 五月天婷婷综合网| 97se亚洲国产综合自在线| av免费播放网址| 欧美日韩激情在线一区二区三区| 国产精品久久久久久久久男| 午夜精品久久久久久久99| 依依成人精品视频| 日本国产在线视频| 亚洲韩日在线| 国产日本一区二区三区| 欧美gay囗交囗交| 中文字幕亚洲一区二区三区五十路| 亚洲永久精品视频| 国产亚洲精品福利| 性欧美1819| 国产麻豆精品久久| 国产日韩欧美日韩| 久草在线视频资源| 国产午夜精品美女视频明星a级| 一本色道久久综合熟妇| 亚洲一区二区欧美激情| 人妻aⅴ无码一区二区三区| 精品一区二区免费看| 青青草国产免费| 精品av一区二区| 亚洲a成v人在线观看| 国产高清自产拍av在线| 久久九九国产精品怡红院| 手机看片国产1024| 欧美日韩亚洲不卡| 日本系列第一页| 国产精品理伦片| 特级西西人体4444xxxx| 久久99精品久久久久婷婷| 欧美精品久久久久久久自慰| 久久一区二区三区喷水| 韩国成人动漫在线观看| 91精品亚洲一区在线观看| 欧美在线观看网址综合| 日韩另类在线| 这里只有精品视频| 午夜视频福利在线观看| 欧美日韩国产精品一区二区三区四区 | 久久精品国产99国产精品澳门| 四虎永久在线观看| 7777精品久久久大香线蕉| 国产日产精品一区二区三区| 亚洲激情五月婷婷| 亚洲一级理论片| 久久久久久久av麻豆果冻| 苍井空张开腿实干12次| 蜜桃久久久久久久| 韩国一区二区av| 亚洲伦理一区| 日本一区午夜艳熟免费| 偷偷www综合久久久久久久| 欧美日韩国产免费一区二区三区| youjizz亚洲| 95av在线视频| 亚洲国产91视频| 国产精品久久久久久av| 黑人巨大亚洲一区二区久| 97精品国产97久久久久久| av免费在线观看网址| 丝袜情趣国产精品| 天堂av资源在线| 精品久久久久久久久久久久久久久| 麻豆亚洲av成人无码久久精品| 国产人久久人人人人爽| 超碰97人人干| 99精品桃花视频在线观看| 四虎成人免费视频| 国产精品一区二区黑丝| 思思久久精品视频| 久久国产免费看| 日本久久高清视频| 水蜜桃久久夜色精品一区| 日本一区二区三区免费看| 亚洲aa在线| 国产日韩在线一区| www.日韩| 国产成人一区二区三区| 午夜欧美巨大性欧美巨大| 欧洲s码亚洲m码精品一区| 欲香欲色天天天综合和网| 69久久夜色精品国产69| 26uuu亚洲电影| 日本久久91av| 日本一区免费网站| 国产精品亚洲综合天堂夜夜| 99视频这里有精品| 444亚洲人体| 免费看久久久| 成人免费高清完整版在线观看| 国产一区二区三区四区五区3d| 国产精品专区h在线观看| 国产三级一区| 91午夜在线播放| jizz性欧美23| 免费精品视频一区二区三区| 色综合综合网| 一区二区在线观| 欧美日韩在线大尺度| 黄色一级视频片| 日本91福利区| 国产人妻精品久久久久野外| 成人福利视频在线看| v8888av| 中文字幕欧美一区| 国产成人精品亚洲男人的天堂| 黑人巨大精品欧美一区免费视频| 69视频免费看| 日韩一区二区在线观看视频播放| 秋霞av鲁丝片一区二区| 亚洲丝袜av一区| 二区三区在线观看| 97香蕉久久超级碰碰高清版| 日韩欧美精品电影| 96成人在线视频| 香蕉视频一区| 四虎免费在线观看视频| 国产精品亚洲欧美| 日韩中文字幕a| 99久久精品国产一区二区三区 | 国产精品成人v| 日韩在线观看中文字幕| 欧美日本韩国一区二区三区| 91精品婷婷色在线观看| 大陆极品少妇内射aaaaa| 麻豆91精品视频| 国产精品麻豆入口| 亚洲欧美综合色| 香蕉影院在线观看| 欧美一级淫片007| 国产理论电影在线观看| 久久久久久久91| 欧洲亚洲精品| 欧美18视频| 亚洲视频碰碰| theporn国产精品| 亚洲国产精华液网站w | 亚洲欧美久久| 自拍一级黄色片| 亚洲国产电影在线观看| 五月天综合激情| 欧美日韩国内自拍| 国产精品自拍电影| 亚洲色图在线观看| 91超碰在线播放| 97在线电影| 久久久久久久久国产一区| 欧美成人精品欧美一级乱| 懂色av一区二区三区免费看| 制服丨自拍丨欧美丨动漫丨| 日本丶国产丶欧美色综合| 色综合免费视频| 色综合久综合久久综合久鬼88| 欧美视频在线视频精品| 日韩国产伦理| 久久亚洲国产精品一区二区| 强迫凌虐淫辱の牝奴在线观看| 亚洲一区在线观看免费观看电影高清| 国产精品伦一区二区三区| 在线a欧美视频| v片在线观看| 国产精品视频色| 国产一区网站| 久久九九国产视频| 久久久久88色偷偷免费| 久久精品视频日本| 精品久久久久久久一区二区蜜臀| 伊人在我在线看导航| 91在线免费网站| 亚洲精品午夜av福利久久蜜桃| 色婷婷一区二区三区av免费看| 欧美国产禁国产网站cc| 中文字幕有码无码人妻av蜜桃| 伊人伊人伊人久久| 成人日韩精品| 秋霞在线观看一区二区三区| 午夜一区二区三区不卡视频| 亚洲乱码国产乱码精品精大量| 欧美性生活大片免费观看网址| 日本福利午夜视频在线| 日本精品久久久久影院| 久久97视频| 国产 porn| 《视频一区视频二区| 国产精品无码白浆高潮| 欧美另类交人妖| 国产乱论精品| 久久久久免费精品| 国产精品久久久久久户外露出 | 精品无码久久久久久久久| 精品久久久久av影院| 久久青草伊人| 性欧美大战久久久久久久免费观看| 免费观看久久久4p| 日韩国产第一页| 精品日韩欧美在线| 日韩精品美女| 亚洲一区在线免费| 国产不卡视频在线观看| 精品成人av一区二区在线播放| 亚洲天堂一区二区三区| 999精品视频在线观看| 日韩激情视频一区二区| 337p粉嫩大胆噜噜噜噜噜91av| 最新在线中文字幕| 久久电影一区二区| 日韩精品免费一区二区三区竹菊| 日本999视频| 一区二区三区四区在线免费观看 | xvideos亚洲| 成午夜精品一区二区三区软件| 99精品视频在线看| 中文字幕中文字幕一区二区 | 成人动漫视频在线| 天堂av免费在线观看| 九九热这里只有精品免费看| 亚洲瘦老头同性70tv| 激情久久综合网| 一本大道综合伊人精品热热| av毛片在线播放| 日本一区二区三区四区高清视频 | 99r国产精品视频| 久久在线精品| 久久久久久久久久久久久久免费看 | 久久久久久久久久久久久久久国产| 亚洲一区二区av在线| 成人在线免费观看| 国产精品免费一区二区三区四区| 美女精品一区二区| 久久青青草原亚洲av无码麻豆|