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
Holding an object lock while macking the callbacks cause deadlocks
due to reentrance to the callabck notifier.
Change-Id: I5f2780989798ebf5c5d7aab34ac233bb5952079d
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
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
See hardware/libhardware/include/hardware/qemu_pipe.h for the API
implemented by the library. It enables very fast reads/writes between
the guest system and specific emulator services.
Define BUILD_LIBQEMU_TESTS=true in your environment to build the
test programs (a simple host ping-pong server, and a benchmark
guest program).
You can invoke them with:
1/ Testing TCP pipes:
host: test-libqemu-1 -tcp 8012
guest: test-libqemu-2 -pipe tcp:8012
Alternatively
guest: su
test-libqemu-2 -tcp 8012
2/ Testing Unix pipes:
host: test-libqemu-1 -unix /tmp/libqemu-socket
guest: test-libqemu-2 -pipe unix:/tmp/libqemu-socket
3/ Testing internal pingpong server (within the emulator)
host: /* nothing to do */
guest: test-libqemu-2
Change-Id: Ib50fc9cbee6b5f4581baca97412d6f69d4f84860
Unfortunately, we need to keep duplicate libraries under sdk/emulator/
to avoid breaking a few internal branches.
commit 776bd3e46c
Author: David 'Digit' Turner <digit@android.com>
Date: Thu Apr 7 10:58:07 2011 +0200
emulator: Remove the global Make variable trick for emulator-specific system modules.
Remove a sad trick that was used to smoothly move the platform-specific emulator
modules from sdk/emulator/ to development/tools/emulator/system without creating
build conflicts.
Now that the sdk/ modules have been removed, we can get rid of the guard variable.
Change-Id: Id5c44a4160191d8ac9afcbbeeef7de0b9a5b0f6f
Remove a sad trick that was used to smoothly move the platform-specific emulator
modules from sdk/emulator/ to development/tools/emulator/system without creating
build conflicts.
Now that the sdk/ modules have been removed, we can get rid of the guard variable.
Change-Id: I0261fcd6cdf6af7564106c5ab8d2b3bda001d567
This copies the platform-specific emulator modules from sdk.git into
development.git/tools/emulator/system/. Note the use of guard variables
to prevent clashes when the original modules are still in the tree.
The goal is to submit this and https://review.source.android.com/#change,21737,
then later remove the modules from sdk.git when we move the internal sdk branch
to the appropriate tools_rXXX branch.
Change-Id: I762d0efb72d93a935d96c4549f36029c258c3ef9