Commit Graph

926 Commits

Author SHA1 Message Date
Vladimir Chtchetkine
95e167dc3c Merge "Implement "takePicture"" 2011-09-16 06:07:07 -07:00
Vladimir Chtchetkine
2a532ee388 Implement "takePicture"
With this CL the camera emulator is capable of taking pictures

Change-Id: I29feea0c75a78c619aaf854a5665a24afb507ba4
2011-09-15 18:24:32 -07:00
Vladimir Chtchetkine
d9d6c74b45 Merge "Separate actual camera device start and frame delivery" 2011-09-15 05:58:18 -07:00
David 'Digit' Turner
b13cf4ac31 emulator: opengl: Fix the Windows SDK build
Change-Id: I97be6f81af321f75ff5d43b258387fdc039f0210
2011-09-15 12:14:31 +02:00
Vladimir Chtchetkine
49842cee05 Separate actual camera device start and frame delivery
These two tasks (starting the camera device, and starting working thread that pulls frames
from the started camera device) should be clearly separated, and should not be combined in
one method (as it was with the 'startCapturing' method).

Change-Id: I779bee924d99d9a87257c6b76791545b76795e72
2011-09-14 18:35:48 -07:00
Vladimir Chtchetkine
ba78a2f1d3 Fix locking issues in the callback notifier
Holding an object lock while macking the callbacks cause deadlocks
due to reentrance to the callabck notifier.

Change-Id: I5f2780989798ebf5c5d7aab34ac233bb5952079d
2011-09-14 14:24:03 -07:00
Vladimir Chtchetkine
4756fada1a Fix typos introduced during style adjustment
Change-Id: Ia9ca4849d4a410aea9d49d2c6246d36c4c7fc8f1
2011-09-14 13:56:48 -07:00
Vladimir Chtchetkine
4d47360672 Fix capture stopping
When stopping the camera, the working thread should be stopped before sending
"stop" query to the emulator: we don't want "frame" queries to be floating around
while we're in the process of stopping the camera.

Change-Id: I16dc56ca1c2e304a07a074302001d2e27100f2ac
2011-09-14 07:06:23 -07:00
Vladimir Chtchetkine
16232484c7 Fix build
Change-Id: Ifb5dd0b11bd616ef5a5a1e79b510b00f1d55672a
2011-09-13 16:02:51 -07:00
Vladimir Chtchetkine
5467be2eef Refactored emulated camera HAL to comply with code style
Change-Id: If57b536ae6b1f9bad4213630488591a3b3cc9fdd
2011-09-13 14:35:25 -07:00
Vladimir Chtchetkine
492332c295 Merge "Implements connection with the emulator" 2011-09-13 09:45:09 -07:00
Vladimir Chtchetkine
33bda47528 Implements connection with the emulator
Change-Id: Ie3910a98e927f7b8ea556c403f8ced27e06bcdec
2011-09-13 09:44:32 -07:00
David 'Digit' Turner
0db6e8dd27 Merge "emulator: opengl: Support named pipes on Win32" 2011-09-13 07:32:29 -07:00
David 'Digit' Turner
b065016640 Merge "emulator: opengl: Add support for unix sockets." 2011-09-13 07:02:38 -07:00
David 'Digit' Turner
bde30e7480 Merge "emulator: opengl: re-enable gralloc builds" 2011-09-13 06:20:29 -07:00
David 'Digit' Turner
3abd13d4d6 emulator: opengl: Support named pipes on Win32
This patch adds support for Win32 named pipes for the communication
channel between the Opengl renderer library and its clients.

Named pipes should be much faster than local TCP sockets on this
platform. Note that by default, TCP sockets are still used. The
emulator needs to call setStreamMode(STREAM_MODE_PIPE) to be able
to use these.

Change-Id: I86d36624cf2b7fdd50f41e1e43c908348dca4657
2011-09-13 14:04:49 +02:00
David 'Digit' Turner
3d76ec1e3c emulator: opengl: Add support for unix sockets.
This patch allows the OpenGLES rendering library to use Unix
sockets instead of TCP ones when communicating with its clients.
On certain benchmarks (e.g. 0xBench teapot), this provides a
noticeable improvement (x1.05 fps) without any other changes.

On practice, Unix sockets are faster than TCP sockets, even
local ones. Also, this introduces a moderate amount of
abstraction that will allow us to use Win32 named pipes
on Windows (where TCP sockets are much slower than they
are on Unix).

