diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/camera/camera2/CaptureRequest.h (renamed from include/camera/photography/CaptureRequest.h) | 0 | ||||
-rw-r--r-- | include/camera/camera2/ICameraDeviceCallbacks.h (renamed from include/camera/photography/ICameraDeviceCallbacks.h) | 0 | ||||
-rw-r--r-- | include/camera/camera2/ICameraDeviceUser.h (renamed from include/camera/photography/ICameraDeviceUser.h) | 0 | ||||
-rw-r--r-- | include/media/AudioRecord.h | 44 | ||||
-rw-r--r-- | include/media/AudioSystem.h | 2 | ||||
-rw-r--r-- | include/media/AudioTrack.h | 27 | ||||
-rw-r--r-- | include/media/IAudioFlinger.h | 6 | ||||
-rw-r--r-- | include/media/IOMX.h | 4 | ||||
-rw-r--r-- | include/media/stagefright/SurfaceMediaSource.h | 2 | ||||
-rw-r--r-- | include/media/stagefright/foundation/ALooperRoster.h | 1 | ||||
-rw-r--r-- | include/private/media/AudioTrackShared.h | 25 |
11 files changed, 74 insertions, 37 deletions
diff --git a/include/camera/photography/CaptureRequest.h b/include/camera/camera2/CaptureRequest.h index e56d61f..e56d61f 100644 --- a/include/camera/photography/CaptureRequest.h +++ b/include/camera/camera2/CaptureRequest.h diff --git a/include/camera/photography/ICameraDeviceCallbacks.h b/include/camera/camera2/ICameraDeviceCallbacks.h index 041fa65..041fa65 100644 --- a/include/camera/photography/ICameraDeviceCallbacks.h +++ b/include/camera/camera2/ICameraDeviceCallbacks.h diff --git a/include/camera/photography/ICameraDeviceUser.h b/include/camera/camera2/ICameraDeviceUser.h index 45988d0..45988d0 100644 --- a/include/camera/photography/ICameraDeviceUser.h +++ b/include/camera/camera2/ICameraDeviceUser.h diff --git a/include/media/AudioRecord.h b/include/media/AudioRecord.h index 7aa3c24..eef108b 100644 --- a/include/media/AudioRecord.h +++ b/include/media/AudioRecord.h @@ -35,8 +35,6 @@ class AudioRecord : public RefBase { public: - static const int DEFAULT_SAMPLE_RATE = 8000; - /* Events used by AudioRecord callback function (callback_t). * Keep in sync with frameworks/base/media/java/android/media/AudioRecord.java NATIVE_EVENT_*. */ @@ -62,6 +60,7 @@ public: size_t frameCount; // number of sample frames corresponding to size; // on input it is the number of frames available, // on output is the number of frames actually drained + // (currently ignored, but will make the primary field in future) size_t size; // input/output in bytes == frameCount * frameSize // FIXME this is redundant with respect to frameCount, @@ -131,7 +130,7 @@ public: * sampleRate: Data sink sampling rate in Hz. * format: Audio format (e.g AUDIO_FORMAT_PCM_16_BIT for signed * 16 bits per sample). - * channelMask: Channel mask. + * channelMask: Channel mask, such that audio_is_input_channel(channelMask) is true. * frameCount: Minimum size of track PCM buffer in frames. This defines the * application's contribution to the * latency of the track. The actual size selected by the AudioRecord could @@ -144,19 +143,21 @@ public: * frames are ready in record track output buffer. * sessionId: Not yet supported. * transferType: How data is transferred from AudioRecord. + * flags: See comments on audio_input_flags_t in <system/audio.h> * threadCanCallJava: Not present in parameter list, and so is fixed at false. */ AudioRecord(audio_source_t inputSource, - uint32_t sampleRate = 0, - audio_format_t format = AUDIO_FORMAT_DEFAULT, - audio_channel_mask_t channelMask = AUDIO_CHANNEL_IN_MONO, + uint32_t sampleRate, + audio_format_t format, + audio_channel_mask_t channelMask, int frameCount = 0, callback_t cbf = NULL, void* user = NULL, int notificationFrames = 0, int sessionId = 0, - transfer_type transferType = TRANSFER_DEFAULT); + transfer_type transferType = TRANSFER_DEFAULT, + audio_input_flags_t flags = AUDIO_INPUT_FLAG_NONE); /* Terminates the AudioRecord and unregisters it from AudioFlinger. * Also destroys all resources associated with the AudioRecord. @@ -178,17 +179,18 @@ public: * * threadCanCallJava: Whether callbacks are made from an attached thread and thus can call JNI. */ - status_t set(audio_source_t inputSource = AUDIO_SOURCE_DEFAULT, - uint32_t sampleRate = 0, - audio_format_t format = AUDIO_FORMAT_DEFAULT, - audio_channel_mask_t channelMask = AUDIO_CHANNEL_IN_MONO, + status_t set(audio_source_t inputSource, + uint32_t sampleRate, + audio_format_t format, + audio_channel_mask_t channelMask, int frameCount = 0, callback_t cbf = NULL, void* user = NULL, int notificationFrames = 0, bool threadCanCallJava = false, int sessionId = 0, - transfer_type transferType = TRANSFER_DEFAULT); + transfer_type transferType = TRANSFER_DEFAULT, + audio_input_flags_t flags = AUDIO_INPUT_FLAG_NONE); /* Result of constructing the AudioRecord. This must be checked * before using any AudioRecord API (except for set()), because using @@ -363,7 +365,12 @@ public: * Input parameter 'size' is in byte units. * This is implemented on top of obtainBuffer/releaseBuffer. For best * performance use callbacks. Returns actual number of bytes read >= 0, - * or a negative status code. + * or one of the following negative status codes: + * INVALID_OPERATION AudioRecord is configured for streaming mode + * BAD_VALUE size is invalid + * WOULD_BLOCK when obtainBuffer() returns same, or + * AudioRecord was stopped during the read + * or any other error code returned by IAudioRecord::start() or restoreRecord_l(). */ ssize_t read(void* buffer, size_t size); @@ -420,6 +427,7 @@ private: status_t openRecord_l(uint32_t sampleRate, audio_format_t format, size_t frameCount, + audio_input_flags_t flags, audio_io_handle_t input, size_t epoch); @@ -437,10 +445,13 @@ private: // for client callback handler callback_t mCbf; // callback handler for events, or NULL - void* mUserData; // for client callback handler + void* mUserData; // for notification APIs - uint32_t mNotificationFrames; // frames between each notification callback + uint32_t mNotificationFramesReq; // requested number of frames between each + // notification callback + uint32_t mNotificationFramesAct; // actual number of frames between each + // notification callback bool mRefreshRemaining; // processAudioBuffer() should refresh next 2 // These are private to processAudioBuffer(), and are not protected by a lock @@ -464,6 +475,7 @@ private: audio_source_t mInputSource; uint32_t mLatency; // in ms audio_channel_mask_t mChannelMask; + audio_input_flags_t mFlags; int mSessionId; transfer_type mTransfer; @@ -476,11 +488,13 @@ private: int mPreviousPriority; // before start() SchedPolicy mPreviousSchedulingGroup; + bool mAwaitBoost; // thread should wait for priority boost before running // The proxy should only be referenced while a lock is held because the proxy isn't // multi-thread safe. // An exception is that a blocking ClientProxy::obtainBuffer() may be called without a lock, // provided that the caller also holds an extra reference to the proxy and shared memory to keep + // them around in case they are replaced during the obtainBuffer(). sp<AudioRecordClientProxy> mProxy; bool mInOverrun; // whether recorder is currently in overrun state diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h index f9e625e..006af08 100644 --- a/include/media/AudioSystem.h +++ b/include/media/AudioSystem.h @@ -158,7 +158,7 @@ public: : samplingRate(0), format(AUDIO_FORMAT_DEFAULT), channelMask(0), frameCount(0), latency(0) {} uint32_t samplingRate; - int32_t format; + audio_format_t format; audio_channel_mask_t channelMask; size_t frameCount; uint32_t latency; diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h index da13a7f..ddb5842 100644 --- a/include/media/AudioTrack.h +++ b/include/media/AudioTrack.h @@ -116,6 +116,7 @@ public: * Returned status (from utils/Errors.h) can be: * - NO_ERROR: successful operation * - NO_INIT: audio server or audio hardware not initialized + * - BAD_VALUE: unsupported configuration */ static status_t getMinFrameCount(size_t* frameCount, @@ -170,9 +171,9 @@ public: */ AudioTrack( audio_stream_type_t streamType, - uint32_t sampleRate = 0, - audio_format_t format = AUDIO_FORMAT_DEFAULT, - audio_channel_mask_t channelMask = 0, + uint32_t sampleRate, + audio_format_t format, + audio_channel_mask_t, int frameCount = 0, audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE, callback_t cbf = NULL, @@ -194,10 +195,10 @@ public: */ AudioTrack( audio_stream_type_t streamType, - uint32_t sampleRate = 0, - audio_format_t format = AUDIO_FORMAT_DEFAULT, - audio_channel_mask_t channelMask = 0, - const sp<IMemory>& sharedBuffer = 0, + uint32_t sampleRate, + audio_format_t format, + audio_channel_mask_t channelMask, + const sp<IMemory>& sharedBuffer, audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE, callback_t cbf = NULL, void* user = NULL, @@ -227,10 +228,10 @@ public: * * threadCanCallJava: Whether callbacks are made from an attached thread and thus can call JNI. */ - status_t set(audio_stream_type_t streamType = AUDIO_STREAM_DEFAULT, - uint32_t sampleRate = 0, - audio_format_t format = AUDIO_FORMAT_DEFAULT, - audio_channel_mask_t channelMask = 0, + status_t set(audio_stream_type_t streamType, + uint32_t sampleRate, + audio_format_t format, + audio_channel_mask_t channelMask, int frameCount = 0, audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE, callback_t cbf = NULL, @@ -682,8 +683,9 @@ protected: STATE_STOPPING, } mState; + // for client callback handler callback_t mCbf; // callback handler for events, or NULL - void* mUserData; // for client callback handler + void* mUserData; // for notification APIs uint32_t mNotificationFramesReq; // requested number of frames between each @@ -726,6 +728,7 @@ protected: sp<AudioTrackClientProxy> mProxy; // primary owner of the memory bool mInUnderrun; // whether track is currently in underrun state + String8 mName; // server's name for this IAudioTrack private: class DeathNotifier : public IBinder::DeathRecipient { diff --git a/include/media/IAudioFlinger.h b/include/media/IAudioFlinger.h index de45aa8..49f921b 100644 --- a/include/media/IAudioFlinger.h +++ b/include/media/IAudioFlinger.h @@ -67,6 +67,10 @@ public: audio_io_handle_t output, pid_t tid, // -1 means unused, otherwise must be valid non-0 int *sessionId, + // input: ignored + // output: server's description of IAudioTrack for display in logs. + // Don't attempt to parse, as the format could change. + String8& name, status_t *status) = 0; virtual sp<IAudioRecord> openRecord( @@ -75,7 +79,7 @@ public: audio_format_t format, audio_channel_mask_t channelMask, size_t frameCount, - track_flags_t flags, + track_flags_t *flags, pid_t tid, // -1 means unused, otherwise must be valid non-0 int *sessionId, status_t *status) = 0; diff --git a/include/media/IOMX.h b/include/media/IOMX.h index 38f9d11..6d116f0 100644 --- a/include/media/IOMX.h +++ b/include/media/IOMX.h @@ -97,6 +97,10 @@ public: node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id *buffer) = 0; + virtual status_t updateGraphicBufferInMeta( + node_id node, OMX_U32 port_index, + const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer) = 0; + virtual status_t createInputSurface( node_id node, OMX_U32 port_index, sp<IGraphicBufferProducer> *bufferProducer) = 0; diff --git a/include/media/stagefright/SurfaceMediaSource.h b/include/media/stagefright/SurfaceMediaSource.h index 7d40379..db5f947 100644 --- a/include/media/stagefright/SurfaceMediaSource.h +++ b/include/media/stagefright/SurfaceMediaSource.h @@ -56,7 +56,7 @@ class GraphicBuffer; class SurfaceMediaSource : public MediaSource, public MediaBufferObserver, - protected BufferQueue::ConsumerListener { + protected ConsumerListener { public: enum { MIN_UNDEQUEUED_BUFFERS = 4}; diff --git a/include/media/stagefright/foundation/ALooperRoster.h b/include/media/stagefright/foundation/ALooperRoster.h index 2e5fd73..940fc55 100644 --- a/include/media/stagefright/foundation/ALooperRoster.h +++ b/include/media/stagefright/foundation/ALooperRoster.h @@ -30,6 +30,7 @@ struct ALooperRoster { const sp<ALooper> looper, const sp<AHandler> &handler); void unregisterHandler(ALooper::handler_id handlerID); + void unregisterStaleHandlers(); status_t postMessage(const sp<AMessage> &msg, int64_t delayUs = 0); void deliverMessage(const sp<AMessage> &msg); diff --git a/include/private/media/AudioTrackShared.h b/include/private/media/AudioTrackShared.h index b890180..1379379 100644 --- a/include/private/media/AudioTrackShared.h +++ b/include/private/media/AudioTrackShared.h @@ -31,6 +31,7 @@ namespace android { // ---------------------------------------------------------------------------- +// for audio_track_cblk_t::mFlags #define CBLK_UNDERRUN 0x01 // set by server immediately on output underrun, cleared by client #define CBLK_FORCEREADY 0x02 // set: track is considered ready immediately by AudioFlinger, // clear: track is ready when buffer full @@ -89,8 +90,11 @@ struct audio_track_cblk_t // The data members are grouped so that members accessed frequently and in the same context // are in the same line of data cache. - volatile uint32_t server; // updated asynchronously by server, - // "for entertainment purposes only" + uint32_t mServer; // Number of filled frames consumed by server (mIsOut), + // or filled frames provided by server (!mIsOut). + // It is updated asynchronously by server without a barrier. + // The value should be used "for entertainment purposes only", + // which means don't make important decisions based on it. size_t frameCount_; // used during creation to pass actual track buffer size // from AudioFlinger to client, and not referenced again @@ -118,13 +122,11 @@ private: // client write-only, server read-only uint16_t mSendLevel; // Fixed point U4.12 so 0x1000 means 1.0 - uint8_t mPad2; // unused + uint16_t mPad2; // unused public: - // read-only for client, server writes once at initialization and is then read-only - uint8_t mName; // normal tracks: track name, fast tracks: track index - volatile int32_t flags; + volatile int32_t mFlags; // combinations of CBLK_* // Cache line boundary (32 bytes) @@ -235,7 +237,7 @@ public: void interrupt(); size_t getPosition() { - return mEpoch + mCblk->server; + return mEpoch + mCblk->mServer; } void setEpoch(size_t epoch) { @@ -413,6 +415,13 @@ public: virtual void framesReadyIsCalledByMultipleThreads() { } bool setStreamEndDone(); // and return previous value + + // Add to the tally of underrun frames, and inform client of underrun + virtual void tallyUnderrunFrames(uint32_t frameCount); + + // Return the total number of frames which AudioFlinger desired but were unavailable, + // and thus which resulted in an underrun. + virtual uint32_t getUnderrunFrames() const { return mCblk->u.mStreaming.mUnderrunFrames; } }; class StaticAudioTrackServerProxy : public AudioTrackServerProxy { @@ -427,6 +436,8 @@ public: virtual void framesReadyIsCalledByMultipleThreads(); virtual status_t obtainBuffer(Buffer* buffer); virtual void releaseBuffer(Buffer* buffer); + virtual void tallyUnderrunFrames(uint32_t frameCount); + virtual uint32_t getUnderrunFrames() const { return 0; } private: ssize_t pollPosition(); // poll for state queue update, and return current position |