Home | History | Annotate | Download | only in gralloc

Lines Matching refs:cb

61 int32_t* getOpenCountPtr(cb_handle_t* cb) {
62 return ((int32_t*)cb->ashmemBase) + 1;
65 uint32_t getAshmemColorOffset(cb_handle_t* cb) {
67 if (cb->canBePosted()) res = sizeof(intptr_t);
272 #define GET_ASHMEM_REGION(cb) \
274 get_mem_region((void*)cb->ashmemBase); \
277 #define PUT_ASHMEM_REGION(cb) \
279 bool SHOULD_UNMAP = put_mem_region((void*)cb->ashmemBase); \
284 #define GET_ASHMEM_REGION(cb) \
285 get_mem_region((void*)cb->ashmemBase); \
287 #define PUT_ASHMEM_REGION(cb) \
288 bool SHOULD_UNMAP = put_mem_region((void*)cb->ashmemBase); \
299 static int map_buffer(cb_handle_t *cb, void **vaddr)
301 if (cb->fd < 0 || cb->ashmemSize <= 0) {
308 void *addr = mmap(0, cb->ashmemSize, PROT_READ | PROT_WRITE,
309 MAP_SHARED, cb->fd, 0);
315 cb->ashmemBase = intptr_t(addr);
316 cb->ashmemBasePid = getpid();
318 cb, cb->ashmemBase, cb->ashmemSize);
345 static void updateHostColorBuffer(cb_handle_t* cb,
350 int bpp = glUtilsPixelBitSize(cb->glFormat, cb->glType) >> 3;
351 int left = doLocked ? cb->lockedLeft : 0;
352 int top = doLocked ? cb->lockedTop : 0;
353 int width = doLocked ? cb->lockedWidth : cb->width;
354 int height = doLocked ? cb->lockedHeight : cb->height;
360 cb->frameworkFormat != HAL_PIXEL_FORMAT_YV12 &&
361 cb->frameworkFormat != HAL_PIXEL_FORMAT_YCbCr_420_888;
375 cb->width,
385 if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YV12) {
389 if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YCbCr_420_888) {
397 rcEnc->rcUpdateColorBufferDMA(rcEnc, cb->hostHandle,
399 cb->glFormat, cb->glType,
403 if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YV12) {
408 if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YCbCr_420_888) {
413 rcEnc->rcUpdateColorBuffer(rcEnc, cb->hostHandle,
415 cb->glFormat, cb->glType, to_send);
635 // AND openCounter for all host cb
685 cb_handle_t *cb = new cb_handle_t(fd, ashmem_size, usage,
696 int err = map_buffer(cb, &vaddr);
699 delete cb;
703 cb->setFd(fd);
706 D("%s: creating goldfish dma region of size %lu (cb fd %d)\n", __FUNCTION__, ashmem_size, cb->fd);
710 cb->goldfish_dma.fd = -1;
713 cb->goldfish_dma.fd = -1;
728 cb->hostHandle = rcEnc->rcCreateColorBufferDMA(rcEnc, w, h, allocFormat, cb->emuFrameworkFormat);
730 cb->hostHandle = rcEnc->rcCreateColorBuffer(rcEnc, w, h, allocFormat);
732 D("Created host ColorBuffer 0x%x\n", cb->hostHandle);
735 if (!cb->hostHandle) {
738 delete cb;
739 ALOGD("%s: failed to create host cb! -EIO", __FUNCTION__);
743 if (isHidlGralloc) { *getOpenCountPtr(cb) = 0; }
751 node->handle = cb;
760 *pHandle = cb;
762 __FUNCTION__, cb->ashmemBase, cb->ashmemSize, cb);
777 cb_handle_t *cb = (cb_handle_t *)handle;
778 if (!cb_handle_t::validate((cb_handle_t*)cb)) {
784 __FUNCTION__, handle, cb->ashmemBase, cb->ashmemSize);
786 if (cb->hostHandle) {
790 if (isHidlGralloc) { openCountPtr = getOpenCountPtr(cb); }
794 D("Closing host ColorBuffer 0x%x\n", cb->hostHandle);
795 rcEnc->rcCloseColorBuffer(rcEnc, cb->hostHandle);
805 if (cb->fd > 0) {
806 if (cb->ashmemSize > 0 && cb->ashmemBase) {
807 D("%s: unmapped %p", __FUNCTION__, cb->ashmemBase);
808 munmap((void *)cb->ashmemBase, cb->ashmemSize);
809 put_gralloc_dmaregion(cb->ashmemSize);
811 close(cb->fd);
819 while( n && n->handle != cb ) {
838 delete cb;
873 cb_handle_t *cb = (cb_handle_t *)buffer;
875 if (!fbdev || !cb_handle_t::validate(cb) || !cb->canBePosted()) {
883 intptr_t *postCountPtr = (intptr_t *)cb->ashmemBase;
891 rcEnc->rcFBPost(rcEnc, cb->hostHandle);
964 cb_handle_t *cb = (cb_handle_t *)handle;
966 if (!gr || !cb_handle_t::validate(cb)) {
967 ERR("gralloc_register_buffer(%p): invalid buffer", cb);
972 handle, cb->width, cb->height, cb->format, cb->frameworkFormat);
974 if (cb->hostHandle != 0) {
976 D("Opening host ColorBuffer 0x%x\n", cb->hostHandle);
977 rcEnc->rcOpenColorBuffer2(rcEnc, cb->hostHandle);
984 if (cb->ashmemSize > 0 && cb->mappedPid != getpid()) {
986 int err = map_buffer(cb, &vaddr);
988 ERR("gralloc_register_buffer(%p): map failed: %s", cb, strerror(-err));
991 cb->mappedPid = getpid();
994 int32_t* openCountPtr = getOpenCountPtr(cb);
1001 gralloc_dmaregion_register_ashmem(cb->ashmemSize);
1006 if (cb->ashmemSize > 0) {
1007 GET_ASHMEM_REGION(cb);
1022 cb_handle_t *cb = (cb_handle_t *)handle;
1024 if (!gr || !cb_handle_t::validate(cb)) {
1025 ERR("gralloc_unregister_buffer(%p): invalid buffer", cb);
1030 if (cb->hostHandle) {
1031 D("Closing host ColorBuffer 0x%x\n", cb->hostHandle);
1033 rcEnc->rcCloseColorBuffer(rcEnc, cb->hostHandle);
1038 if (cb->ashmemSize > 0 && cb->mappedPid == getpid()) {
1039 int32_t* openCountPtr = getOpenCountPtr(cb);
1042 rcEnc->rcCloseColorBuffer(rcEnc, cb->hostHandle);
1053 if (cbcb->mappedPid == getpid()) {
1055 PUT_ASHMEM_REGION(cb);
1056 put_gralloc_dmaregion(cb->ashmemSize);
1063 int err = munmap((void *)cb->ashmemBase, cb->ashmemSize);
1065 ERR("gralloc_unregister_buffer(%p): unmap failed", cb);
1068 cb->ashmemBase = 0;
1069 cb->mappedPid = 0;
1074 D("gralloc_unregister_buffer(%p) done\n", cb);
1090 cb_handle_t *cb = (cb_handle_t *)handle;
1092 if (!gr || !cb_handle_t::validate(cb)) {
1119 bool sw_read_allowed = (0 != (cb->usage & GRALLOC_USAGE_SW_READ_MASK));
1126 sw_read_allowed = sw_read_allowed || (cb->usage & GRALLOC_USAGE_HW_VIDEO_ENCODER);
1129 bool sw_write_allowed = (0 != (cb->usage & GRALLOC_USAGE_SW_WRITE_MASK));
1137 ALOGE("gralloc_lock usage mismatch usage=0x%x cb->usage=0x%x\n", usage,
1138 cb->usage);
1150 if (cb->canBePosted() || sw_read || sw_write ||
1153 if (cb->ashmemBasePid != getpid() || !cb->ashmemBase) {
1157 cpu_addr = (void *)(cb->ashmemBase + getAshmemColorOffset(cb));
1160 if (cb->hostHandle) {
1167 int hostSyncStatus = rcEnc->rcColorBufferCacheFlush(rcEnc, cb->hostHandle,
1181 if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YV12 ||
1182 cb->frameworkFormat == HAL_PIXEL_FORMAT_YCbCr_420_888) {
1184 tmpBuf = new char[cb->width * cb->height * 3];
1188 cb->width, cb->height, cb->ashmemBase, cb->ashmemSize);
1189 rcEnc->rcReadColorBuffer(rcEnc, cb->hostHandle,
1190 0, 0, cb->width, cb->height, cb->glFormat, cb->glType, rgb_addr);
1192 if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YV12) {
1193 rgb888_to_yv12((char*)cpu_addr, tmpBuf, cb->width, cb->height, l, t, l+w-1, t+h-1);
1194 } else if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YCbCr_420_888) {
1195 rgb888_to_yuv420p((char*)cpu_addr, tmpBuf, cb->width, cb->height, l, t, l+w-1, t+h-1);
1213 cb->lockedLeft = l;
1214 cb->lockedTop = t;
1215 cb->lockedWidth = w;
1216 cb->lockedHeight = h;
1220 vaddr, vaddr ? *vaddr : 0, usage, cpu_addr, cb->ashmemBase);
1233 cb_handle_t *cb = (cb_handle_t *)handle;
1235 if (!gr || !cb_handle_t::validate(cb)) {
1236 ALOGD("%s: invalid gr or cb handle. -EINVAL", __FUNCTION__);
1244 if (cb->hostHandle) {
1249 void *cpu_addr = (void *)(cb->ashmemBase + getAshmemColorOffset(cb));
1252 if (cb->lockedWidth < cb->width || cb->lockedHeight < cb->height) {
1253 updateHostColorBuffer(cb, true, rgb_addr);
1256 updateHostColorBuffer(cb, false, rgb_addr);
1262 cb->lockedWidth = cb->lockedHeight = 0;
1284 cb_handle_t *cb = (cb_handle_t *)handle;
1285 if (!gr || !cb_handle_t::validate(cb)) {
1290 if (cb->frameworkFormat != HAL_PIXEL_FORMAT_YV12 &&
1291 cb->frameworkFormat != HAL_PIXEL_FORMAT_YCbCr_420_888) {
1295 cb->frameworkFormat);
1300 if (cb->ashmemBasePid != getpid() || !cb->ashmemBase) {
1306 cpu_addr = (uint8_t *)(cb->ashmemBase) + getAshmemColorOffset(cb);
1317 switch (cb->format) {
1319 yStride = cb->width;
1320 cStride = cb->width;
1322 vOffset = yStride * cb->height;
1329 yStride = (cb->width + (align -1)) & ~(align-1);
1332 cSize = cStride * cb->height/2;
1333 vOffset = yStride * cb->height;
1338 yStride = cb->width;
1339 cStride = cb->width;
1341 vOffset = yStride * cb->height;
1347 cb->format);
1352 ycbcr->cb = cpu_addr + uOffset;
1364 cb->lockedLeft = l;
1365 cb->lockedTop = t;
1366 cb->lockedWidth = w;
1367 cb->lockedHeight = h;
1369 DD("gralloc_lock_ycbcr success. usage: %x, ycbcr.y: %p, .cb: %p, .cr: %p, "
1371 ycbcr->y, ycbcr->cb, ycbcr->cr, ycbcr->ystride, ycbcr->cstride,
1372 ycbcr->chroma_step, cb->ashmemBase);