summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/CameraSource.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Squashed commit of A/V changes from CodeAuroraKrishnankutty Kolathappilly2013-06-181-1/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Brings us current with AU_LINUX_ANDROID_JB_2.5.04.02.02.040.367 Camera: Fix deadlock due to mLock in pcb and takepicture In non-zsl case of takepicture, we do streamoff for preview stream which is waiting on preview callback thread to exit. By that time the lock has already been acquired by takePicture. So preivew callback will not exit until it acquires lock and takePicture cannot continue until PCB call back is returned. Fix: Avoid the mLock at services when both Preview cb & Compressed cb are enabled. Change-Id: I6c264928bf1540c7b51f1add65f9c3e968506e15 CRs-fixed: 479419 audioflinger: Fix the LPA-AudioEffects crash issue - Issue:crash is observed during LPA playback on enabling effects followed by plug-out->plug-in of wired headset - Rootcause: while deleteing the effectchain in deleteEffect EffctChain is being unlocked after clearing the chain which leads to accessing the lock which might already deleted. - Fix: first unlock the effectChain and then call clear CRs-Fixed: 491774 Change-Id: I518ff086c5ad71486cd29142563145137ebc15b6 libstagefright: Fix for crash in sound recorder during device switch -Crash seen in sound recorder during frequent insertion and removal of wired headset -During device switch some time Codec's input buffers are too small to accomodate buffer read from source. Omx codec doesn't read the fix size buffer from source, during device switch scenario sometime buffer read from source exceeds input buffer size so it goes in error state which leads to crash. -Increasing the input buffer size fix this issue Change-Id: Id15378670880d0c3c0bd4408841b28be963549a0 CRs-Fixed: 488449 libstagefright: Fix for FPS drop issue during A-V playback. Issues: -The AAC decoder was not updating the timestamp when EOS is reached. -Logic to smoothen the real time update in AudioPlayer uses system time. This introduces corrupt timestamp during EOS. Fix: -Update the timestamp in AAC decoder when EOS is reached. -Extrapolate realtime using system time in AudioPlayer when EOS is reached. Cap the value to realtime if extrapolated time becomes greater than realtime. CRs-Fixed: 384183 Change-Id: Ice54501436431d2527fcd3d710d65d9732fcffdd libstagefright: Reset buffer size value with SurfaceTexture - OMXCodec explicitly sets the decoder output buffer size using the native window perform API. (to accomodate extra-data) - This size is reset only when the SurfaceTexture is destroyed. - Unless reset, this size will be assumed for all output buffers if the SurfaceTexture is re-used. CRs-Fixed: 337660, 432309 Change-Id: I28aed12ad02adeac61caffbb00e3082640a5f6d4 audio: Add support for tunnel mode recording - Add support for tunnel mode recording. Change-Id: I95cdfff729affd784141487521c9f2f714221d11 audio: Add support for non-pcm VOIP vocoders - Add support for non-pcm VOIP vocoders - non-pcm vocoders use AUDIO_SOURCE_VOICE_COMMUNICATION as inputSource. Add check to verify inputSource and then configure framecount accordingly Change-Id: Ia38da4f6ba0ee40c794d3c97325327cdb7dcb32a CRs-Fixed: 467850 frameworks/av: Add metadata mode changes to LPAPlayer -Seek to EOS was causing playback to hang for 3 seconds before switching to the next clip. -This is because the lpa driver works on period size. Partial buffers are not handled. -Add support for metadata mode changes to LPAPlayer to support partial frames. CRs-Fixed: 458904 Change-Id: I8673756b54ae7bca18855d326c85ae1064652514 libstagefright: Add support for WMA in ACodec - WMA support is not there in ACodec - In the case of wma format, since not getting the complete information of wma version so instead of allocating the component in onAllocateComponent function it will create in onConfigureCompoenent function. bitspersample is find as "bsps" from AMessage while configuring the WMA10PRO and WMALOSSLESS format CRs-Fixed: 453951 Change-Id: I98baa701dbf8a5c012f4be5e83831c0be2111dcc libstagefright: Flush the pending buffers when EOS is received For the use case where the first frame in the buffer is EOS, decode the aac config frame buffer to update the sample rate and channel mode and flush out the buffer. Change-Id: I0354802cdbf61ac1ba0fecbbdf616705806b0f4a CRs-Fixed: 459334 audio: Fix The Linux Foundation copyright - Fix copyright format based on The Linux Foundation copyright template Change-Id: I100a5c86302d1a1a3d79543d95e242734daae746 media, audioflinger: check for divide by zero possibilities and err When output stream is not available to audioflinger due to any reason , sampleRate and frameCount have zero values when trying to create new Audiotrack. This might result in divide by 0 situation. Change-Id: Ic13cb51facb8497e68ab596abb027b44f496b907 CRs-Fixed: 478480 framewroks/av:Fix ANR at the end of video recording - While doing video recording, when the recording ends ANR observed while doing stress test for many hours - When the recording is stopped, audio HAL receives error from driver and audio HAL propagates this error to AudioFlinger. But AudioFlinger is not sending error status to audio source to stop recording. Because of this audiorecord thread keeps on waiting for buffers which is resulting in ANR. - To avoid indefinite wait, a timeout of 1 sec is set for buffer in audioSource and after timeout, -ETIMEDOUT is returned to recorder thread. CRs-Fixed: 479968 Change-Id: I91aba6922086e711992d9d991dea9c35d33eaee9 audioflinger: Integrate SRS TruMedia Change-Id: If61ae91556120ddd5f5ebcc6dbbfe6583c7df67d audioflinger: Fix apply SRS effects if tones diabled in tunnel mode For the use case of SRS post processing in Tunnel mode, the API's of SRS are called only from write. With the huge buffering for tunnel mode, once EOS is received there would not be further write. With system tone enabled, the SRS API's are called during the check for Parameters change through normal mixer thread. With system tones disabled, SRS will not be applied after EOS as no write and mixer thread would not be active. Fix the issue by adding the Effects Thread for SRS in Tunnel mode. Fix the compilation issue with ALOGV messages enabled Change-Id: Ic7e62894840f786119dfe8ae471c5d24812917d7 audioflinger: Enhance LPA-effect logic to handle rapid config. -Issue:Rapid Config events cause pops/glitches, raw data playback. -Rootcause1:Raw data leakage to DSP: applyEffectsOn() applies effects chunk by chunk in a loop, if effects change during this time the loop exits and this results in creation of a buffer in which part of it is effects processed and rest raw, this causes raw data to leak to DSP. -RootCause2:Effectsthread directly works on the DSP buffers, while DSP is rendering from there, so that effect application is instantaneous and for this it gives the DSP buffers as output to effects chain, this means that all the effects in the chain update the DSP buffers one after the other, this can create unpredictable rendering patterns. RootCause1 and 2 combined seem to fragment memory with parts of it with effects and parts with raw data etc. -Fix1:Dont update DSP mem unless the effects are applied completely on a buffer. -Fix2:Effectschain will work on a temp scrath buffer instead of DSP mem and when effects are applied completely on this scrath buffer, memcpy this to DSP mem with this DSP mem is updated in one shot. -Remove repetetive logs which clutter the logcat if msgs are enabled in audioflinger. Change-Id: I9051e7b8531aa5c8cb3dcfafe0be3136a2cf0f9d CRs-Fixed: 463880 frameworks/av: Update framecount and buffersize values -framecount should be calculated based on mMaxBufferSize returned from HAL -update the buffersize with the value returned from HAL CRs-Fixed: 482744 Change-Id: I90dd9c3ebbbc8a9f1f2f92c5347ae9cb01719e13 audioflinger: Fix the LPA-AudioEffects dead lock issue. - Issue:Deadlock occurs when the LPA clips are subjected to rapid next from BT device and simultaneously on/off the audio effects. - Rootcause:some times flinger thread processing LPAPlayer/directtrack next deadlocks with the thread working on effect configuration as both of them contend for the audioflinger::mlock and effectmodule::mlock. - Fix1:AudioFlinger::deleteEffectSession() not to acquire audioflinger:mLock instead take the mLPAEffectChain.mlock. - Fix2:ThreadBase::effectConfigChanged() not to acquire audioflinger::mlock. Change-Id: I056c8297802f81644fa1371836db42bdbd3825fd CRs-Fixed: 477511 libstagefright: Add support for High Frame Rate Encoding - Based on kkeyhfr key value from meta data, add support in OMXCodec and MPEG4Writer for HFR mode - Assume normal mode recording if kKeyHfr is absent - Increase bit rate for high frame rate (HFR) recording feature to reflect the corresponding increase in frame rate Change-Id: I0a69f8d9322a768677781d08dd910dc5772c5292 libstagefright: Support some userdefine properties - support property to disable audio - support property to change recorder profile mode - support b frame encoding Change-Id: I175decec83f6027cbd7988caf680f7fec2836f83 CRs-Fixed: 443327 libstagefright: Add support for H/W AAC decoder - Currently, only software AAC decoding is supported. - Add support for H/W AAC decoding by including it in the list of available decoders and use it for decoding only if the property 'media.aaccodectype' is set to 0. Change-Id: I4bb9df1bd10bd8ee91e63dadd6c473fc4e29813a CRs-Fixed: 449145 libstagefright: Move checks for creating new extractor to ExtendedExtractor - Move all the checks and creation of the extended extractor into ExtendedExtractor. - Restrict creation of new extractor to the following conditions o default extractor is NULL o default extractor says the content is video only or has an unrecognized audio stream o the audio stream is a amr-wb (plus). - This change is being added to avoid unnecessary creation of two extractors thereby improving the startup latency. CRs-Fixed: 462087 Change-Id: Ia87eca73c4f81d37697fa85fd4f7c8cc8d406104 [StageFright] Enable 4 channel support This patches enables 4 channel WAV audio support and fixes invalid data size in WAV header field if it exceeds the actual source size. This patch is needed to support WebAudio in WebKit as some of the chrome demos use 4 channel WAV audio and bogus header information. Change-Id: I307026107ab4e4342b1c0d7bb64761a416fb2c65 audioflinger: Fix crash on LPA shutdown * Decrement the refcount after unlocking the mutex Change-Id: Ic3210700e0aaf5e8df78f85f501621a455058e24 libstagefright: Accept vendor specific NV12 colorformat from component - Accept OMX_QCOM_COLOR_FormatYUV420PackedSemiPlanar32m color format which is NV12 + 32 aligned stride and slice. - This is different from vanilla NV12 which is 16 aligned. Change-Id: I6de2ec3a78215dbcc28a6006b746e3e0afe69c3c libstagefright: various fixes for avc_utils - skip seq_scaling_matrix_present_flag assertion if checking for interlaced property. - correct interlace check to outside of if-block Change-Id: Ia5854110feb1c56ddc86b312d2ba2dbb73d37804 CRs-Fixed: 445527, 445692 libstagefright: print stats at end of playback - prints statistics before reset at the end of playback onto logcat - print statistics after each pause and seek Change-Id: I68edcc3153a04209e7382e4d3fba0bf734f3e33f CRs-Fixed: 457926, 447109 frameworks/base : Fix to play a specific Mp4 clip due to SYNCH_LOST_ERROR. -Unable to play a Specific Mp4 clip. -Mp3 playback is stopped if the Decoder errors out with SYNCH_LOST_ERROR. -Ignore the frame with SYNCH_LOST_ERROR and play silence instead. Change-Id: I6b94a83cf89e8bc6792d8ee3804042d629aa505b Add checks before removing an active buffer in OMXNodeInstance With this change, OMXNodeInstance will remove a buffer from it's active list only if OMX_FreeBuffer returns successfully. Change-Id: I685b39ac7ba762a2fc1b64d7f6c1efd391513598 libstagefright: Add interlaced video support - Adds call to set output buffer size on the native window Change-Id: If4a67b3f877bef557c46bb67b29d1e7051553335 audio: fix for AMRWB param overwritten issue - Overwrite AMRWB params with default value only when setParameters is not invoked CRs-Fixed: 456459 Change-Id: I3fa6b56101ca408ed5b5b82707c6dc75a9d9f17b audio: fix encoder parameters for AMRWB format - AMRWB encoder only accepts SampleRate 16k and channel count 1. Always overwrite AMRWB SampleRate and channel count to default values. - AMRWB encoder accepts BitRate from 6.6k to 23.85k, only overwrite AMRWB BitRate to default(23.85k)if setParameters() is not invoked Change-Id: I75a96b54ef04bc59dab9074ec112071e62fd51aa CRs-Fixed: 460931 stagefright: Add QCOM_BSP ifdefs for interlaced video handling Change-Id: I856ae4a97f1bf13ab18d386b3486e742a4804b2a Camera : Changes to support camcorder profiles. Change-Id: I9c4bf14f273839fd36d5f52db0f215873e8291a0 av: Ifdef all the things! Change-Id: If9dd6c6442e9d2ac9e55e48369f2da85f5f951f7 Camera: Add profiles for camcorder. Change-Id: Icdaf1fae0018de1fb04f41125cfbe34a91b5eda7 libvideoeditor: use vWidth and vHeight for buffer allocation - video editor detects crop information from decoder, crop width and height will override metadata width and height. - decoder is capable of sending crop information where crop width and height are smaller than actual resolution. - use actual metadata width and height for calculating buffer size. Change-Id: Id1d77c316e3892e6d51a00418052f256629f495f CRs-Fixed: 452511 Add ifdefs around enhanced media types Change-Id: I64b8853660ac4fe90ddb218b237f63b635cdb47b
* Add camera parameters for htc evo 3D. (1/2)Kevin Bruckert2013-04-281-0/+4
| | | | | | Use BOARD_HTC_3D_SUPPORT to enable. Change-Id: I28fa3f1586071bcc78b8e887bbbf699d338a0ceb
* [3/3] libstagefright/videoeditor: Allow custom DOMX source instead of Google ↵Hashcode2013-01-261-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | DOMX default Part 3 of 3 patches: To allow omap4 devices to use custom "domx" source via a new BoardConfig.mk item: TI_CUSTOM_DOMX_PATH := device/<manufacturer>/<device-name>/domx This setting provides for 3 changes during the build: 1. In hardware/ti/omap4xxx this settings stops standard Google domx source from being built and changes the domx reference for tiutils. 2. In frameworks/base it changes the default openmax references for frameworks/base/media/jni/mediaeditor/Android.mk to the new location 3. In frameworks/av changes the openmax references in 5 places, and adds new includes in ACodec.cpp, CameraSource.cpp and OMXCodec.cpp This is a combination of cherry-picks from omapzoom (with a more descriptive BoardConfig setting name): http://www.omapzoom.org/?p=platform/frameworks/av.git;a=commit;h=8044105ca117c2e99b35ad9f341d630fc5a9d2e0 http://www.omapzoom.org/?p=platform/frameworks/av.git;a=commit;h=4adf712d1f3f2050fe0010652bbba7ecb8468870 http://www.omapzoom.org/?p=platform/frameworks/av.git;a=commit;h=fa37231ca59872ac491461ca3c14e019834848e5 Change-Id: I53dbf120d515eaf5ec82688dcea4c670c173ed01 Signed-off-by: Hashcode <hashcode0f@gmail.com>
* stagefright: OMXCodec: Re-enable OMX.TI.Video.encoder's quirksRicardo Cerqueira2013-01-031-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | These have been around since early stagefright, and were dropped for JB. Unfortunately, they're still necessary with for this encoder to work. Change-Id: I8a251bf195a24b166db7464a90a822d6e69b644d libstagefright: Add support for the 720P OMAP3 encoders Bring back some more OMAP code that was removed by Google in JB, and a couple of omapzoom patches. This may stop being necessary if TI publishes JB-specific OMAP3 code, but as long as we're using the ICS domx, these need to be here Change-Id: Ia29f8c9f9ed769ba07b09c07260486f6502841d6 libstagefright: Unbreak OMAP4 encoders The "manual" construction of the h264 codec data is only needed on OMAP3. Execution of this code on OMAP4 breaks the mpeg4 header generation Change-Id: I3ae52f2e685e2d9097796685c98dffa93cfa6430
* exynos4: libstragefright: add support for samsung colorformat/omx/mfccodeworkx2012-11-301-0/+5
| | | | | | | Source: http://git.insignal.co.kr/samsung/exynos/android/platform/frameworks/av/commit/?h=exynos-jb&id=1614612f7ca2a00473d202dbedcb135fadc608ad Change-Id: Ib40b3cfa1480ecbb69831e7967a81f63719e2ff7
* Dynamically configure the number of video buffers used by camera source, if ↵James Dong2012-08-021-3/+25
| | | | | | | | supported o related-to-bug: 6920805 Change-Id: I413bb50954cc84e32ed40bcb713842dc7b58e2b6
* Codecs: Add MetaDataMode support to software video encoders.Eino-Ville Talvala2012-07-241-0/+4
| | | | | | | | | | | | | | This support is needed to enable efficient video recording with emulator and camera HAL 2. - Update SoftAVCEncoder and SoftMPEG4Encoder to support MetaDataMode extension. - Allow CameraSource to handle opaque pixel formats, so that MetaDataMode can be used. - Remove hardware codec restriction for MetaDataMode Bug: 6243944 Change-Id: I970eb3d55542a413b6d75a78f76d3a8583155601
* Remove new camera connect API.Wu-cheng Li2012-04-191-1/+1
| | | | | | | | Applications are not resumed under the lock screen now. This API is not needed anymore. bug:5584464 Change-Id: I115daf6b647348617ec0fc05b626878c945b9b29
* Merge "Do not set camera preview display if the surface is null."Wu-cheng Li2012-03-191-3/+7
|\
| * Do not set camera preview display if the surface is null.Wu-cheng Li2012-03-191-3/+7
| | | | | | | | | | | | | | | | | | | | | | | | MediaRecorder.setPreviewDisplay() is not required if applications use MediaRecorder.setCamera(). Besides, this causes a problem when apps use Camera.setPreviewTexture. Camera service thinks the surface texture from Camera.setPreviewTexture and the surface from MediaRecorder.setPreviewDisplay are different. bug:5988937 Change-Id: Ia345705b6679ef349db6e354feaa3cc0fe8bcd8c
* | Add a new camera open API that allows taking the ownership.Wu-cheng Li2012-03-151-1/+1
|/ | | | | | | | | | | | | | The purpose is to let face unlock always get the camera successfully. What happened was the camera applications may have opened the camera in onResume under the lock screen. This API lets face unlock take the camera from the camera application. A new permission will be added, so other applicatoins won't be able to take the camera from the face unlock. bug:5584464 Change-Id: Ib3d9dcbc2161815b68db42327dc01148453704c6
* fix libgui header locationMathias Agopian2012-02-271-1/+1
| | | | Change-Id: Iec71706cdd4f29c6904993648ce873e83ef9cafe
* Move away from MediaDebug and use ADebug insteadJames Dong2012-02-101-5/+6
| | | | Change-Id: I963a3b6f79a7292891973cbeeaf3378b38629f08
* Don't call virtual functions in the destructor for audio and camera source ↵James Dong2012-02-021-4/+4
| | | | | | classes Change-Id: Ia74ffc1c0cbd7971697f5e3c476e340ec5c7727a
* Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF) DO NOT MERGESteve Block2012-01-081-11/+11
| | | | | | | See https://android-git.corp.google.com/g/#/c/157220 Bug: 5449033 Change-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c
* Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF) DO NOT MERGESteve Block2012-01-061-4/+4
| | | | | | | See https://android-git.corp.google.com/g/157065 Bug: 5449033 Change-Id: I00a4b904f9449e6f93b7fd35eac28640d7929e69
* Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF) DO NOT MERGESteve Block2012-01-041-2/+2
| | | | | | | See https://android-git.corp.google.com/g/156801 Bug: 5449033 Change-Id: Ib08fe86d23db91ee153e9f91a99a35c42b9208ea
* Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF) DO NOT MERGESteve Block2012-01-031-3/+3
| | | | | | | See https://android-git.corp.google.com/g/156016 Bug: 5449033 Change-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298
* am d0a25456: am 02740dc4: Merge "Fix log spamming during time lapse video ↵James Dong2011-11-211-2/+7
|\ | | | | | | | | | | | | recording" into ics-mr1 * commit 'd0a254566f5f0be5607b4d64839a575c888c94f6': Fix log spamming during time lapse video recording
| * Fix log spamming during time lapse video recordingJames Dong2011-11-211-2/+7
| | | | | | | | | | | | Change-Id: I4fc0809203684ebb02eaf217d7abad00aefc898f related-to-bug: 5626569
* | Rename (IF_)LOGV(_IF) to (IF_)ALOGV(_IF) DO NOT MERGESteve Block2011-10-261-21/+21
|/ | | | | | | See https://android-git.corp.google.com/g/#/c/143865 Bug: 5449033 Change-Id: I0122812ed6ff6f5b59fe4a43ab8bff0577adde0a
* When Camera is launched by media recording framework, stagefright controls ↵James Dong2011-08-241-0/+9
| | | | | | | the stop and release. Change-Id: Ic79a60dad0f617a845211d3fbe146c1648a71da3 related-to-bug: 5205804
* Do not release recording frames if camera is goneJames Dong2011-08-051-1/+1
| | | | | Change-Id: Ia6038c1a3ca17207e43a955ec47c42cdff1f5a76 related-to-bug: 5129465
* Pass camera frame metadata from camera service to Java.Wu-cheng Li2011-08-021-2/+4
| | | | | bug:4460717 Change-Id: I2fae6e1dfca6b8f3a5ee5716fc7817f5417bf657
* Let the media recording framework release the Camera object when it is the ownerJames Dong2011-07-201-15/+35
| | | | | | related-to-bug: 5050535,5036813,5051707 Change-Id: I88e10f65f087931e7f95ab26a018d59f7361103e
* 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