Commit Graph

236 Commits

Author SHA1 Message Date
Mathias Agopian
d606de6bb6 Refactor some code in surfaceflinger in preparation of upcoming changes
the new TextureMagager class now handle texture creation and upload
as well as EGL image creation and binding to GraphicBuffers. This is
used indirectly by Layer and directly by LayerBuffer

the new BufferManager class handles the set of buffers used for a
Layer (Surface), it abstracts how many buffer there is as well as
the use of EGLimage vs. regular texture ops (glTexImage2D).

Change-Id: I2da1ddcf27758e6731400f6cc4e20bef35c0a39a
2010-05-12 17:26:22 -07:00
Mathias Agopian
89141f9492 remove the "memcpy" hack
this hack was used for gpus that don't support cached buffers
for s/w clients. currently we have no gpu with this issue.
this removes quite a bit of complexity.

Change-Id: I72564669f124f92805030e61983711f61c76b6d9
2010-05-12 15:44:26 -07:00
Mathias Agopian
0c7af77450 am 56aed6bd: am c69775d6: Merge "fix [2664345] Flash: Bad flicker at the end of a pinch zoom." into froyo
Merge commit '56aed6bde0c52658d2cb1207c0cfe8ba0a764c59' into kraken

* commit '56aed6bde0c52658d2cb1207c0cfe8ba0a764c59':
  fix [2664345] Flash: Bad flicker at the end of a pinch zoom.
2010-05-10 09:49:19 -07:00
Mathias Agopian
179169e88e fix [2664345] Flash: Bad flicker at the end of a pinch zoom.
the window manger puts SurfaceViews up before they have been
rendered into, because of that surfaceflinger doesn't have
anything ready to draw for that surface when an udpate occurs
and responds by filling the surface with black.
With this fix, we only fill those areas of the framebuffer
that would otherwise be undefined (no content at all).

in the Flash case, the "flash" window is not drawn at all
until it has some content, instead the underlaying browser
window is shown.

Change-Id: Ifb610f7f8c27b88edf83e09adc4803fc295c15a1
2010-05-06 20:21:45 -07:00
Mathias Agopian
1b5e1021b8 more surfaceflinger cleanups
get rid of the "fake rtti" code, and use polymorphism instead.
also simplify how we log SF's state (using polymorphism)

Change-Id: I2bae7c98de4dd207a3e2b00083fa3fde7c467922
2010-04-21 22:28:20 -07:00
Mathias Agopian
245e4d78c5 better fix for [2420565] Surface.lockCanvas() updates the dirty region too often
Change-Id: I83438b40effd21538f1c74396dc665254b9d5ab6
2010-04-21 22:25:35 -07:00
Mathias Agopian
11777e9a6e DO NOT MERGE fix [2557396] Adreno200: glDrawTexi() doesn't work with height <= 16
don't use glDrawTexi() anymore

Change-Id: If71334de39114b0edce7771366f8d8dc26f6911e
2010-04-20 21:55:40 -07:00
Mathias Agopian
78fd5010a8 clean-up surfaceflinger a bit
get rid of the glDrawTexi path and use floating points instead of fixed point maths

Change-Id: I3aa9ce2dc082f702160e605a16ba5fe987cdf087
2010-04-20 15:58:36 -07:00
Mathias Agopian
ddf1dd1353 am e7d5a2f9: am 45423465: Merge "fix [2594950] Flash: Zooming in on some content crashes the Nexus One and causes it to reboot (runtime restart)" into froyo
Merge commit 'e7d5a2f9ae47d8ea8face3f1e451314ed36f4026' into kraken

* commit 'e7d5a2f9ae47d8ea8face3f1e451314ed36f4026':
  fix [2594950] Flash: Zooming in on some content crashes the Nexus One and causes it to reboot (runtime restart)
2010-04-14 18:25:21 -07:00
Mathias Agopian
ca99fb8f65 fix [2594950] Flash: Zooming in on some content crashes the Nexus One and causes it to reboot (runtime restart)
We now limit the size of the surface to the maximum size supported by the GPU.
On Nexus One this will 2048 -- it could be different on other devices.
Surface creation fails if the limit is exceeded.

Change-Id: I9ecfc2e9c58c9e283782b61ebfc6b590f71df785
2010-04-14 16:43:44 -07:00
Mathias Agopian
8f10540cd5 Make pixels prettier.
Change-Id: If3b0774b70cbe943894c15ffa1da111ad887010f
2010-04-05 18:12:27 -07:00
Mathias Agopian
ab02873e8f fix [2511580] Window poop on screen - drop down list left some residual when it resized
Change-Id: Ib9a3622e7a568ba26717a93b5bfa4a191651f4d0
2010-03-16 17:54:27 -07:00
Mathias Agopian
d343e3d5e3 fix [2515291] Native crash and runtime restart while trying to preview captured picture on Sapphire
if a buffer couldn't be allocated because of an OOM, SF could, in some case dereference
a null pointer.

