| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
| |
Add support for TI H264 encoder and quirks for buffer allocation.
Temporary switching to baseline profile till ctts patch is defaulted
as per profile detection.
Change-Id: I1d56184b9c5d5f00d6c63aef7e058f3d56b84cef
Signed-off-by: Dandawate Saket <dsaket@ti.com>
Signed-off-by: Iliyan Malchev <malchev@google.com>
|
|
|
|
| |
Change-Id: I2f7e4b8501db3d80b9aa6f99d896d778bec29e8c
|
|
|
|
|
|
| |
bug:4965716
Change-Id: Icb1f7f18e9ea6c4f0427ade2ed338e7d56be5e01
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
Change-Id: I99e188f631df2257813aa7ec657d6ecfc8859d9e
|
|
|
|
|
|
|
|
|
| |
Methods getNumberOfVideoBuffers() and getVideoBuffer() as well as struct
image_rect_struct are no longer used (instead, the necessary information is
passed through ANativeWindow.)
Change-Id: If4b11446fc9ccbde1f6b45bc70c0d0b8e54376eb
Signed-off-by: Iliyan Malchev <malchev@google.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
o do not use edts/elst boxes since these optional boxes are ignored
o manipulate the first video/audio frame duration to make sure that the rest
of the audio/video is in sync (ideally, we should only manipulate
the vidoe frame duration, not the audio)
o reduce the initial audio mute/suppression period, which is used to
eliminate the "recording" sound.
bug - 3405882 and 3362703
Change-Id: Ib0acfb4f3843b365157288951dc122b006299c18
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
bug - 3276561
Change-Id: I1e02590b23031f29bcbfc4a1064f039ed80cb862
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
o Skipping frames could lead to a lot of issues such as I frames is lost etc.
It is not being used anyway.
This reverts commit 53d4e0d58e2d5c18f6e026c705af833b9bdd7aba.
Conflicts:
media/libstagefright/AudioSource.cpp
media/libstagefright/CameraSource.cpp
Change-Id: I3abba1647de48db25bdc369066eb2a7ae4dedec2
|
|
|
|
|
|
|
|
| |
metadata buffers
bug - 3274317
Change-Id: I2c0e9fcd30c9141ce5a85e9d72cbd0baf561458b
|
|
|
|
|
|
|
| |
and also call mCamera->stopRecording() only after CameraSource releases all the
outstanding video frames sent from CameraSource to its clients (such as video encoder).
Change-Id: I7eeed4e2f388e77c28668d52c24b5330d3d9ebde
|
|
|
|
| |
Change-Id: I93836b066fb69d5152d3774546a9935057a1f12f
|
|
|
|
|
|
|
|
| |
and clean up Camera is CameraSource could not created.
bug - 3254411
Change-Id: I43497c450e7007de5ce027e2912b1421119e8887
|
|
|
|
|
|
|
|
|
|
| |
When startRecording() is called before setListener(), recording frames
are sent right after startRecording(), but there is no listener to
release the recording frames. This causes the hang in media server.
bug - 3166356
Change-Id: I19366ca682ef9f6b847590c190c30a15ed32b8e4
|
|
|
|
| |
Change-Id: Ia33befaa7e6df8762703002d01aa79c04f15f040
|
|
|
|
|
|
|
|
|
|
|
| |
o set the default video frame rate to the current frame rate being used
o add check on whether the requested frame rate is supported
o fix an issue where the hardware video encoder setting was bypassed
o increases the max frame rate from 30 t0 120 frames per second
the actual frame rate will be clipped if the requested frame rate is too
high when recording starts by checking the hardware encoder capabilities
Change-Id: I1b47671d74da0ebcb9601bdca390d430cc048fbc
|
|
|
|
|
|
| |
bug - 3115814
Change-Id: I6aa59b3182ceee35c6d6ef54ff520f81077873f0
|
|
|
|
|
|
| |
bug - 3042125
Change-Id: I877b265c6bf8e0593121c8d5a95ae5599cdc6fb9
|
|
|
|
|
|
|
| |
Part III: Move startRecording() call earlier, asking camera hal
to allocate video buffers before CameraSource.start() is called.
Change-Id: I3f1d7d5636ca2644fe52af61f297d48c6b1ce89d
|
|
|
|
|
|
|
| |
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: I5c8266348d0840361c8095ce351ac85c44d4068f
|
|\
| |
| |
| |
| |
| |
| |
| |
| | |
gingerbread
Merge commit '0cd2472bf8a0062b56b9cd4613c44791b32fe42f'
* commit '0cd2472bf8a0062b56b9cd4613c44791b32fe42f':
Add some explicit error log messages
|
| |
| |
| |
| | |
Change-Id: I8a69157b75a67f0d3c19f05775a8cb0629232299
|
|\ \
| |/
| |
| |
| |
| |
| |
| |
| | |
hold the lock." into gingerbread
Merge commit '136d8336b6cb18067cd783185dacef34ae785519'
* commit '136d8336b6cb18067cd783185dacef34ae785519':
This code in CameraSource really should hold the lock.
|
| |
| |
| |
| | |
Change-Id: I349520a14776bb83b7edb23fc62052b487246d9a
|
|\ \
| |/
| |
| |
| |
| |
| | |
Merge commit '9bc4dc114fce58606a81d65d4cb31348cc7c1bae'
* commit '9bc4dc114fce58606a81d65d4cb31348cc7c1bae':
Allows the authoring engine to skip frame.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This is 1st part of the work to allow audio and video resync if
we found out that audio and video are out of sync during authoring
- also fixed a problem in AACEncoder::read() where the buffer acquired
from the buffer group does not release when error out at
reading from source.
Change-Id: I8a2740097fcfdf85e6178869afeb9f3687a99118
|
|\ \
| |/
| |
| |
| |
| |
| |
| |
| | |
MediaSources." into gingerbread
Merge commit '8a9a931fff2d184f7cf77fdd8a425f682f006cfd'
* commit '8a9a931fff2d184f7cf77fdd8a425f682f006cfd':
Support finer seek control on MediaSources.
|
| |
| |
| |
| |
| |
| | |
related-to-bug: 2858448
Change-Id: Ifb4b13b990fd5889113e47e2c62249ac43391fa1
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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
|
|/
|
|
|
|
|
|
|
|
|
| |
Current implementation looks at the timestamps of all incoming frames in
CameraSource::dataCallbackTimestamp().
It drops all frames until enough time has elapsed to get the next time lapse frame.
When enough time has passed to capture the next time lapse frame, the frame is no longer dropped
and the timestamp of this frame is modified to be one frame time (1/framerate) ahead of the
last encoded frame's time stamp.
Change-Id: I82b9d5e96113dffa6901aac3b8a8ef999ffc1d0b
|
|
|
|
| |
Change-Id: Iba0b35f57fdeac7ee1da16899406bf4b957a2c8c
|
|
|
|
|
|
| |
bug - 2677772
Change-Id: I7c996daad8b3bfc89e9fa2d655dc18c9a5c68f2f
|
|
|
|
| |
Change-Id: I7a8ccd5d57891a6a585c8da2ee53acb094955913
|
|
|
|
| |
Change-Id: I93a9d8bd260efc5e7fc135b726e3f1307c6df794
|
|
|
|
|
|
| |
Retrieve the pixel format from Camera HAL at runtime.
Change-Id: I63f820f54c59c2019dfd195320b9928da3362536
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is the part one.
- Let CameraSource be a MediaBufferObserver. It releases the recording frame when the ref count of a MediaBuffer containing
the recording frame drops to 0.
This reduces the CPU load from 90+% down to 50-60%.
Part two is related to the avoidance of copying the input video frames to the video encoder.
However, we are not able to use OMX_UseBuffer directly. Still work on the second part.
Change-Id: I906f1d054ae8bdcf82e1617f1fc120152f2eb2eb
|
|
|
|
|
|
| |
the buffer size.
Change-Id: I76eea76bda49529d08b46241d3dded1a804f891c
|
|
|
|
| |
Change-Id: Ia3760820da0559e4e908dedae1f1df05f9a6a242
|
|
|
|
|
|
| |
bug - 2680919
Change-Id: Ia0308cf57fd67058b4dd0e042b3ce97f13df475f
|
|
|
|
| |
Change-Id: I9957fc43d5fce317479f6c55fb0b9612bff9a495
|
|
|
|
| |
Change-Id: I081f0fbdca4b633715ea7c3b3d42f8662d27598a
|
|
|
|
| |
Change-Id: Ifa27eb23ee265f84fe06773b29b0eb2b0b075b60
|
|
|
|
| |
Change-Id: I09ddec69997c43b8f17fdd21304c76cb4c5ab8cf
|
|
|
|
| |
Change-Id: I75a461c9882e2449082ad754ee7b231c1ceec039
|
| |
|
|
|
|
| |
portrait mode.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
commit 333057b355f8c260c549553b9a0634755c838b6a
Author: Andreas Huber <andih@google.com>
Date: Fri Nov 13 15:35:48 2009 -0800
Some more tweaks to AVC encoding on sholes.
commit 9981d0ee52ec5b8b0182aae733d1571e3ebb8390
Author: Andreas Huber <andih@google.com>
Date: Thu Nov 12 16:36:57 2009 -0800
Support for avc encoding, including sholes specific tweaks to pick the right colorspace for the camera to not require transcoding.
commit 5ba0ebbbd4efca51f3ae1f60e2ca31e7d2cf136d
Author: Andreas Huber <andih@google.com>
Date: Wed Nov 11 09:50:03 2009 -0800
Enable actual (camera) video-only recording using h.263 or mpeg4 encoding.
commit 3fd59c3526a37fe7c696f4a978925d1831c09313
Author: Andreas Huber <andih@google.com>
Date: Tue Nov 10 14:57:48 2009 -0800
Allow switching between the PV recorder implementation and one supported by stagefright.
This is controlled through the property "media.stagefright.enable-record".
|