MCPcopy Create free account
hub / github.com/bulletphysics/bullet3 / processCamera

Method processCamera

examples/SharedMemory/PhysicsDirect.cpp:514–602  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

512}
513
514bool PhysicsDirect::processCamera(const struct SharedMemoryCommand& orgCommand)
515{
516 SharedMemoryCommand command = orgCommand;
517
518 const SharedMemoryStatus& serverCmd = m_data->m_serverStatus;
519
520 do
521 {
522 bool hasStatus = m_data->m_commandProcessor->processCommand(command, m_data->m_serverStatus, &m_data->m_bulletStreamDataServerToClient[0], SHARED_MEMORY_MAX_STREAM_CHUNK_SIZE);
523
524 b3Clock clock;
525 double startTime = clock.getTimeInSeconds();
526 double timeOutInSeconds = m_data->m_timeOutInSeconds;
527
528 while ((!hasStatus) && (clock.getTimeInSeconds() - startTime < timeOutInSeconds))
529 {
530 const SharedMemoryStatus* stat = processServerStatus();
531 if (stat)
532 {
533 hasStatus = true;
534 }
535 }
536
537 m_data->m_hasStatus = hasStatus;
538 if (hasStatus)
539 {
540 btAssert(m_data->m_serverStatus.m_type == CMD_CAMERA_IMAGE_COMPLETED);
541
542 if (m_data->m_verboseOutput)
543 {
544 b3Printf("Camera image OK\n");
545 }
546
547 int numBytesPerPixel = 4; //RGBA
548 int numTotalPixels = serverCmd.m_sendPixelDataArguments.m_startingPixelIndex +
549 serverCmd.m_sendPixelDataArguments.m_numPixelsCopied +
550 serverCmd.m_sendPixelDataArguments.m_numRemainingPixels;
551
552 m_data->m_cachedCameraPixelsWidth = 0;
553 m_data->m_cachedCameraPixelsHeight = 0;
554
555 int numPixels = serverCmd.m_sendPixelDataArguments.m_imageWidth * serverCmd.m_sendPixelDataArguments.m_imageHeight;
556
557 m_data->m_cachedCameraPixelsRGBA.reserve(numPixels * numBytesPerPixel);
558 m_data->m_cachedCameraDepthBuffer.resize(numTotalPixels);
559 m_data->m_cachedSegmentationMask.resize(numTotalPixels);
560 m_data->m_cachedCameraPixelsRGBA.resize(numTotalPixels * numBytesPerPixel);
561
562 unsigned char* rgbaPixelsReceived =
563 (unsigned char*)&m_data->m_bulletStreamDataServerToClient[0];
564
565 float* depthBuffer = (float*)&(m_data->m_bulletStreamDataServerToClient[serverCmd.m_sendPixelDataArguments.m_numPixelsCopied * 4]);
566 int* segmentationMaskBuffer = (int*)&(m_data->m_bulletStreamDataServerToClient[serverCmd.m_sendPixelDataArguments.m_numPixelsCopied * 8]);
567
568 // printf("pixel = %d\n", rgbaPixelsReceived[0]);
569
570 for (int i = 0; i < serverCmd.m_sendPixelDataArguments.m_numPixelsCopied; i++)
571 {

Callers

nothing calls this directly

Calls 4

processCommandMethod · 0.45
getTimeInSecondsMethod · 0.45
reserveMethod · 0.45
resizeMethod · 0.45

Tested by

no test coverage detected