Example #1
0
        public sDmaBuffer exportOutputBuffer(VideoDevice device, ref sPixelFormatMP pixelFormat)
        {
            sExportBuffer     eb          = device.exportOutputBuffer(bufferIndex);
            sPlanePixelFormat planeFormat = pixelFormat.getPlaneFormat(0);

            sDmaBuffer dma = new sDmaBuffer()
            {
                fd          = eb.fd,
                offset      = 0,
                stride      = planeFormat.bytesPerLine,
                imageSize   = planeFormat.bytesPerLine * pixelFormat.size.cy,
                sizePixels  = pixelFormat.size,
                bufferIndex = bufferIndex
            };

            return(dma);
        }
Example #2
0
        public VideoTextures exportTextures(iGlesRenderDevice gles, VideoDevice device, ref sPixelFormatMP pixelFormat)
        {
            sExportBuffer eb = new sExportBuffer()
            {
                type  = eBufferType.VideoCaptureMPlane,
                index = bufferIndex,
                plane = 0,
                flags = eFileFlags.O_RDONLY | eFileFlags.O_CLOEXEC
            };

            device.file.call(eControlCode.EXPBUF, ref eb);

            sPlanePixelFormat planeFormat = pixelFormat.getPlaneFormat(0);

            sDmaBuffer dma = new sDmaBuffer()
            {
                fd          = eb.fd,
                offset      = 0,
                stride      = planeFormat.bytesPerLine,
                imageSize   = planeFormat.bytesPerLine * pixelFormat.size.cy,
                sizePixels  = pixelFormat.size,
                bufferIndex = bufferIndex
            };
            ITexture luma = gles.importLumaTexture(ref dma);

            Logger.logVerbose("Exported luma texture: {0}", dma);

            // I asked V4L2 for 2 planes, however QUERYBUF returned a single plane, with the complete NV12 image in it.
            // No big deal, we have EGL_DMA_BUF_PLANE0_OFFSET_EXT for that; that's where the sDmaBuffer.offset field goes.
            dma.offset     = dma.imageSize;
            dma.sizePixels = chromaSize(pixelFormat.size);
            dma.imageSize  = dma.stride * dma.sizePixels.cy;
            ITexture chroma = gles.importChromaTexture(ref dma);

            Logger.logVerbose("Exported chroma texture: {0}", dma);

            return(new VideoTextures(luma, chroma));
        }