CVPixelBufferRef->濾鏡-> CVPixelBufferRef

因為在做直播巷波,最近突然有個想法萎津,自己做做濾鏡試試看,實驗了很多方法抹镊,下面談?wù)勎覐木W(wǎng)上了解的結(jié)合自己的想法锉屈,給大家分享一下。

首先垮耳,說到濾鏡肯定首先想到iOS上著名的開源庫GPUImage颈渊,熟悉GPUImage都知道自定義一個采集端GPUImageVideoCamera再添加濾鏡Target即可實現(xiàn)濾鏡遂黍,但是因為我們直播采用七牛做的,我查看七牛文檔俊嗽,并沒有發(fā)現(xiàn)可以自己定制相機的地方雾家。so,只能考慮對CVPixelBufferRef處理了绍豁。

先上結(jié)果芯咧,采用coreImage處理:

CVPixelBufferRef->CIImage->CIFilter->CIImage->CVPixelBufferRef

_coreImageContext = [CIContext contextWithEAGLContext:self.openGLESContext options:options];
- (CVPixelBufferRef)coreImageHandle:(CVPixelBufferRef)pixelBuffer
{
        CFAbsoluteTime elapsedTime, startTime = CFAbsoluteTimeGetCurrent();
        CIImage *inputImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];
        [_coreImageFilter setValue:inputImage forKey:kCIInputImageKey];
        CIImage *outputImage = [_coreImageFilter outputImage];
        elapsedTime = CFAbsoluteTimeGetCurrent() - startTime;
        NSLog(@"Core Image frame time: %f", elapsedTime * 1000.0);
        [_coreImageContext render:outputImage toCVPixelBuffer:pixelBuffer];
        return pixelBuffer;
}

其中_coreImageContext采用openGL ES 處理,也可變?yōu)镃PU處理妹田,但是考慮性能還是采用GPU處理吧唬党,此時處理時間一張大概1ms,完全可以支撐24幀的畫面

第一條思路:

對CVPixelBufferRef提取紋理鬼佣,扔給GPUImage filter 處理驶拱,然后再拿到處理完的紋理變?yōu)镃VPixelBufferRef,傳給七牛晶衷。因為openGL基礎(chǔ)不足蓝纲,未成功,暫時放棄
自己仿著GPUImageVideoCamera 里面
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
方法將PixelBuffer變?yōu)榧y理晌纫,但是注意七牛代理里面回傳回來的Buffer pixelFormat=BGRA税迷,所以提取紋理CVPixelBufferGetPlaneCount(cameraFrame)只有一層(待續(xù))

第二條思路:

直接處理RGBA,性能消耗太大锹漱,放棄
改方法為轉(zhuǎn)為灰度算法 CPU用量50-80%箭养。太特么燙了

CVPixelBufferLockBaseAddress(pixelBuffer, 0);
CFAbsoluteTime elapsedTime, startTime = CFAbsoluteTimeGetCurrent();
unsigned char *data = (unsigned char *)CVPixelBufferGetBaseAddress(pixelBuffer);
size_t bufferHeight = CVPixelBufferGetHeight(pixelBuffer);
size_t bufferWidth = CVPixelBufferGetWidth(pixelBuffer);
NSInteger myDataLength = bufferWidth * bufferHeight * 4;
for (int i = 0; i < myDataLength; i+=4)
{
        UInt8 r_pixel = data[i];
        UInt8 g_pixel = data[i+1];
        UInt8 b_pixel = data[i+2];
        //Gray = R*0.299 + G*0.587 + B*0.114
        int outputRed = (r_pixel * 0.299) + (g_pixel *0.587) + (b_pixel * 0.114);
        int outputGreen = (r_pixel * 0.299) + (g_pixel *0.587) + (b_pixel * 0.114);
        int outputBlue = (r_pixel * 0.299) + (g_pixel *0.587) + (b_pixel * 0.114);
        if(outputRed>255)outputRed=255;
        if(outputGreen>255)outputGreen=255;
        if(outputBlue>255)outputBlue=255;
        data[i] = outputRed;
        data[i+1] = outputGreen;
        data[i+2] = outputBlue;
}

elapsedTime = CFAbsoluteTimeGetCurrent() - startTime;
NSLog(@"CPU frame time: %f", elapsedTime * 1000.0);
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);

第三條思路:

就是上面結(jié)果那個啦~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市哥牍,隨后出現(xiàn)的幾起案子毕泌,更是在濱河造成了極大的恐慌,老刑警劉巖嗅辣,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撼泛,死亡現(xiàn)場離奇詭異,居然都是意外死亡澡谭,警方通過查閱死者的電腦和手機愿题,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛙奖,“玉大人潘酗,你說我怎么就攤上這事⊥庥溃” “怎么了崎脉?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長伯顶。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么祭衩? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任灶体,我火速辦了婚禮,結(jié)果婚禮上掐暮,老公的妹妹穿的比我還像新娘蝎抽。我一直安慰自己,他們只是感情好路克,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布樟结。 她就那樣靜靜地躺著,像睡著了一般精算。 火紅的嫁衣襯著肌膚如雪瓢宦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天灰羽,我揣著相機與錄音驮履,去河邊找鬼。 笑死廉嚼,一個胖子當著我的面吹牛玫镐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播怠噪,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼恐似,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了傍念?” 一聲冷哼從身側(cè)響起矫夷,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捂寿,沒想到半個月后口四,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡秦陋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年蔓彩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驳概。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡赤嚼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出顺又,到底是詐尸還是另有隱情更卒,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布稚照,位于F島的核電站蹂空,受9級特大地震影響俯萌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜上枕,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一咐熙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辨萍,春花似錦棋恼、人聲如沸柿汛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滴须。三九已至昌腰,卻和暖如春锯玛,著一層夾襖步出監(jiān)牢的瞬間虐呻,已是汗流浹背绊困。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工去团, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抡诞,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓土陪,卻偏偏與公主長得像昼汗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鬼雀,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容