| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add 2 APIs (suspend/resume) in MediaPlayer
- API:suspend() will just pause the player and release all the decoders
to replace release() which will release the whole player
- API:resume() will just init the decoders again,
then start() will be called to restart streaming playback
- Add a check in AwesomePlayer::onVideoEvent()
to make sure the first seek operation will always seek to the next
i-frame
Change-Id: Ie4c82906a2a056378119921a656128ebdc1007c4
audio: Add pause support for hardware omx component
- ADSP doesn't enter sleep state after wma playback is paused
and power suspended.
- No support for NT session pause in case of hardware component.
NT session need to be paused to put ADSP into power collapse.
- Add support of pause in stagefright to ensure device enters
suspend mode. Also add intermediate states to avoid concurrency
issues between read and pause.
Change-Id: I41b946b8c8805e6ee303646b63513b5b16514ef6
libstagefright: Drain input buffer on resume
- Buffers returned from codec in paused state are not drained. When
codec is resumed these buffers are not drained until the next flush,
and may cause timed out issue.
- Added change to drain input buffers for sw decoders when resuming.
Change-Id: Ida2ab1d5dc3a1910accdd6fb89548262a912d8e7
CRs-Fixed: 569585, 574967
libstagefright: camcorder pause-resume implementation
- Add pause resume feature in camcorder app. So that
user can pause recording and resume later which results
in a single recorded clip.
Change-Id: Id19c45ae5bb85265aa4d5304b160ebf119d9575a
libstagefright: support pause/resume for timelapse recording
Modify the timestamp calculation mechanism in CameraSourceTimeLapse
in order to support pause/resume.
Change-Id: Icb02ea798b0b807ffb7ada2d1ef5b2414b74edfb
|
|
|
|
|
|
|
|
|
| |
Not doing so will result in CameraSource always dropping frames since
updated-timestamp (0-based) will never intersect start-timestamp (based
on system-time).
Change-Id: I696aef51398ed59be0bad7e0e6f9a85504c1f408
CRs-Fixed: 899460
|
|
|
|
|
|
|
|
| |
Avoid the frame-skip logic in time-lapse source if capture-rate
exceeds video-fps. Not doing so will drop frames and also cause
retrograde timestamps and an assertion in CameraSource.
Change-Id: I8420e44ab96484f0d6301c366a24eefc8efeaf0f
|
|
|
|
| |
Change-Id: I3d1146714fa23be3d4e696599b6f70cac1f9d28b
|
|\
| |
| |
| |
| |
| | |
* commit 'e80631aa1992ca50af679cd6a018c0ffda7f9b17':
media: use size_t for integer iterator to Vector::size()
media: 64 bit compile issues
|
| |
| |
| |
| | |
Change-Id: I0a744dc7815a86a993df9b0623440be620ec8903
|
| |
| |
| |
| |
| |
| |
| |
| | |
(cherry picked from commit 84333e0475bc911adc16417f4ca327c975cf6c36)
Modified by Mark Salyzyn <salyzyn@google.com> to keep merge conflicts
or errors downstream to a minimum.
Change-Id: Ic3b272f9cbf3155001aabd2f79728f1bc31de613
|
| |
| |
| |
| | |
Change-Id: Ie3bae3f037730e316d7fca12e7a3527973f752ef
|
|\ \
| |/
|/|
| | |
initialization failed in the parent class ctor CameraSource::CameraSource."
|
| |
| |
| |
| |
| |
| |
| | |
failed in the parent class ctor CameraSource::CameraSource.
Bug: 11636771
Change-Id: I5e6bffc1ebeeb1c2b84d6ed2049b2b3676ac046a
|
|/
|
|
|
|
|
|
|
|
| |
Camera HAL v1 uses vendor-specific camera-source meta-data mode, but
software encoders use generic gralloc-source mode, so they are not
compatible.
Change-Id: I0d1bab8eada26dcb70c97b1eec83f06d1f331239
Signed-off-by: Lajos Molnar <lajos@google.com>
Bug: 11446505
|
|
|
|
| |
Change-Id: I13d7a9553aa335bca790a3a59d389d7533c83d57
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Camera:
- Signal to AppOpsService when camera usage starts and stops
- Listen to permissions revocations and act on them
- Currently just kill camera connection when permissions lost
Stagefright:
- Pass on client name, UID to camera as needed
Bug: 8181262
Change-Id: I9e33c9d05e9daa77dbb2d795045d08eb887ec8f0
|
|
|
|
| |
Change-Id: I963a3b6f79a7292891973cbeeaf3378b38629f08
|
|
|
|
|
|
| |
classes
Change-Id: Ia74ffc1c0cbd7971697f5e3c476e340ec5c7727a
|
|
|
|
|
|
|
| |
See https://android-git.corp.google.com/g/#/c/157220
Bug: 5449033
Change-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c
|
|
|
|
|
|
|
| |
See https://android-git.corp.google.com/g/156801
Bug: 5449033
Change-Id: Ib08fe86d23db91ee153e9f91a99a35c42b9208ea
|
|
|
|
|
|
|
| |
See https://android-git.corp.google.com/g/156016
Bug: 5449033
Change-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298
|
|\
| |
| |
| |
| |
| |
| | |
recording" into ics-mr1
* commit 'd0a254566f5f0be5607b4d64839a575c888c94f6':
Fix log spamming during time lapse video recording
|
| |
| |
| |
| |
| |
| | |
Change-Id: I4fc0809203684ebb02eaf217d7abad00aefc898f
related-to-bug: 5626569
|
|\ \
| |/
| |
| |
| |
| |
| | |
for timelapse video recording." into ics-mr1
* commit 'ee7ebb3257d9337627b175835dc3d08f9b8ab339':
Fix a hang issue where the first frame can be dropped for timelapse video recording.
|
| |
| |
| |
| |
| |
| |
| | |
recording.
Change-Id: I04754f1005a983953a80a659ff13f8762d0e120c
related-to-bug: 5523502
|
|/
|
|
|
|
|
| |
See https://android-git.corp.google.com/g/#/c/143865
Bug: 5449033
Change-Id: I0122812ed6ff6f5b59fe4a43ab8bff0577adde0a
|
|
|
|
|
|
| |
related-to-bug: 4973779
Change-Id: Ica665217ab10247b2242acc4e93d4fe9f83e3f45
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The purpose of ICameraRecordingProxy and ICameraRecordingProxyListener is to
allow applications using the camera during recording.
Camera service allows only one client at a time. Since camcorder application
needs to own the camera to do things like zoom, the media recorder cannot
access the camera directly during recording. So ICameraRecordingProxy is a proxy
of ICamera, which allows the media recorder to start/stop the recording and
release recording frames. ICameraRecordingProxyListener is an interface that
allows the recorder to receive video frames during recording.
ICameraRecordingProxy
startRecording()
stopRecording()
releaseRecordingFrame()
ICameraRecordingProxyListener
dataCallbackTimestamp()
The camcorder app opens the camera and starts the preview. The app passes
ICamera and ICameraRecordingProxy to the media recorder by
MediaRecorder::setCamera(). The recorder uses ICamera to setup the camera in
MediaRecorder::start(). After setup, the recorder disconnects from camera
service. The recorder calls ICameraRecordingProxy::startRecording() and
passes a ICameraRecordingProxyListener to the app. The app connects back to
camera service and starts the recording. The app owns the camera and can do
things like zoom. The media recorder receives the video frames from the
listener and releases them by ICameraRecordingProxy::releaseRecordingFrame.
The recorder calls ICameraRecordingProxy::stopRecording() to stop the
recording.
The call sequences are as follows:
1. The app: Camera.unlock().
2. The app: MediaRecorder.setCamera().
3. Start recording
(1) The app: MediaRecorder.start().
(2) The recorder: ICamera.unlock() and ICamera.disconnect().
(3) The recorder: ICameraRecordingProxy.startRecording().
(4) The app: ICamera.reconnect().
(5) The app: ICamera.startRecording().
4. During recording
(1) The recorder: receive frames from ICameraRecordingProxyListener.dataCallbackTimestamp()
(2) The recorder: release frames by ICameraRecordingProxy.releaseRecordingFrame().
5. Stop recording
(1) The app: MediaRecorder.stop()
(2) The recorder: ICameraRecordingProxy.stopRecording().
(3) The app: ICamera.stopRecording().
bug:2644213
Change-Id: I15269397defc25cbbcae16abc071c8349c123122
|
|
|
|
|
|
| |
increases
Change-Id: Ie5ccb43e0192420300da58525ec52af7544e8e9e
|
|
|
|
|
|
| |
bug - 3292153
Change-Id: I9789f7c5cde3a3889d7375e881181e9152d95fc2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
are at least two input video frames from camera source.
This will fix the stop failure issue where we have to wait n * time_interval before a key frame can be received by the file writer, where
o n is the actual number of buffers advertised by the video encoder
o time_interval is the interval settings for timelapse video recording
specifying the time distance between neighboring input video frames
The fix includes two parts:
o OMXCodec will not submit all n buffers at one time, but instead submit one input
frame at one time if it become available.
o Timelapse camera source made available the first two input frames and do not skip
them so that the first compressed output frame data can be received regardless
the specified time_interval
bug - 3367659
Change-Id: Ia68cc2cb0d71aa7dc54540e9ad82fae911ad530b
|
|
|
|
|
|
|
|
| |
eliminate memcpy
bug - 3361771
Change-Id: Ib37ffe4be8edc8708baa76b3507b6f11372536d9
|
|
|
|
|
|
|
|
| |
CameraSourceTimeLapse.cpp
bug - 3334999
Change-Id: I1c83080713696221048da9b1a9f8c2ee48849ade
|
|
|
|
| |
Change-Id: I88d0cc824f0fbf8b2f392fbc23c69b5bfefda1b8
|
|
|
|
| |
Change-Id: I93836b066fb69d5152d3774546a9935057a1f12f
|
|
|
|
|
|
| |
bug - 3042125
Change-Id: I877b265c6bf8e0593121c8d5a95ae5599cdc6fb9
|
|
|
|
|
|
|
| |
o updated comments and streamlined the logic in
checkVideoSize() and checkFrameRate() as suggested
Change-Id: I49d04ac7998d4a215997aa63555dfb6e814e38d3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If the frame capture interval is large, read will block for a long time.
Due to the way the mediaRecorder framework works, a stop() call from
mediaRecorder waits until the read returns, causing a long wait for
stop() to return. To avoid this, we return a copy of the last read
frame with the same time stamp if a frame is not available quickly.
This keeps the read() call from blocking too long. This method is
triggered when startQuickReadReturns() is called on
CameraSourceTimeLapse.
In the still camera case, also using waitRelative on Condition
instaed of sleeping, so that we can wake it up.
Also for the idle check instead of sleeping, we now wait on a
condition variable, which is woken up when the last takePicture
callback gets called.
Change-Id: Ia74386e175536aee0f44ae2f8b114c353d3d72f5
|
|
|
|
| |
Change-Id: If0a77855d98b45769a154b25d6535f30cd41536a
|
|
|
|
|
|
|
|
| |
Disabling shutter sound when using still capture for time lapse recording.
We also play recording sound at the start and stop of recording as is
done for usual video recording.
Change-Id: I6a6fa0c7c867979624105eea74fc17945db1f517
|
|
|
|
|
|
|
|
|
|
|
|
| |
CameraSourceTimeLapse now decides whether to use still or video
camera automatically. It checks if the passed in size is a valid
preview size and if it is, then uses the video camera else uses
the still camera.
Removed from StagefrightRecorder the support to set parameter
useStillCameraForTimeLapse.
Change-Id: I71f5b0fc7080ca524792381efe918d22e41a7f36
|
|
|
|
|
|
|
|
|
|
|
| |
In the case when stop is pressed after takePicture has been called
but the CAMERA_MSG_COMPRESSED_IMAGE message from camera has not yet
been received, preview was not getting restarted. The reason was that
CameraSource::stop sets the camera listener to NULL and hence the
dataCallback() function which handles the CAMERA_MSG_COMPRESSED_IMAGE
message and restarts preview never got called.
Change-Id: Ib8f3bb77d9eab1ed5a67798569025ea0d63d7fd4
|
|
|
|
|
|
|
| |
Minor bugfix. sleep doesn't take fractional value for seconds, so use
usleep instead of sleep for sleeping small times.
Change-Id: I40e45c30cc595a54c18601117b9a1a3637652f60
|
|
|
|
| |
Change-Id: I473a62ab8282e4e89e48ee6d7e99aec6ed37076a
|
|
|
|
|
|
|
| |
Go through all the supported picture sizes and choose the smallest one with
both dimensions higher than the passed in video width and height.
Change-Id: I4e9fe7a6384a0feeb9e069239ec68c70fb5f3033
|
|
|
|
|
|
|
|
|
| |
Adding support to allow video size to be different than the supported
picture sizes. A picture size larger than the demanded video size is
chosen. Captured pictures are then cropped to the size of the desired
video size. Cropping is done from the the center portion of the picture.
Change-Id: I6bcbe16f94b6ecbcf28b7f46826a81b4b6b8cbc3
|
|
|
|
|
|
|
|
| |
added setTimeLapseParameters() to MediaRecorder.java and SetParameter support
in StagefrightRecorder to allow enabling time lapse and setting the corresponding
parameters.
Change-Id: I509040aa71f8d3fc37337b0894a81d9c0fd7a40a
|
|
|
|
|
|
|
|
|
| |
Preview is called when CAMERA_MSG_COMPRESSED_IMAGE is recieved by
dataCallback(). It needs to be started as a new thread so that the
callback can return, and the camera can know that takePicture() is
done.
Change-Id: I4d0febbc993aac43b37f9f4a824e9c7b8785f19e
|
|
Also moving entire implementation into a new class CameraSourceTimeLapse
which inherits from CameraSource.
For timelapse capture using still camera, we start a thread which runs a
loop in which it calls Camera::takePicture() and then sleeps until the next
frame should be captured.
The function dataCallback() handles the callback from the camera with the
raw image data. This function copies the data and creates an artificial
timestamp corresponding to one frame time ahead of the last encoded frame's
time stamp. It then calls dataCallbackTimestamp() of the base class which
will think that it recieved the frame from a video camera and proceed as usual.
For moving the implementation to the subclass CameraSourceTimeLapse, added a
few virtual functions to CameraSource, which do the current thing for the base
class, but specialized things for CameraSourceTimeLapse.
E.g. startCameraRecording() in the base class just calls mCamera->startRecording(),
while in CameraSourceTimeLapse it may start a thread for the still camera case.
Change-Id: Ib787f24bd2e1f41681513f0257e1c4ca10a2b4de
|