Note that by default, TCP streams are still used.
The client (emulator) must call the new API 'setStreamMode'
to change it to STREAM_MODE_UNIX between 'initLibrary' and
'startOpenglRenderer' calls.

+ Adjust callers / user appropriately.

Change-Id: I4105bbf07541f3146b50a58d1a5b51e8cf044fab
2011-09-13 14:03:32 +02:00
David 'Digit' Turner
3598af3850 emulator: opengl: add missing pthread_mutex_destroy
Change-Id: Ib6be00619e06f5ff492a080d1feb2954b626fa26
2011-09-13 14:02:37 +02:00
David 'Digit' Turner
c308bfc05f emulator: opengl: re-enable gralloc builds
This re-enables the build of the gralloc GLES emulation library.

This is only for experimentation / debugging purpose. GLES emulation
is still disabled by default in the emulator. Even if you force-enable
it by using the '-gpu on' flag, this module will not properly yet
and nothing will be displayed.

Change-Id: I8f0ca8805ed99037b011365d08507ca08bff5e75
2011-09-13 13:59:53 +02:00
Vladimir Chtchetkine
b97c2f0b59 Fake camera implementation
The code submitted here builds a camera.goldfish.so module that encapsulates a camera HAL.

The major components of the camera HAL implementation are:
* Generic HAL module implemented in emulated_camera_hal.cpp There is nothing much
  to it: just exporting the required HAL header.
* EmulatedCameraFactory class that manages emulated cameras, and provides handling for
  camera_module_methods_ methods. There is only one object of this class, that is statically
  instantiated when camera.goldfish.so module is loaded.
* EmulatedCamera class that implements camera_device_ops_t API. Objects of this class are
  instantiated during EmulatedCameraFactory construction, and they interact with objects
  of EmulatedCameraDevice class to get frames.
* EmulatedCameraDevice class encapsulates an actual camera device. Objects of this class
  are contained in EmulatedCameraDevice objects, and interact with them as required by the
  API.

The fake camera implementation is shared between EmulatedFakeCamera, and EmulatedFakeCameraDevice
classes. They are pretty light. In fact, EmulatedFakeCamera is nothing more than just a
placeholder for EmulatedFakeCameraDevice instance, and EmulatedFakeCameraDevice does nothing
more, than just drawing a checker board with a bouncing square.

Other components / routines are minor: helpers, wrappers, etc. The code is heavily commented,
so there will be plenty of explanations between the lines.

Change-Id: I4463e14c255c6e3b1dcca17bed5f4efde32d9879
2011-09-12 08:37:48 -07:00
David 'Digit' Turner
1cb2c5455c emulator: opengl: Fix egl.cfg tsdefinition
This fixes the definition of the emulator-specific egl.cfg file
used to indicate to our EGL system library which support modules
are available in the emulator.

We need to list two modules here:

  'emulation' corresponding to GPU emulation
  'android' corresponding to the software renderer

The indices before each name correspond to the 'display' and 'impl'
numbers that are expected by frameworks/base/opengl/libs/EGL/Loader.cpp

In a nutshell, 'display' should always be 0, and 'impl' should be 0
for the software renderer, and 1 for a hardware-based one. See the code
under framewors/base/opengl/libs/EGL/egl.cpp for mode details.

Change-Id: I52c898759200c2dfba9049ed00b31b18e8c37f69
2011-09-02 15:26:14 +02:00
David 'Digit' Turner
1479a6cb84 am 7cd5aeb7: am dda2e51a: am 6ba16ba7: Merge "emulator: opengl: add initLibrary function to render library"
* commit '7cd5aeb7c7a109712a660c89d50fb67d35471081':
  emulator: opengl: add initLibrary function to render library
2011-08-30 09:50:49 -07:00
David 'Digit' Turner
b61218ba1b am 1ff9d194: am b6114c7b: am 7cb797f1: Merge "emulator: opengl: use bilinear filtering"
* commit '1ff9d194e3f252a03555edd90702a368a10e50cc':
  emulator: opengl: use bilinear filtering
2011-08-30 09:50:46 -07:00
David 'Digit' Turner
7cd5aeb7c7 am dda2e51a: am 6ba16ba7: Merge "emulator: opengl: add initLibrary function to render library"
* commit 'dda2e51a15ddfc44b34ec3c35e68f3bc1cfb5786':
  emulator: opengl: add initLibrary function to render library
