summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/CameraSource.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Add support for TI H264 encoderDandawate Saket2011-07-121-0/+4
| | | | | | | | | | 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>
* Release camera if CameraSource::start() has not been calledJames Dong2011-07-101-2/+23
| | | | Change-Id: I2f7e4b8501db3d80b9aa6f99d896d778bec29e8c
* Unlock the camera if media recorder fails to start recording.Wu-cheng Li2011-06-291-12/+17
| | | | | | bug:4965716 Change-Id: Icb1f7f18e9ea6c4f0427ade2ed338e7d56be5e01
* Add framework support for camcorder zoom.Wu-cheng Li2011-06-271-32/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Add timestamp and data pointer checks in CameraSourceJames Dong2011-06-031-5/+5
| | | | Change-Id: I99e188f631df2257813aa7ec657d6ecfc8859d9e
* frameworks/base: some camera-interface cleanupIliyan Malchev2011-03-281-22/+0
| | | | | | | | | 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>
* A/V synchronization at the beginning of a recording sessionJames Dong2011-02-171-5/+3
| | | | | | | | | | | | | 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
* Make sure that key frame is generated for timelapse video recording if there ↵James Dong2011-01-261-1/+1
| | | | | | | | | | | | | | | | | | | | | 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
* Add more debugging code to track down hang during video recordingJames Dong2010-12-211-4/+11
| | | | | | bug - 3276561 Change-Id: I1e02590b23031f29bcbfc4a1064f039ed80cb862
* Revert "Allows the authoring engine to skip frame."James Dong2010-12-111-39/+16
| | | | | | | | | | | | | | 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
* Fixed a failure from timelapse video recording because of accidental use of ↵James Dong2010-12-101-3/+6
| | | | | | | | metadata buffers bug - 3274317 Change-Id: I2c0e9fcd30c9141ce5a85e9d72cbd0baf561458b
* Release a recording frame only if mCamera exists and is not cleared.James Dong2010-12-101-2/+4
| | | | | | | 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
* First step towards renabling Timelapse video recordingJames Dong2010-12-091-1/+6
| | | | Change-Id: I93836b066fb69d5152d3774546a9935057a1f12f
* Remove check if the target video resolution is not supported by CameraSourceJames Dong2010-12-051-17/+16
| | | | | | | | and clean up Camera is CameraSource could not created. bug - 3254411 Change-Id: I43497c450e7007de5ce027e2912b1421119e8887
* Fixed a race condition where some recording frames may not be released.James Dong2010-11-151-20/+3
| | | | | | | | | | 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
* Separate the key for audio sampling rate and video frame rate in MetaData.hJames Dong2010-11-111-1/+1
| | | | Change-Id: Ia33befaa7e6df8762703002d01aa79c04f15f040
* Don't change the video recording frame rate if it is not requested.James Dong2010-10-251-0/+15
| | | | | | | | | | | 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
* Fix an issue where the video size was incorrectly retrieved from preview sizeJames Dong2010-10-201-1/+13
| | | | | | bug - 3115814 Change-Id: I6aa59b3182ceee35c6d6ef54ff520f81077873f0
* Make camera source ready for handling meta-data video buffers.James Dong2010-10-191-6/+50
| | | | | | bug - 3042125 Change-Id: I877b265c6bf8e0593121c8d5a95ae5599cdc6fb9
* 0-memcpy video recording frameworkJames Dong2010-10-091-1/+22
| | | | | | | Part III: Move startRecording() call earlier, asking camera hal to allocate video buffers before CameraSource.start() is called. Change-Id: I3f1d7d5636ca2644fe52af61f297d48c6b1ce89d
* Move Camera specific logic out from StagefrightRecorder to CameraSourceJames Dong2010-10-081-37/+345
| | | | | | | o updated comments and streamlined the logic in checkVideoSize() and checkFrameRate() as suggested Change-Id: I49d04ac7998d4a215997aa63555dfb6e814e38d3
* Implemented frequent read returns for quick stop in time lapse.Nipun Kwatra2010-09-171-1/+1
| | | | | | | | | | | | | | | | | | | 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
* Add YUV420P color format support for video output from camera halJames Dong2010-09-161-0/+4
| | | | Change-Id: I5c8266348d0840361c8095ce351ac85c44d4068f
* am 0cd2472b: am 82a39f4a: Merge "Add some explicit error log messages" into ↵James Dong2010-09-151-0/+3
|\ | | | | | | | | | | | | | | | | gingerbread Merge commit '0cd2472bf8a0062b56b9cd4613c44791b32fe42f' * commit '0cd2472bf8a0062b56b9cd4613c44791b32fe42f': Add some explicit error log messages
| * Add some explicit error log messagesJames Dong2010-09-141-0/+3
| | | | | | | | Change-Id: I8a69157b75a67f0d3c19f05775a8cb0629232299
* | am 136d8336: am 90d1d104: Merge "This code in CameraSource really should ↵Andreas Huber2010-08-111-0/+2
|\ \ | |/ | | | | | | | | | | | | | | hold the lock." into gingerbread Merge commit '136d8336b6cb18067cd783185dacef34ae785519' * commit '136d8336b6cb18067cd783185dacef34ae785519': This code in CameraSource really should hold the lock.
| * This code in CameraSource really should hold the lock.Andreas Huber2010-08-111-0/+2
| | | | | | | | Change-Id: I349520a14776bb83b7edb23fc62052b487246d9a
* | am 9bc4dc11: am 53d4e0d5: Allows the authoring engine to skip frame.James Dong2010-07-221-15/+36
|\ \ | |/ | | | | | | | | | | Merge commit '9bc4dc114fce58606a81d65d4cb31348cc7c1bae' * commit '9bc4dc114fce58606a81d65d4cb31348cc7c1bae': Allows the authoring engine to skip frame.
| * Allows the authoring engine to skip frame.James Dong2010-07-221-15/+36
| | | | | | | | | | | | | | | | | | | | | | 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
* | am 8a9a931f: am 8138e841: Merge "Support finer seek control on ↵Andreas Huber2010-07-211-1/+2
|\ \ | |/ | | | | | | | | | | | | | | MediaSources." into gingerbread Merge commit '8a9a931fff2d184f7cf77fdd8a425f682f006cfd' * commit '8a9a931fff2d184f7cf77fdd8a425f682f006cfd': Support finer seek control on MediaSources.
| * Support finer seek control on MediaSources.Andreas Huber2010-07-211-1/+2
| | | | | | | | | | | | related-to-bug: 2858448 Change-Id: Ifb4b13b990fd5889113e47e2c62249ac43391fa1
* | Adding support for timelapse capture using still camera's takepicture.Nipun Kwatra2010-07-191-53/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* | Adding timelapse capture from videocamera.Nipun Kwatra2010-07-011-1/+46
|/ | | | | | | | | | | 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
* Audio/video sync during recording (second part)James Dong2010-06-211-10/+46
| | | | Change-Id: Iba0b35f57fdeac7ee1da16899406bf4b957a2c8c
* Remove the lock/unlock workaround from CameraServiceJames Dong2010-06-091-3/+17
| | | | | | bug - 2677772 Change-Id: I7c996daad8b3bfc89e9fa2d655dc18c9a5c68f2f
* Remove some hard-coded encoding parametersJames Dong2010-06-081-1/+9
| | | | Change-Id: I7a8ccd5d57891a6a585c8da2ee53acb094955913
* Initial check-in for collecting stats from authoring engine at runtimeJames Dong2010-06-081-5/+16
| | | | Change-Id: I93a9d8bd260efc5e7fc135b726e3f1307c6df794
* Remove hard-coded pixel format for recording frames in CameraSource.James Dong2010-06-031-10/+33
| | | | | | Retrieve the pixel format from Camera HAL at runtime. Change-Id: I63f820f54c59c2019dfd195320b9928da3362536
* Avoid copying for input recording frames in CameraSourceJames Dong2010-05-281-25/+36
| | | | | | | | | | | | | | 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
* Remove the logic in CameraSource using CameraParameters class to find out ↵James Dong2010-05-271-24/+5
| | | | | | the buffer size. Change-Id: I76eea76bda49529d08b46241d3dded1a804f891c
* Avoid repeatedly allocating and freeing memory in CameraSourceJames Dong2010-05-261-1/+27
| | | | Change-Id: Ia3760820da0559e4e908dedae1f1df05f9a6a242
* Remove dummy surface in CameraSourceJames Dong2010-05-131-44/+1
| | | | | | bug - 2680919 Change-Id: Ia0308cf57fd67058b4dd0e042b3ce97f13df475f
* should fix the buildMathias Agopian2010-05-121-0/+3
| | | | Change-Id: I9957fc43d5fce317479f6c55fb0b9612bff9a495
* Support multiple cameras in framework.Chih-Chung Chang2010-05-101-1/+1
| | | | Change-Id: I081f0fbdca4b633715ea7c3b3d42f8662d27598a
* Support audio and video track interleaving in the recorded mp4 fileJames Dong2010-05-051-10/+13
| | | | Change-Id: Ifa27eb23ee265f84fe06773b29b0eb2b0b075b60
* Use timestamp from camera driver for CameraSourceJames Dong2010-04-281-36/+51
| | | | Change-Id: I09ddec69997c43b8f17fdd21304c76cb4c5ab8cf
* Various fixes to enable recording on passion and nexus1.Andreas Huber2010-04-091-7/+0
| | | | Change-Id: I75a461c9882e2449082ad754ee7b231c1ceec039
* split libsurfaceflinger_client and libcamera_client out of libuiMathias Agopian2010-02-111-3/+3
|
* Add an orientation parameter for overlay, so we can do camera preview in ↵Chih-Chung Chang2010-01-211-1/+1
| | | | portrait mode.
* Squashed commit of the following:Andreas Huber2009-11-161-2/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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".