Change-Id: I5321248c38a21e56d5278b6aada2694e64451378
2010-03-15 18:15:20 -07:00
Mathias Agopian
d129659347 fix [2483456] Video orientation is wrong on Droid for some videos
Change-Id: I450191f1335f57bffc51aff3e27295395847dbc0
2010-03-11 12:55:39 -08:00
Mathias Agopian
948d69fca4 improve SF logging/debugging a little bit
Change-Id: I6a57f89c25defc293fd748cc1fbd710031c02ec2
2010-03-08 19:30:56 -08:00
Mathias Agopian
f23a5e052e Merge "fixes for [2474091] Saw Poor behaviour playing a video." 2010-03-08 15:35:44 -08:00
Mathias Agopian
fcfeb4b597 fixes for [2474091] Saw Poor behaviour playing a video.
- fix a bug when hacking video buffers into gralloc buffers
 where the buffer size was incorrect this was causing the
 "direct-form-texture" mode to fail

- also when the above fails, make sure to revert to the
 "mdp copy mode" before going to "slow mode"

- finally disable completely the "direct-from-texture" mode
 for now. It cannot work because the allocated buffers can't
 respect the GPU constraints (alignment and such). We'll
 have to find a solution for that.
2010-03-08 11:14:20 -08:00
Dima Zavin
4fe6ac33d1 surfaceflinger: remove un-cached buffers hack for Adreno
Change-Id: I5ae4e74bfa3e25b55be2cddf7b3c51368a140ab9
Signed-off-by: Dima Zavin <dima@android.com>
2010-03-02 16:44:46 -08:00
Mathias Agopian
064e1e672e fix [2425395] portrait UI briefly shows in landscape
the "freeze" timeout was not initialized properly which caused it
to kick-in immediately instead of after 5s
2010-03-01 18:36:14 -08:00
Mathias Agopian
285dbde2e0 Added a name to Surface created by SurfaceFlinger
Updated the window manager to use this new facility.
Surfaces name are now printed by "dumpsys".
2010-03-01 18:34:50 -08:00
Mathias Agopian
45853c9759 to help debugging [2461567] Home screen redraw messed up
log SF's idea of the front buffer in dumpsys.
2010-02-26 18:59:23 -08:00
Mathias Agopian
eda65400f5 remove a dependency of surfaceflinger on libskia
libskia was only used for a small part of SkTransform. We now implement
Transform is surfaceflinger directly.
2010-02-22 17:30:40 -08:00
Mathias Agopian
ca6fab2b53 Initialize layer position 2010-02-19 17:51:58 -08:00
Mathias Agopian
54ed4f6282 get rid off the YUV formats at the libui layer 2010-02-16 17:33:37 -08:00
Mathias Agopian
c9e4a12546 minor cleanup. 2010-02-12 18:50:28 -08:00
Mathias Agopian
9cce325fae split libsurfaceflinger_client and libcamera_client out of libui 2010-02-11 13:16:22 -08:00
Mathias Agopian
2b92d89e23 Add support for physically rotated displays
This feature is currently controled by a system property.
"ro.sf.hwrotation" can be set to either 90 or 270. It'll cause
SF to rotate the screen by 90 and 270 degres respectively.

That is, if the driver reports 800x480 for instance, and
ro.sf.hwrotation is set to 90, applications will "see" a
480x800 display and will run in portrait.

