Merge changes from topic 'camera-native-aidl' into nyc-dev
* changes:
Camera: Clean up warnings and set -Werror
Camera: Switch camera2 to auto-gen C++ binder interfaces
diff --git a/include/media/AudioIoDescriptor.h b/include/media/AudioIoDescriptor.h
index c94b738..a4907cc 100644
--- a/include/media/AudioIoDescriptor.h
+++ b/include/media/AudioIoDescriptor.h
@@ -56,13 +56,13 @@
return AUDIO_PORT_HANDLE_NONE;
}
- audio_io_handle_t mIoHandle;
- struct audio_patch mPatch;
- uint32_t mSamplingRate;
- audio_format_t mFormat;
- audio_channel_mask_t mChannelMask;
- size_t mFrameCount;
- uint32_t mLatency;
+ audio_io_handle_t mIoHandle;
+ struct audio_patch mPatch;
+ uint32_t mSamplingRate;
+ audio_format_t mFormat;
+ audio_channel_mask_t mChannelMask;
+ size_t mFrameCount;
+ uint32_t mLatency; // only valid for output
};
diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h
index 901a0fd..91e2bbd 100644
--- a/include/media/AudioSystem.h
+++ b/include/media/AudioSystem.h
@@ -114,11 +114,12 @@
// FIXME This API assumes a route, and so should be deprecated.
static status_t getOutputLatency(uint32_t* latency,
audio_stream_type_t stream);
- static status_t getSamplingRate(audio_io_handle_t output,
+ // returns the audio HAL sample rate
+ static status_t getSamplingRate(audio_io_handle_t ioHandle,
uint32_t* samplingRate);
- // returns the number of frames per audio HAL write buffer. Corresponds to
- // audio_stream->get_buffer_size()/audio_stream_out_frame_size()
- static status_t getFrameCount(audio_io_handle_t output,
+ // returns the number of frames per audio HAL buffer. Corresponds to
+ // audio_stream->get_buffer_size()/audio_stream_out/in_frame_size()
+ static status_t getFrameCount(audio_io_handle_t ioHandle,
size_t* frameCount);
// returns the audio output latency in ms. Corresponds to
// audio_stream_out->get_latency()
diff --git a/include/media/IAudioFlinger.h b/include/media/IAudioFlinger.h
index e28f79d..0d9bc3b 100644
--- a/include/media/IAudioFlinger.h
+++ b/include/media/IAudioFlinger.h
@@ -97,14 +97,14 @@
sp<IMemory>& buffers, // return value 0 means it follows cblk
status_t *status) = 0;
- // FIXME Surprisingly, sampleRate/format/frameCount/latency don't work for input handles
+ // FIXME Surprisingly, format/latency don't work for input handles
/* query the audio hardware state. This state never changes,
* and therefore can be cached.
*/
- virtual uint32_t sampleRate(audio_io_handle_t output) const = 0;
+ virtual uint32_t sampleRate(audio_io_handle_t ioHandle) const = 0;
virtual audio_format_t format(audio_io_handle_t output) const = 0;
- virtual size_t frameCount(audio_io_handle_t output) const = 0;
+ virtual size_t frameCount(audio_io_handle_t ioHandle) const = 0;
// return estimated latency in milliseconds
virtual uint32_t latency(audio_io_handle_t output) const = 0;
diff --git a/include/media/stagefright/CameraSource.h b/include/media/stagefright/CameraSource.h
index 2fe592e..c732b41 100644
--- a/include/media/stagefright/CameraSource.h
+++ b/include/media/stagefright/CameraSource.h
@@ -220,6 +220,9 @@
virtual void dataCallbackTimestamp(int64_t timestampUs, int32_t msgType,
const sp<IMemory> &data);
+ // Process a buffer item received in BufferQueueListener.
+ virtual void processBufferQueueFrame(BufferItem& buffer);
+
void releaseCamera();
private:
@@ -261,8 +264,6 @@
void releaseQueuedFrames();
void releaseOneRecordingFrame(const sp<IMemory>& frame);
- // Process a buffer item received in BufferQueueListener.
- void processBufferQueueFrame(const BufferItem& buffer);
status_t init(const sp<hardware::ICamera>& camera, const sp<ICameraRecordingProxy>& proxy,
int32_t cameraId, const String16& clientName, uid_t clientUid, pid_t clientPid,
diff --git a/include/media/stagefright/CameraSourceTimeLapse.h b/include/media/stagefright/CameraSourceTimeLapse.h
index 77c9b8f..f17ec51 100644
--- a/include/media/stagefright/CameraSourceTimeLapse.h
+++ b/include/media/stagefright/CameraSourceTimeLapse.h
@@ -140,9 +140,15 @@
// In the video camera case calls skipFrameAndModifyTimeStamp() to modify
// timestamp and set mSkipCurrentFrame.
// Then it calls the base CameraSource::dataCallbackTimestamp()
+ // This will be called in VIDEO_BUFFER_MODE_DATA_CALLBACK_YUV and
+ // VIDEO_BUFFER_MODE_DATA_CALLBACK_METADATA mode.
virtual void dataCallbackTimestamp(int64_t timestampUs, int32_t msgType,
const sp<IMemory> &data);
+ // Process a buffer item received in CameraSource::BufferQueueListener.
+ // This will be called in VIDEO_BUFFER_MODE_BUFFER_QUEUE mode.
+ virtual void processBufferQueueFrame(BufferItem& buffer);
+
// Convenience function to fill mLastReadBufferCopy from the just read
// buffer.
void fillLastReadBufferCopy(MediaBuffer& sourceBuffer);
diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp
index 1af5660..c55a90b 100644
--- a/media/libmedia/AudioSystem.cpp
+++ b/media/libmedia/AudioSystem.cpp
@@ -264,25 +264,23 @@
return getSamplingRate(output, samplingRate);
}
-status_t AudioSystem::getSamplingRate(audio_io_handle_t output,
+status_t AudioSystem::getSamplingRate(audio_io_handle_t ioHandle,
uint32_t* samplingRate)
{
const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
if (af == 0) return PERMISSION_DENIED;
- sp<AudioIoDescriptor> outputDesc = getIoDescriptor(output);
- if (outputDesc == 0) {
- ALOGV("getOutputSamplingRate() no output descriptor for output %d in gOutputs", output);
- *samplingRate = af->sampleRate(output);
+ sp<AudioIoDescriptor> desc = getIoDescriptor(ioHandle);
+ if (desc == 0) {
+ *samplingRate = af->sampleRate(ioHandle);
} else {
- ALOGV("getOutputSamplingRate() reading from output desc");
- *samplingRate = outputDesc->mSamplingRate;
+ *samplingRate = desc->mSamplingRate;
}
if (*samplingRate == 0) {
- ALOGE("AudioSystem::getSamplingRate failed for output %d", output);
+ ALOGE("AudioSystem::getSamplingRate failed for ioHandle %d", ioHandle);
return BAD_VALUE;
}
- ALOGV("getSamplingRate() output %d, sampling rate %u", output, *samplingRate);
+ ALOGV("getSamplingRate() ioHandle %d, sampling rate %u", ioHandle, *samplingRate);
return NO_ERROR;
}
@@ -303,23 +301,23 @@
return getFrameCount(output, frameCount);
}
-status_t AudioSystem::getFrameCount(audio_io_handle_t output,
+status_t AudioSystem::getFrameCount(audio_io_handle_t ioHandle,
size_t* frameCount)
{
const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
if (af == 0) return PERMISSION_DENIED;
- sp<AudioIoDescriptor> outputDesc = getIoDescriptor(output);
- if (outputDesc == 0) {
- *frameCount = af->frameCount(output);
+ sp<AudioIoDescriptor> desc = getIoDescriptor(ioHandle);
+ if (desc == 0) {
+ *frameCount = af->frameCount(ioHandle);
} else {
- *frameCount = outputDesc->mFrameCount;
+ *frameCount = desc->mFrameCount;
}
if (*frameCount == 0) {
- ALOGE("AudioSystem::getFrameCount failed for output %d", output);
+ ALOGE("AudioSystem::getFrameCount failed for ioHandle %d", ioHandle);
return BAD_VALUE;
}
- ALOGV("getFrameCount() output %d, frameCount %zu", output, *frameCount);
+ ALOGV("getFrameCount() ioHandle %d, frameCount %zu", ioHandle, *frameCount);
return NO_ERROR;
}
diff --git a/media/libmedia/IAudioFlinger.cpp b/media/libmedia/IAudioFlinger.cpp
index e1de111..6da4524 100644
--- a/media/libmedia/IAudioFlinger.cpp
+++ b/media/libmedia/IAudioFlinger.cpp
@@ -265,11 +265,11 @@
return record;
}
- virtual uint32_t sampleRate(audio_io_handle_t output) const
+ virtual uint32_t sampleRate(audio_io_handle_t ioHandle) const
{
Parcel data, reply;
data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32((int32_t) output);
+ data.writeInt32((int32_t) ioHandle);
remote()->transact(SAMPLE_RATE, data, &reply);
return reply.readInt32();
}
@@ -283,11 +283,11 @@
return (audio_format_t) reply.readInt32();
}
- virtual size_t frameCount(audio_io_handle_t output) const
+ virtual size_t frameCount(audio_io_handle_t ioHandle) const
{
Parcel data, reply;
data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
- data.writeInt32((int32_t) output);
+ data.writeInt32((int32_t) ioHandle);
remote()->transact(FRAME_COUNT, data, &reply);
return reply.readInt64();
}
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp
index 15fa573..39f73c3 100644
--- a/media/libstagefright/CameraSource.cpp
+++ b/media/libstagefright/CameraSource.cpp
@@ -1114,7 +1114,7 @@
return true;
}
-void CameraSource::processBufferQueueFrame(const BufferItem& buffer) {
+void CameraSource::processBufferQueueFrame(BufferItem& buffer) {
Mutex::Autolock autoLock(mLock);
int64_t timestampUs = buffer.mTimestamp / 1000;
diff --git a/media/libstagefright/CameraSourceTimeLapse.cpp b/media/libstagefright/CameraSourceTimeLapse.cpp
index fd1b88c..d52567c 100644
--- a/media/libstagefright/CameraSourceTimeLapse.cpp
+++ b/media/libstagefright/CameraSourceTimeLapse.cpp
@@ -308,4 +308,12 @@
CameraSource::dataCallbackTimestamp(timestampUs, msgType, data);
}
+void CameraSourceTimeLapse::processBufferQueueFrame(BufferItem& buffer) {
+ ALOGV("processBufferQueueFrame");
+ int64_t timestampUs = buffer.mTimestamp / 1000;
+ mSkipCurrentFrame = skipFrameAndModifyTimeStamp(×tampUs);
+ buffer.mTimestamp = timestampUs * 1000;
+ CameraSource::processBufferQueueFrame(buffer);
+}
+
} // namespace android
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index ada1580..9397729 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -691,12 +691,12 @@
return trackHandle;
}
-uint32_t AudioFlinger::sampleRate(audio_io_handle_t output) const
+uint32_t AudioFlinger::sampleRate(audio_io_handle_t ioHandle) const
{
Mutex::Autolock _l(mLock);
- PlaybackThread *thread = checkPlaybackThread_l(output);
+ ThreadBase *thread = checkThread_l(ioHandle);
if (thread == NULL) {
- ALOGW("sampleRate() unknown thread %d", output);
+ ALOGW("sampleRate() unknown thread %d", ioHandle);
return 0;
}
return thread->sampleRate();
@@ -713,12 +713,12 @@
return thread->format();
}
-size_t AudioFlinger::frameCount(audio_io_handle_t output) const
+size_t AudioFlinger::frameCount(audio_io_handle_t ioHandle) const
{
Mutex::Autolock _l(mLock);
- PlaybackThread *thread = checkPlaybackThread_l(output);
+ ThreadBase *thread = checkThread_l(ioHandle);
if (thread == NULL) {
- ALOGW("frameCount() unknown thread %d", output);
+ ALOGW("frameCount() unknown thread %d", ioHandle);
return 0;
}
// FIXME currently returns the normal mixer's frame count to avoid confusing legacy callers;
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 858ebbb..273cfe1 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -128,9 +128,9 @@
sp<IMemory>& buffers,
status_t *status /*non-NULL*/);
- virtual uint32_t sampleRate(audio_io_handle_t output) const;
+ virtual uint32_t sampleRate(audio_io_handle_t ioHandle) const;
virtual audio_format_t format(audio_io_handle_t output) const;
- virtual size_t frameCount(audio_io_handle_t output) const;
+ virtual size_t frameCount(audio_io_handle_t ioHandle) const;
virtual uint32_t latency(audio_io_handle_t output) const;
virtual status_t setMasterVolume(float value);
diff --git a/services/mediacodec/minijail/seccomp_policy/mediacodec-seccomp-arm.policy b/services/mediacodec/minijail/seccomp_policy/mediacodec-seccomp-arm.policy
index 70adc34..3419195 100644
--- a/services/mediacodec/minijail/seccomp_policy/mediacodec-seccomp-arm.policy
+++ b/services/mediacodec/minijail/seccomp_policy/mediacodec-seccomp-arm.policy
@@ -36,6 +36,8 @@
nanosleep: 1
lseek: 1
sched_get_priority_max: 1
+sched_get_priority_min: 1
+statfs64: 1
# for attaching to debuggerd on process crash
sigaction: 1