2011-08-29 18:01:01 -07:00
David 'Digit' Turner
1ff9d194e3 am b6114c7b: am 7cb797f1: Merge "emulator: opengl: use bilinear filtering"
* commit 'b6114c7b66744729b8e0e9142e8b07eba41637d5':
  emulator: opengl: use bilinear filtering
2011-08-29 18:00:56 -07:00
David 'Digit' Turner
34fa5630b7 emulator: opengl: Fix the emulator-specific builds.
The gralloc.goldfish module cannot build in master because
the gralloc interface evolved considerably since gingerbread
(which the current code is based on).

For now, disable it completely, this will make it impossible
to test GPU emulation in the internal master tree for now.

We'll have to port this module to the new world-order to solve
this.

Change-Id: I864217f9c41fd1234f0df497005499800af879e5
2011-08-29 22:20:37 +02:00
David 'Digit' Turner
ec4c093361 am 84e83659: am 13cd2cd4: am 56eca4e0: Merge "emulator: opengl: fix the build"
* commit '84e836590e5fb655c7fd1f49613a4ae9cd2fa963':
  emulator: opengl: fix the build
2011-08-29 11:05:17 -07:00
David 'Digit' Turner
8ef53760d5 am 2276a468: am 846dd223: am dbe3b024: Merge "emulator: opengl: fallback gralloc module"
* commit '2276a468202750d743848810675e62a63ace67bb':
  emulator: opengl: fallback gralloc module
2011-08-29 11:05:10 -07:00
David 'Digit' Turner
c6d73d7af4 am d960239d: am 43946da5: am 7f45e7c1: Merge "emulator: oops, really fix the build"
* commit 'd960239de6371c2368792c6cc75de6d59abe172c':
  emulator: oops, really fix the build
2011-08-29 11:05:01 -07:00
David 'Digit' Turner
bce8ca33d0 am fec153a7: am 9765cb8a: am 2a59fa7d: Merge "emulator: fix the build"
* commit 'fec153a765edf051f3b97610c748d1ab9526cbfa':
  emulator: fix the build
2011-08-29 11:04:57 -07:00
David 'Digit' Turner
6ba16ba752 Merge "emulator: opengl: add initLibrary function to render library" 2011-08-29 08:01:42 -07:00
David 'Digit' Turner
5d1e8b2f28 emulator: opengl: add initLibrary function to render library
This adds an initLibrary() function to libOpenglRender.

It will be used by the emulator to fallback on software rendering
if the library cannot be initialized properly, e.g. if it is not
possible to load the host EGL/GLES libraries.

Change-Id: I41e8ad73a315166e4a15cbee1db72c2552370f46
2011-08-29 16:57:38 +02:00
David 'Digit' Turner
7cb797f1fd Merge "emulator: opengl: use bilinear filtering" 2011-08-29 06:55:32 -07:00
David 'Digit' Turner
84e836590e am 13cd2cd4: am 56eca4e0: Merge "emulator: opengl: fix the build"
* commit '13cd2cd4f57ce3e005f8d5c150c0cd3c4daf386d':
  emulator: opengl: fix the build
2011-08-26 12:12:56 -07:00
David 'Digit' Turner
2276a46820 am 846dd223: am dbe3b024: Merge "emulator: opengl: fallback gralloc module"
* commit '846dd22375f3db7308fa676e9730757ec1e6c028':
  emulator: opengl: fallback gralloc module
2011-08-26 12:12:52 -07:00
David 'Digit' Turner
2dfb7b549f emulator: opengl: fix the build
Change-Id: Ia20d15b63a059ed5d86c9087b827bdfa32c41c86
2011-08-26 18:17:13 +02:00
David 'Digit' Turner
91572d15eb emulator: opengl: use bilinear filtering
This patch changes the filter used to scale the GL window
in the rendering library. Instead of nearest-neighbour, use
bi-linear, which will provide for much more pleasant results
when scaling the emulator UI window, or toggling to full-screen
mode.

Change-Id: If2d9e1300fa4878c25e1221eaedb565b9150431a
2011-08-26 17:31:58 +02:00
David 'Digit' Turner
783cc1bb53 emulator: opengl: fallback gralloc module
This patch modifies the gralloc.goldfish module to check
that the emulator does, indeed, support GPU emulation.

If this is not the case, it loads the framebuffer-based fallback
module (gralloc.default) explicitely and uses it instead.

This is necessary because sometimes the emulator will be started
in headless mode in restricted environment, i.e. without access
to the display subsystem or GL libraries, which make GPU emulation
impossible.

