美文网首页ios学习
CVPixelBufferRef取出RDB和YUV

CVPixelBufferRef取出RDB和YUV

作者: ai___believe | 来源:发表于2017-11-15 17:43 被阅读307次

    取出YUV

    -(int) getImageData:(const CVImageBufferRef&) imageBuffer senddata:(unsigned char)data
    {
    int w,h,linesizey,linesizeuv;
    unsigned char
    srcy=NULL;
    unsigned char* srcu=NULL;
    unsigned char* srcv=NULL;

    CVPixelBufferLockBaseAddress(imageBuffer, 0);
    int count=CVPixelBufferGetPlaneCount(imageBuffer);
    //printf("CVPixelBufferGetPlaneCount=%d\n",count);
    
    if (CVPixelBufferIsPlanar(imageBuffer)) {
        w = CVPixelBufferGetWidth(imageBuffer);
        h = CVPixelBufferGetHeight(imageBuffer);
        
        // printf("w: %d,h: %d.\n",w,h);
        
        linesizey = CVPixelBufferGetBytesPerRowOfPlane(imageBuffer, 0);
        linesizeuv = CVPixelBufferGetBytesPerRowOfPlane(imageBuffer, 1);
        // printf("CVPixelBufferGetBytesPerRowOfPlane is ok.\n");
        srcy = (unsigned char*) CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 0);
        srcu = (unsigned char*) CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 1);
        srcv = (unsigned char*) CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 2);
        
        memcpy(data,srcy,720*1280);
        memcpy(data+720*1280,srcu,720*1280/4);
        memcpy(data+720*1280*5/4,srcv,720*1280/4);
        
        // printf("CVPixelBufferGetBaseAddressOfPlane is ok.\n");
    }
    else
    {
        printf("CVPixelBufferIsPlanar error\n");
        return -1;
    }
    return 0;
    

    }

    取出RGB

    • (void)captureOutput:(AVCaptureOutput *)captureOutput
      didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
      fromConnection:(AVCaptureConnection *)connection
      {

      CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
      CVPixelBufferLockBaseAddress(imageBuffer,0);

      size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
      size_t width = CVPixelBufferGetWidth(imageBuffer);
      size_t height = CVPixelBufferGetHeight(imageBuffer);
      uint8_t src_buff = (uint8_t)CVPixelBufferGetBaseAddress(imageBuffer);

      CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
      RGBPixel *pixelData = (RGBPixel *)src_buff;

      int len = bytesPerRow * height;
      for(int i=0; i<len; i+=4){

        RGBPixel pixel = pixelData[i/4];
        
        int a = 0;
        int r = pixel.red;
        int g = pixel.green;
        int b = pixel.blue;
      
        NSLog(@"first values = r:%d g:%d b:%d", r, g, b);
        
        a = src_buff[i+3];
        r = src_buff[i+2];
        g = src_buff[i+1];
        b = src_buff[i];
      
        NSLog(@"second values = r:%d g:%d b:%d", r, g, b);
      

      }

    }

    http://www.bubuko.com/infodetail-526746.html

    相关文章

      网友评论

        本文标题:CVPixelBufferRef取出RDB和YUV

        本文链接:https://www.haomeiwen.com/subject/xsshvxtx.html