Home | History | Annotate | Download | only in gralloc

Lines Matching refs:cb

88 static int map_buffer(cb_handle_t *cb, void **vaddr)
90 if (cb->fd < 0 || cb->ashmemSize <= 0) {
94 void *addr = mmap(0, cb->ashmemSize, PROT_READ | PROT_WRITE,
95 MAP_SHARED, cb->fd, 0);
100 cb->ashmemBase = intptr_t(addr);
101 cb->ashmemBasePid = getpid();
331 cb_handle_t *cb = new cb_handle_t(fd, ashmem_size, usage,
340 int err = map_buffer(cb, &vaddr);
343 delete cb;
347 cb->setFd(fd);
374 cb->hostHandle = rcEnc->rcCreateColorBuffer(rcEnc, w, h, glFormat);
375 D("Created host ColorBuffer 0x%x\n", cb->hostHandle);
378 if (!cb->hostHandle) {
381 delete cb;
382 ALOGD("%s: failed to create host cb! -EIO", __FUNCTION__);
393 node->handle = cb;
402 *pHandle = cb;
417 const cb_handle_t *cb = (const cb_handle_t *)handle;
418 if (!cb_handle_t::validate((cb_handle_t*)cb)) {
423 if (cb->hostHandle != 0) {
425 D("Closing host ColorBuffer 0x%x\n", cb->hostHandle);
426 rcEnc->rcCloseColorBuffer(rcEnc, cb->hostHandle);
432 if (cb->fd > 0) {
433 if (cb->ashmemSize > 0 && cb->ashmemBase) {
434 munmap((void *)cb->ashmemBase, cb->ashmemSize);
436 close(cb->fd);
443 while( n && n->handle != cb ) {
462 delete cb;
496 cb_handle_t *cb = (cb_handle_t *)buffer;
498 if (!fbdev || !cb_handle_t::validate(cb) || !cb->canBePosted()) {
506 intptr_t *postCountPtr = (intptr_t *)cb->ashmemBase;
514 rcEnc->rcFBPost(rcEnc, cb->hostHandle);
587 cb_handle_t *cb = (cb_handle_t *)handle;
588 if (!gr || !cb_handle_t::validate(cb)) {
589 ERR("gralloc_register_buffer(%p): invalid buffer", cb);
593 if (cb->hostHandle != 0) {
595 D("Opening host ColorBuffer 0x%x\n", cb->hostHandle);
596 rcEnc->rcOpenColorBuffer2(rcEnc, cb->hostHandle);
603 if (cb->ashmemSize > 0 && cb->mappedPid != getpid()) {
605 int err = map_buffer(cb, &vaddr);
607 ERR("gralloc_register_buffer(%p): map failed: %s", cb, strerror(-err));
610 cb->mappedPid = getpid();
624 cb_handle_t *cb = (cb_handle_t *)handle;
625 if (!gr || !cb_handle_t::validate(cb)) {
626 ERR("gralloc_unregister_buffer(%p): invalid buffer", cb);
630 if (cb->hostHandle != 0) {
632 D("Closing host ColorBuffer 0x%x\n", cb->hostHandle);
633 rcEnc->rcCloseColorBuffer(rcEnc, cb->hostHandle);
640 if (cb->ashmemSize > 0 && cb->mappedPid == getpid()) {
642 int err = munmap((void *)cb->ashmemBase, cb->ashmemSize);
644 ERR("gralloc_unregister_buffer(%p): unmap failed", cb);
647 cb->ashmemBase = 0;
648 cb->mappedPid = 0;
651 D("gralloc_unregister_buffer(%p) done\n", cb);
789 cb_handle_t *cb = (cb_handle_t *)handle;
790 if (!gr || !cb_handle_t::validate(cb)) {
817 bool sw_read_allowed = (0 != (cb->usage & GRALLOC_USAGE_SW_READ_MASK));
824 sw_read_allowed = sw_read_allowed || (cb->usage & GRALLOC_USAGE_HW_VIDEO_ENCODER);
827 bool sw_write_allowed = (0 != (cb->usage & GRALLOC_USAGE_SW_WRITE_MASK));
835 ALOGE("gralloc_lock usage mismatch usage=0x%x cb->usage=0x%x\n", usage,
836 cb->usage);
848 if (cb->canBePosted() || sw_read || sw_write ||
851 if (cb->ashmemBasePid != getpid() || !cb->ashmemBase) {
855 if (cb->canBePosted()) {
856 postCount = *((intptr_t *)cb->ashmemBase);
857 cpu_addr = (void *)(cb->ashmemBase + sizeof(intptr_t));
860 cpu_addr = (void *)(cb->ashmemBase);
864 if (cb->hostHandle) {
871 int hostSyncStatus = rcEnc->rcColorBufferCacheFlush(rcEnc, cb->hostHandle,
885 if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YV12 ||
886 cb->frameworkFormat == HAL_PIXEL_FORMAT_YCbCr_420_888) {
888 tmpBuf = new char[cb->width * cb->height * 3];
891 D("gralloc_lock read back color buffer %d %d\n", cb->width, cb->height);
892 rcEnc->rcReadColorBuffer(rcEnc, cb->hostHandle,
893 0, 0, cb->width, cb->height, cb->glFormat, cb->glType, rgb_addr);
895 if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YV12) {
896 rgb888_to_yv12((char*)cpu_addr, tmpBuf, cb->width, cb->height, l, t, l+w-1, t+h-1);
897 } else if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YCbCr_420_888) {
898 rgb888_to_yuv420p((char*)cpu_addr, tmpBuf, cb->width, cb->height, l, t, l+w-1, t+h-1);
916 cb->lockedLeft = l;
917 cb->lockedTop = t;
918 cb->lockedWidth = w;
919 cb->lockedHeight = h;
1072 cb_handle_t *cb = (cb_handle_t *)handle;
1073 if (!gr || !cb_handle_t::validate(cb)) {
1074 ALOGD("%s: invalid gr or cb handle. -EINVAL", __FUNCTION__);
1082 if (cb->hostHandle) {
1088 if (cb->canBePosted()) {
1089 cpu_addr = (void *)(cb->ashmemBase + sizeof(int));
1092 cpu_addr = (void *)(cb->ashmemBase);
1096 if (cb->lockedWidth < cb->width || cb->lockedHeight < cb->height) {
1097 int bpp = glUtilsPixelBitSize(cb->glFormat, cb->glType) >> 3;
1098 char *tmpBuf = new char[cb->lockedWidth * cb->lockedHeight * bpp];
1099 if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YV12) {
1100 yv12_to_rgb888(tmpBuf, (char*)cpu_addr, cb->width, cb->height, cb->lockedLeft,
1101 cb->lockedTop, cb->lockedLeft+cb->lockedWidth-1, cb->lockedTop+cb->lockedHeight-1);
1102 } else if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YCbCr_420_888) {
1103 yuv420p_to_rgb888(tmpBuf, (char*)cpu_addr, cb->width, cb->height, cb->lockedLeft,
1104 cb->lockedTop, cb->lockedLeft+cb->lockedWidth-1, cb->lockedTop+cb->lockedHeight-1);
1106 int dst_line_len = cb->lockedWidth * bpp;
1107 int src_line_len = cb->width * bpp;
1108 char *src = (char *)rgb_addr + cb->lockedTop*src_line_len + cb->lockedLeft*bpp;
1110 for (int y=0; y<cb->lockedHeight; y++) {
1117 rcEnc->rcUpdateColorBuffer(rcEnc, cb->hostHandle,
1118 cb->lockedLeft, cb->lockedTop,
1119 cb->lockedWidth, cb->lockedHeight,
1120 cb->glFormat, cb->glType,
1127 if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YV12) {
1130 rgbBuf = new char[cb->width * cb->height * 3];
1131 yv12_to_rgb888(rgbBuf, (char*)cpu_addr, cb->width, cb->height, 0, 0, cb->width-1, cb->height-1);
1133 } else if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YCbCr_420_888) {
1136 rgbBuf = new char[cb->width * cb->height * 3];
1137 yuv420p_to_rgb888(rgbBuf, (char*)cpu_addr, cb->width, cb->height, 0, 0, cb->width-1, cb->height-1);
1141 rcEnc->rcUpdateColorBuffer(rcEnc, cb->hostHandle, 0, 0,
1142 cb->width, cb->height,
1143 cb->glFormat, cb->glType,
1153 cb->lockedWidth = cb->lockedHeight = 0;
1175 cb_handle_t *cb = (cb_handle_t *)handle;
1176 if (!gr || !cb_handle_t::validate(cb)) {
1181 if (cb->frameworkFormat != HAL_PIXEL_FORMAT_YV12 &&
1182 cb->frameworkFormat != HAL_PIXEL_FORMAT_YCbCr_420_888) {
1186 cb->frameworkFormat);
1191 if (cb->ashmemBasePid != getpid() || !cb->ashmemBase) {
1198 if (cb->canBePosted()) {
1199 cpu_addr = (uint8_t *)(cb->ashmemBase + sizeof(int));
1202 cpu_addr = (uint8_t *)(cb->ashmemBase);
1214 switch (cb->format) {
1216 yStride = cb->width;
1217 cStride = cb->width;
1219 vOffset = yStride * cb->height;
1226 yStride = (cb->width + (align -1)) & ~(align-1);
1229 cSize = cStride * cb->height/2;
1230 vOffset = yStride * cb->height;
1236 yStride = cb->width;
1239 cSize = cStride * cb->height/2;
1240 uOffset = yStride * cb->height;
1246 cb->format);
1251 ycbcr->cb = cpu_addr + uOffset;
1263 cb->lockedLeft = l;
1264 cb->lockedTop = t;
1265 cb->lockedWidth = w;
1266 cb->lockedHeight = h;
1268 DD("gralloc_lock_ycbcr success. usage: %x, ycbcr.y: %p, .cb: %p, .cr: %p, "
1270 ycbcr->y, ycbcr->cb, ycbcr->cr, ycbcr->ystride, ycbcr->cstride,