We check for ro.kernel.qemu.gles which will be either undefined
or set to 0 if the emulator doesn't support GPU emulation, or 1
otherwise.

Change-Id: Ib6b143e6dcdfb44ff2c5b889138d0fb4118bb461
2011-08-26 17:31:58 +02:00
David 'Digit' Turner
d960239de6 am 43946da5: am 7f45e7c1: Merge "emulator: oops, really fix the build"
* commit '43946da54d3dc8d840c5e39c8eaf2f46ece57518':
  emulator: oops, really fix the build
2011-08-25 14:30:12 -07:00
David 'Digit' Turner
fec153a765 am 9765cb8a: am 2a59fa7d: Merge "emulator: fix the build"
* commit '9765cb8a7f29dacc615d2357d04ee5412c3e888d':
  emulator: fix the build
2011-08-25 14:30:08 -07:00
David 'Digit' Turner
20d5b0a857 emulator: oops, really fix the build
Change-Id: Id8de1b6a069cdc462681cf44bf8ebd84bbd1e6f0
2011-08-25 22:14:29 +02:00
David 'Digit' Turner
8b55909388 emulator: fix the build
Change-Id: Id88f488d441f04b10de3bca8ffe5c37763c4e98e
2011-08-25 22:00:55 +02:00
David 'Digit' Turner
2746a34082 am c0a719b8: am c6623763: am f29ee346: Merge "emulator: opengl: Open libGL.dylib as a framework on Mac"
* commit 'c0a719b864071df069859ef595271020b960a99a':
  emulator: opengl: Open libGL.dylib as a framework on Mac
2011-08-25 05:58:38 -07:00
David 'Digit' Turner
c0a719b864 am c6623763: am f29ee346: Merge "emulator: opengl: Open libGL.dylib as a framework on Mac"
* commit 'c6623763231c35b738863f5429ddf11c1af3a0be':
  emulator: opengl: Open libGL.dylib as a framework on Mac
2011-08-25 05:56:45 -07:00
David 'Digit' Turner
3f88bea9a8 emulator: opengl: Open libGL.dylib as a framework on Mac
This patch modifies GLDispatch.cpp in the translator libraries
to open the Darwin GL library as a framework. Using a hard-coded
system path prevents the requirement to modify LD_LIBRARY_PATH
or DYLD_LIBRARY_PATH to point to the directory that contains the
library.

In this specific case, this is equivalent to

/System/Frameworks/OpenGL.framework/Libraries/libGL.dylib

But is the "kosher" way to open it the library.

Change-Id: Iccd6568d36fc97200617c268f05d7b4ea85f918e
2011-08-25 14:40:43 +02:00
David 'Digit' Turner
58df39a591 am 93ee57e6: am 3490b1c2: am b69f4871: Merge "emulator: opengl: remove debug traces."
* commit '93ee57e6786ff406a01161f7a07d9103d4856e48':
  emulator: opengl: remove debug traces.
2011-08-24 09:27:56 -07:00
David 'Digit' Turner
64483553ef am 614d39c2: am f66bbde9: am 95f517bf: Merge "emulator: opengl: Make host decoder libraries static"
* commit '614d39c2f75db3f25ce55a876948c91591f8bf1d':
  emulator: opengl: Make host decoder libraries static
2011-08-24 09:27:54 -07:00
David 'Digit' Turner
0705808814 am efd0415c: am b492a89f: am 476ff38f: Merge "emulator: opengl: build gralloc driver by default"
* commit 'efd0415cf81ddf8c276af1553ded3756e71c53bf':
  emulator: opengl: build gralloc driver by default
2011-08-24 09:27:51 -07:00
David 'Digit' Turner
4ff832cc41 am e0a093ec: am e526f515: am 6d241caf: Merge "emulator: opengl: support moved shared libraries."
* commit 'e0a093ec5b527b3f5455fc54b59e96bd9cc88188':
  emulator: opengl: support moved shared libraries.
2011-08-24 09:27:49 -07:00
David 'Digit' Turner
9eb39ab27f am 6479d059: am 4a6acc04: am d8079c1e: Merge "emulator: opengl: Avoid conflicts with SDL_CONFIG"
* commit '6479d059feb638a7230379621fdd54b86eee5951':
  emulator: opengl: Avoid conflicts with SDL_CONFIG
2011-08-24 09:27:46 -07:00