This is implemented by introducing an extra "display"
transformation in the GraphicPlane.
2010-02-08 15:49:35 -08:00
Mathias Agopian
a7e380396e Add support for direct EGLImageKHR use with pushbuffer API
We now always first try to use the EGLImageKHR directly before
making a copy with copybit. The copy may be needed when
EGLImage doesn't support the requested format, which is
currently the case with YUV.
2010-02-04 17:13:06 -08:00
Chih-Chung Chang
5994a330ac Add support for 180/270 degrees rotation. 2010-01-22 16:30:39 -08:00
Chih-Chung Chang
52e7200b6e Add an orientation parameter for overlay, so we can do camera preview in portrait mode. 2010-01-21 20:20:08 -08:00
Mathias Agopian
edfd97c0f2 fix [2324665] texture leak in surfaceflinger when using camera 2010-01-21 16:29:34 -08:00
Mathias Agopian
8c3b597aa7 fix a texture leak introduced recently.
create the texture name once and for all for a given BufferSource
and make sure to recreate it when we're forced to delete the texture.
2010-01-21 16:27:30 -08:00
Mathias Agopian
5fdea8d5b0 fix [2363362] [Sapphire] Corrupted raw picture displayed during snapshot
handled all cases where the scale factor of a video is out of bounds of
supported scale factors in copybit.
2010-01-20 14:31:53 -08:00
Mathias Agopian
ecc99c003b part of fix for [2363362] [Sapphire] Corrupted raw picture displayed during snapshot
make sure to fallback properly to software when copybit operation fails.
with this change, the preview image will at least be displayed in b&w
(since GL doesn't support the yuv format). This would also fix
2363506, but that one is now handled more cleanly.
2010-01-20 14:07:44 -08:00
Mathias Agopian
1faed66086 fix [2363506] [Sapphire] Video playback broken
don't try to use copybit for incompatible buffers
2010-01-20 13:24:14 -08:00
Mathias Agopian
f5430db059 fix [2269582] [TOP-10][Passion_1506][APT:Camera]Sometimes camera preview screen is truncated after launching and back to home screen by home key repeatedly
When a surface is removed from the screen while it holds a "freeze lock", the
release of that lock happens in the destructor as a "safety net". However, it
doesn't trigger an update at that point.

Make sure that "freeze locks" are released from the transaction at the point
a surface is removed from the screen (if it's not on screen, it shouldn't
prevent the screen to redraw, and therefore cannot hold a freeze lock).
The refresh corresponding to that transaction will pick it up as soon as possible.
2009-12-11 00:56:10 -08:00
Mathias Agopian
8f03b47432 fix [2319255] crash in openGL : from the media recorder stress test.
never call eglCreateImageKHR() with a NULL native buffer, which can
happen in OOM conditions.
2009-12-10 15:59:08 -08:00
Mathias Agopian
c5e181f8b3 fix [2315900] Monochrome camera preview screen after launching camera
this was introduced by a recent change. when we try to figure out the size of
the yuv->rgb temporary buffer, the output resolution has not been computed yet
and an invalid buffer size is used. most of the time the allocation fails
and the system reverts to "standard" GL will uses onle the Y plane.

the allocation of the temporary buffer is moved to onDraw(), the first
time it is called, by that time, the window is positioned properly.
2009-12-09 15:26:29 -08:00
Mathias Agopian
69ff5de1b7 improve video performance to minimize the tearing effect seen in 720p movies
always rescale videos to their target size using copybit during yuv->rgb
conversion. this improves performance of the GPU pass and doesn't require
linear filtering to be enabled. Also always use 16-bits buffers.

the average processing time for 720p dropped from ~50ms to ~30ms
2009-12-08 19:29:38 -08:00
Dima Zavin
a9ec9be195 Revert "When using MDP, we needed to use a texture for diming."
This reverts commit bf0c320afbf6bf2441916755ecb443b64afbe73f.
2009-12-07 00:17:06 -08:00
Erik Gilling
1bd48776eb surfaceflinger: remove un-cached buffer hack for SGX
Signed-off-by: Erik Gilling <konkers@android.com>
2009-12-03 14:09:31 -08:00
Mathias Agopian
3e8a81e354 fix [2291418] Camera preview cannot work in Emulator
The image buffer used by glTexImage2d() would be uninitialized when no copybit engine
can be found.
We now always initialize images, since the abscence of copybit is not necessarily fatal.
2009-12-02 16:23:11 -08:00
Mathias Agopian
0408772e34 fix [2297155] SurfaceFlinger's freeze-timeout doesn't work
There was bug in the logic that calculated the relative timeout, the start time was
reset each time an event was received, which caused the timeout to never occur if
an application was constantly redrawing.

Now we always check for a timeout when we come back from the waitEvent() and
process the "anti-freeze" if needed, regardless of whether an event was received.
2009-12-01 17:23:28 -08:00
Mathias Agopian
c61de17f14 fixed [2260070] display stopped updating
always check that the visible region isn't empty after all visible regions are recomputed
clear he freeze-lock if it is.
2009-11-30 11:15:41 -08:00
Mathias Agopian
2f0a0a58f6 When using MDP, we needed to use a texture for diming. 2009-11-23 22:41:36 -08:00
Mathias Agopian
60f5d3694b backout a workaround that is not needed anymore
we had to add a call to glFinish() before glReadPixels() because of a bug in the GL ES
driver of a certain device. This is not needed anymore.
2009-11-19 15:52:28 -08:00
Mathias Agopian
713795a2e0 fix [2269022] The raw picture displayed post shutter seems to have low-resolution
Make sure to always enable linear filtering in LayerBuffer. This change doesn't affect
devices using overlays.
2009-11-19 14:46:26 -08:00
Mathias Agopian
9e911efc10 fix [2262591] Junk on screen in ERD46
since we're using the GPU for composition, don't use a texture for dimming,
instead simply use an alpha-blended quad.

also workaround what looks like a GL driver bug by calling glFinish() before
glReadPixels().
2009-11-16 14:55:36 -08:00
Mathias Agopian
dcaf29af10 addresses several bugs: 2206097, 2166583, 2261119, 2216759
2206097: Broken suggestions while composing message
2166583: Color artifacts with MDP dithering
2261119: Passion transition animations are rough
2216759: Screen flicker when dropdown list in background window shows or hides

This is part of enabling GPU composition instead of using the MDP. This change
is dependent on another change in the vendor project.

Specifically this change disables the use of EGLImageKHR for s/w buffers
for cache coherency reasons. memcpy is used instead.
2009-11-13 18:54:14 -08:00
Mathias Agopian
bbc21b01cf fix [2143798] Need to figure out how to do video on Passion w/ GPU
This builds on the EGLImage solution. We simply use copybit to convert from the
YUV frame into an EGLImage created for that purpose and proceed with the
regular EGLImage code.
We need to do this because "regular" GL doesn't support YUV textures.

We could improve upon this by detecting exacly what the GL supports and bypass
this extra step if not required, but we'll do this later if needed.
2009-11-11 16:44:43 -08:00