am 5a905ceb: Merge "Track maximum amplitude and fix getMaxAmplitude()" into gingerbread
Merge commit '5a905ceb063bd31170d3d869efcd051cbd8e4e13' into gingerbread-plus-aosp * commit '5a905ceb063bd31170d3d869efcd051cbd8e4e13': Track maximum amplitude and fix getMaxAmplitude()
This commit is contained in:
@@ -39,6 +39,9 @@ struct AudioSource : public MediaSource {
|
|||||||
virtual status_t stop();
|
virtual status_t stop();
|
||||||
virtual sp<MetaData> getFormat();
|
virtual sp<MetaData> getFormat();
|
||||||
|
|
||||||
|
// Returns the maximum amplitude since last call.
|
||||||
|
int16_t getMaxAmplitude();
|
||||||
|
|
||||||
virtual status_t read(
|
virtual status_t read(
|
||||||
MediaBuffer **buffer, const ReadOptions *options = NULL);
|
MediaBuffer **buffer, const ReadOptions *options = NULL);
|
||||||
|
|
||||||
@@ -53,13 +56,17 @@ private:
|
|||||||
bool mStarted;
|
bool mStarted;
|
||||||
|
|
||||||
bool mCollectStats;
|
bool mCollectStats;
|
||||||
|
bool mTrackMaxAmplitude;
|
||||||
int64_t mTotalReadTimeUs;
|
int64_t mTotalReadTimeUs;
|
||||||
int64_t mTotalReadBytes;
|
int64_t mTotalReadBytes;
|
||||||
int64_t mTotalReads;
|
int64_t mTotalReads;
|
||||||
int64_t mStartTimeUs;
|
int64_t mStartTimeUs;
|
||||||
|
int16_t mMaxAmplitude;
|
||||||
|
|
||||||
MediaBufferGroup *mGroup;
|
MediaBufferGroup *mGroup;
|
||||||
|
|
||||||
|
void trackMaxAmplitude(int16_t *data, int nSamples);
|
||||||
|
|
||||||
AudioSource(const AudioSource &);
|
AudioSource(const AudioSource &);
|
||||||
AudioSource &operator=(const AudioSource &);
|
AudioSource &operator=(const AudioSource &);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -484,6 +484,7 @@ sp<MediaSource> StagefrightRecorder::createAudioSource() {
|
|||||||
sp<MediaSource> audioEncoder =
|
sp<MediaSource> audioEncoder =
|
||||||
OMXCodec::Create(client.interface(), encMeta,
|
OMXCodec::Create(client.interface(), encMeta,
|
||||||
true /* createEncoder */, audioSource);
|
true /* createEncoder */, audioSource);
|
||||||
|
mAudioSourceNode = audioSource;
|
||||||
|
|
||||||
return audioEncoder;
|
return audioEncoder;
|
||||||
}
|
}
|
||||||
@@ -822,6 +823,7 @@ status_t StagefrightRecorder::reset() {
|
|||||||
mAudioBitRate = 12200;
|
mAudioBitRate = 12200;
|
||||||
mInterleaveDurationUs = 0;
|
mInterleaveDurationUs = 0;
|
||||||
mIFramesInterval = 1;
|
mIFramesInterval = 1;
|
||||||
|
mAudioSourceNode = 0;
|
||||||
mEncoderProfiles = MediaProfiles::getInstance();
|
mEncoderProfiles = MediaProfiles::getInstance();
|
||||||
|
|
||||||
mOutputFd = -1;
|
mOutputFd = -1;
|
||||||
@@ -831,7 +833,11 @@ status_t StagefrightRecorder::reset() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
status_t StagefrightRecorder::getMaxAmplitude(int *max) {
|
status_t StagefrightRecorder::getMaxAmplitude(int *max) {
|
||||||
*max = 0;
|
if (mAudioSourceNode != 0) {
|
||||||
|
*max = mAudioSourceNode->getMaxAmplitude();
|
||||||
|
} else {
|
||||||
|
*max = 0;
|
||||||
|
}
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ namespace android {
|
|||||||
class Camera;
|
class Camera;
|
||||||
struct MediaSource;
|
struct MediaSource;
|
||||||
struct MediaWriter;
|
struct MediaWriter;
|
||||||
|
struct AudioSource;
|
||||||
class MediaProfiles;
|
class MediaProfiles;
|
||||||
|
|
||||||
struct StagefrightRecorder : public MediaRecorderBase {
|
struct StagefrightRecorder : public MediaRecorderBase {
|
||||||
@@ -64,6 +65,7 @@ private:
|
|||||||
sp<ISurface> mPreviewSurface;
|
sp<ISurface> mPreviewSurface;
|
||||||
sp<IMediaPlayerClient> mListener;
|
sp<IMediaPlayerClient> mListener;
|
||||||
sp<MediaWriter> mWriter;
|
sp<MediaWriter> mWriter;
|
||||||
|
sp<AudioSource> mAudioSourceNode;
|
||||||
|
|
||||||
audio_source mAudioSource;
|
audio_source mAudioSource;
|
||||||
video_source mVideoSource;
|
video_source mVideoSource;
|
||||||
|
|||||||
@@ -78,6 +78,8 @@ status_t AudioSource::start(MetaData *params) {
|
|||||||
mCollectStats = true;
|
mCollectStats = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mTrackMaxAmplitude = false;
|
||||||
|
mMaxAmplitude = 0;
|
||||||
mStartTimeUs = 0;
|
mStartTimeUs = 0;
|
||||||
int64_t startTimeUs;
|
int64_t startTimeUs;
|
||||||
if (params && params->findInt64(kKeyTime, &startTimeUs)) {
|
if (params && params->findInt64(kKeyTime, &startTimeUs)) {
|
||||||
@@ -168,6 +170,10 @@ status_t AudioSource::read(
|
|||||||
return (status_t)n;
|
return (status_t)n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mTrackMaxAmplitude) {
|
||||||
|
trackMaxAmplitude((int16_t *) buffer->data(), n >> 1);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t sampleRate = mRecord->getSampleRate();
|
uint32_t sampleRate = mRecord->getSampleRate();
|
||||||
int64_t timestampUs = (1000000LL * numFramesRecorded) / sampleRate + mStartTimeUs;
|
int64_t timestampUs = (1000000LL * numFramesRecorded) / sampleRate + mStartTimeUs;
|
||||||
buffer->meta_data()->setInt64(kKeyTime, timestampUs);
|
buffer->meta_data()->setInt64(kKeyTime, timestampUs);
|
||||||
@@ -181,4 +187,27 @@ status_t AudioSource::read(
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AudioSource::trackMaxAmplitude(int16_t *data, int nSamples) {
|
||||||
|
for (int i = nSamples; i > 0; --i) {
|
||||||
|
int16_t value = *data++;
|
||||||
|
if (value < 0) {
|
||||||
|
value = -value;
|
||||||
|
}
|
||||||
|
if (mMaxAmplitude < value) {
|
||||||
|
mMaxAmplitude = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int16_t AudioSource::getMaxAmplitude() {
|
||||||
|
// First call activates the tracking.
|
||||||
|
if (!mTrackMaxAmplitude) {
|
||||||
|
mTrackMaxAmplitude = true;
|
||||||
|
}
|
||||||
|
int16_t value = mMaxAmplitude;
|
||||||
|
mMaxAmplitude = 0;
|
||||||
|
LOGV("max amplitude since last call: %d", value);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace android
|
} // namespace android
|
||||||
|
|||||||
Reference in New Issue
Block a user