我分别从视频帧中提取YUV数据并将它们保存在data[0],data[1],data[2];.帧大小是640*480;现在我创建pixelBuffer如下:
void *pYUV[3] = {data[0], data[1], data[2]};
size_t planeWidth = {640, 320, 320};
size_t planeHeight = {480, 240, 240};
size_t planeBytesPerRow = {640, 320, 320};
CVReturn renturn = CVPixelBufferCreateWithPlanarBytes(kCFAllocatorDefault,
640,
480,
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange,
nil,
nil,
3,
pYUV,
planeWidth,
planeHeight,
planeBytesPerRow,
nil,
nil, nil, &_pixelBuffer);
CVPixelBufferLockBaseAddress(_pixelBuffer, 0);
CVPixelBufferRetain(_pixelBuffer);
// Periodic texture cache flush every frame
CVOpenGLESTextureCacheFlush(_textureCache, 0);
// The Buffer cannot be used with OpenGL as either its size, pixelformat or attributes are not supported by …Run Code Online (Sandbox Code Playgroud) kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange的像素格式是双平面分量,y平面和另一个CbCr平面的一个分量.所以我认为它与NV12像素格式相同,对吧?
我正在使用UIWebview创建一个富文本编辑器,它使用contentEditablediv.我想以像素为单位得到插入符号的位置.我搜索了很多,我得到了下面的代码.
function getCaretClientPosition() {
var x = 0, y = 0;
var sel = window.getSelection();
if (sel.rangeCount) {
var range = sel.getRangeAt(0);
if (range.getClientRects) {
var rects = range.getClientRects();
if (rects.length > 0) {
x = rects[0].left;
y = rects[0].top;
}
}
}
return { x: x, y: y };
}
Run Code Online (Sandbox Code Playgroud)
上面的代码运行良好,直到我输入换行符.sel.getRangeAt(0)返回null,因此函数无法返回正确的插入符Y像素.