From c5fa90a809c9e7a98e32373a4dea6b3e46a0e92c Mon Sep 17 00:00:00 2001 From: Weiyin Jiang Date: Thu, 13 Nov 2014 12:56:05 +0800 Subject: audio: omx encoder isn't expected for raw recording Raw recording doesn't require any encoder, so no OMX encoder will be created and audio source will be directly used as media source. UNKNOWN_ERROR error will be threwn if call AudioSource::start() continuously, so we should avoid omx encoder operations if it's not created for raw recording. CYNGNOS-1679 Change-Id: Ib38c4e42b7667e9bf882cddb15422d0dd598b60e CRs-Fixed: 752419 (cherry picked from commit 587267232a2829936510bbe46591863403782d1a) --- .../libmediaplayerservice/StagefrightRecorder.cpp | 28 +++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'media/libmediaplayerservice') diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp index c4c5741..709e653 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.cpp +++ b/media/libmediaplayerservice/StagefrightRecorder.cpp @@ -2044,10 +2044,16 @@ status_t StagefrightRecorder::setSourcePause(bool pause) { } } if (mAudioEncoderOMX != NULL) { - err = mAudioEncoderOMX->pause(); - if (err != OK) { - ALOGE("OMX AudioEncoder pause failed"); - return err; + if (mAudioEncoderOMX != mAudioSourceNode) { + err = mAudioEncoderOMX->pause(); + if (err != OK) { + ALOGE("OMX AudioEncoder pause failed"); + return err; + } + } else { + // If AudioSource is the same as MediaSource(as in LPCM), + // bypass omx encoder pause() call. + ALOGV("OMX AudioEncoder->pause() bypassed"); } } if (mVideoSourceNode != NULL) { @@ -2087,10 +2093,16 @@ status_t StagefrightRecorder::setSourcePause(bool pause) { } } if (mAudioEncoderOMX != NULL) { - err = mAudioEncoderOMX->start(); - if (err != OK) { - ALOGE("OMX AudioEncoder start failed"); - return err; + if (mAudioEncoderOMX != mAudioSourceNode) { + err = mAudioEncoderOMX->start(); + if (err != OK) { + ALOGE("OMX AudioEncoder start failed"); + return err; + } + } else { + // If AudioSource is the same as MediaSource(as in LPCM), + // bypass omx encoder start() call. + ALOGV("OMX AudioEncoder->start() bypassed"); } } } -- cgit v1.1