John Smith
John Smith

Reputation: 307

SurfaceTexture/Surface mapping with ANativeWindow

Given a GraphicBufferProducer I create a Surface and then retrieve ANativeWindow. Using ANativeWindow_lock I get a pointer to the buffer. Using the buffer, I do a memcpy into the buffer. The problem is that whatever I draw on this buffer is restricted to less than 25% of the screen. Keep in mind that the dimensions of buffer.width and buffer.height are very close to the resolution of the screen itself.

My question is, why does the buffer only cover a small portion of the screen? And how do I make sure it covers most if not all of the screen? For reference here's the code:

ANativeWindow_Buffer buffer;
// window is created from a "new Surface(sp<IGraphicBufferProducer>)"
if (ANativeWindow_lock(window, &buffer, NULL) == 0) {
     // For testing purposes just put grey in the buffer
     memcpy(buffer.bits, 0x99,  buffer.width * buffer.height);
     ANativeWindow_unlockAndPost(window);
}

Upvotes: 0

Views: 1060

Answers (1)

Gabe Sechan
Gabe Sechan

Reputation: 93542

I have a guess, although I've never used an ANativeWindow_Buffer. memcpy copies a certain number of bytes. How many bits per pixel is your image? If the value is greater than 8, you aren't transfering the full buffer. Since its probably 4 bytes per pixel (AARRGGBB), you probably need to multiply that by 4.

Upvotes: 1

Related Questions