diff options
Diffstat (limited to 'include')
21 files changed, 318 insertions, 43 deletions
diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h index cf34991..dd63a23 100644 --- a/include/media/AudioSystem.h +++ b/include/media/AudioSystem.h @@ -149,6 +149,11 @@ public: static void acquireAudioSessionId(int audioSession, pid_t pid); static void releaseAudioSessionId(int audioSession, pid_t pid); + // Get the HW synchronization source used for an audio session. + // Return a valid source or AUDIO_HW_SYNC_INVALID if an error occurs + // or no HW sync source is used. + static audio_hw_sync_t getAudioHwSyncForSession(audio_session_t sessionId); + // types of io configuration change events received with ioConfigChanged() enum io_config_event { OUTPUT_OPENED, @@ -309,6 +314,12 @@ public: /* Set audio port configuration */ static status_t setAudioPortConfig(const struct audio_port_config *config); + + static status_t acquireSoundTriggerSession(audio_session_t *session, + audio_io_handle_t *ioHandle, + audio_devices_t *device); + static status_t releaseSoundTriggerSession(audio_session_t session); + // ---------------------------------------------------------------------------- class AudioPortCallback : public RefBase diff --git a/include/media/IAudioFlinger.h b/include/media/IAudioFlinger.h index 82ec09c..31a14f0 100644 --- a/include/media/IAudioFlinger.h +++ b/include/media/IAudioFlinger.h @@ -235,6 +235,8 @@ public: /* Set audio port configuration */ virtual status_t setAudioPortConfig(const struct audio_port_config *config) = 0; + /* Get the HW synchronization source used for an audio session */ + virtual audio_hw_sync_t getAudioHwSyncForSession(audio_session_t sessionId) = 0; }; diff --git a/include/media/IAudioPolicyService.h b/include/media/IAudioPolicyService.h index abbda32..c251439 100644 --- a/include/media/IAudioPolicyService.h +++ b/include/media/IAudioPolicyService.h @@ -136,6 +136,12 @@ public: virtual status_t setAudioPortConfig(const struct audio_port_config *config) = 0; virtual void registerClient(const sp<IAudioPolicyServiceClient>& client) = 0; + + virtual status_t acquireSoundTriggerSession(audio_session_t *session, + audio_io_handle_t *ioHandle, + audio_devices_t *device) = 0; + + virtual status_t releaseSoundTriggerSession(audio_session_t session) = 0; }; diff --git a/include/media/IDrm.h b/include/media/IDrm.h index 32ae28e..68de87a 100644 --- a/include/media/IDrm.h +++ b/include/media/IDrm.h @@ -70,6 +70,8 @@ struct IDrm : public IInterface { Vector<uint8_t> &certificate, Vector<uint8_t> &wrappedKey) = 0; + virtual status_t unprovisionDevice() = 0; + virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops) = 0; virtual status_t releaseSecureStops(Vector<uint8_t> const &ssRelease) = 0; diff --git a/include/media/IMediaCodecList.h b/include/media/IMediaCodecList.h new file mode 100644 index 0000000..e93ea8b --- /dev/null +++ b/include/media/IMediaCodecList.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_IMEDIACODECLIST_H +#define ANDROID_IMEDIACODECLIST_H + +#include <utils/Errors.h> // for status_t +#include <binder/IInterface.h> +#include <binder/Parcel.h> + +namespace android { + +struct MediaCodecInfo; + +class IMediaCodecList: public IInterface +{ +public: + DECLARE_META_INTERFACE(MediaCodecList); + + virtual size_t countCodecs() const = 0; + virtual sp<MediaCodecInfo> getCodecInfo(size_t index) const = 0; + + virtual ssize_t findCodecByType( + const char *type, bool encoder, size_t startIndex = 0) const = 0; + + virtual ssize_t findCodecByName(const char *name) const = 0; +}; + +// ---------------------------------------------------------------------------- + +class BnMediaCodecList: public BnInterface<IMediaCodecList> +{ +public: + virtual status_t onTransact( uint32_t code, + const Parcel& data, + Parcel* reply, + uint32_t flags = 0); +}; + +}; // namespace android + +#endif // ANDROID_IMEDIACODECLIST_H diff --git a/include/media/IMediaPlayerService.h b/include/media/IMediaPlayerService.h index 5b45376..d7e584a 100644 --- a/include/media/IMediaPlayerService.h +++ b/include/media/IMediaPlayerService.h @@ -34,6 +34,7 @@ namespace android { struct ICrypto; struct IDrm; struct IHDCP; +struct IMediaCodecList; struct IMediaHTTPService; class IMediaRecorder; class IOMX; @@ -65,6 +66,7 @@ public: virtual sp<ICrypto> makeCrypto() = 0; virtual sp<IDrm> makeDrm() = 0; virtual sp<IHDCP> makeHDCP(bool createEncryptionModule) = 0; + virtual sp<IMediaCodecList> getCodecList() const = 0; // Connects to a remote display. // 'iface' specifies the address of the local interface on which to listen for diff --git a/include/media/MediaCodecInfo.h b/include/media/MediaCodecInfo.h new file mode 100644 index 0000000..29315ce --- /dev/null +++ b/include/media/MediaCodecInfo.h @@ -0,0 +1,121 @@ +/* + * Copyright 2014, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MEDIA_CODEC_INFO_H_ + +#define MEDIA_CODEC_INFO_H_ + +#include <binder/Parcel.h> +#include <media/stagefright/foundation/ABase.h> +#include <media/stagefright/foundation/AString.h> + +#include <sys/types.h> +#include <utils/Errors.h> +#include <utils/KeyedVector.h> +#include <utils/RefBase.h> +#include <utils/Vector.h> +#include <utils/StrongPointer.h> + +namespace android { + +struct AMessage; +struct Parcel; +struct CodecCapabilities; + +struct MediaCodecInfo : public RefBase { + struct ProfileLevel { + uint32_t mProfile; + uint32_t mLevel; + }; + + struct Capabilities : public RefBase { + void getSupportedProfileLevels(Vector<ProfileLevel> *profileLevels) const; + void getSupportedColorFormats(Vector<uint32_t> *colorFormats) const; + uint32_t getFlags() const; + const sp<AMessage> &getDetails() const; + + private: + Vector<ProfileLevel> mProfileLevels; + Vector<uint32_t> mColorFormats; + uint32_t mFlags; + sp<AMessage> mDetails; + + Capabilities(); + + // read object from parcel even if object creation fails + static sp<Capabilities> FromParcel(const Parcel &parcel); + status_t writeToParcel(Parcel *parcel) const; + + DISALLOW_EVIL_CONSTRUCTORS(Capabilities); + + friend class MediaCodecInfo; + }; + + bool isEncoder() const; + bool hasQuirk(const char *name) const; + void getSupportedMimes(Vector<AString> *mimes) const; + const sp<Capabilities> &getCapabilitiesFor(const char *mime) const; + const char *getCodecName() const; + + /** + * Serialization over Binder + */ + static sp<MediaCodecInfo> FromParcel(const Parcel &parcel); + status_t writeToParcel(Parcel *parcel) const; + +private: + // variable set only in constructor - these are accessed by MediaCodecList + // to avoid duplication of same variables + AString mName; + bool mIsEncoder; + bool mHasSoleMime; // was initialized with mime + + Vector<AString> mQuirks; + KeyedVector<AString, sp<Capabilities> > mCaps; + + sp<Capabilities> mCurrentCaps; // currently initalized capabilities + + ssize_t getCapabilityIndex(const char *mime) const; + + /* Methods used by MediaCodecList to construct the info + * object from XML. + * + * After info object is created: + * - additional quirks can be added + * - additional mimes can be added + * - OMX codec capabilities can be set for the current mime-type + * - a capability detail can be set for the current mime-type + * - a feature can be set for the current mime-type + * - info object can be completed when parsing of a mime-type is done + */ + MediaCodecInfo(AString name, bool encoder, const char *mime); + void addQuirk(const char *name); + status_t addMime(const char *mime); + status_t initializeCapabilities(const CodecCapabilities &caps); + void addDetail(const AString &key, const AString &value); + void addFeature(const AString &key, int32_t value); + void complete(); + + DISALLOW_EVIL_CONSTRUCTORS(MediaCodecInfo); + + friend class MediaCodecList; +}; + +} // namespace android + +#endif // MEDIA_CODEC_INFO_H_ + + diff --git a/include/media/stagefright/ACodec.h b/include/media/stagefright/ACodec.h index ca5076d..3a6bb9e 100644 --- a/include/media/stagefright/ACodec.h +++ b/include/media/stagefright/ACodec.h @@ -76,6 +76,10 @@ struct ACodec : public AHierarchicalStateMachine, public CodecBase { DISALLOW_EVIL_CONSTRUCTORS(PortDescription); }; + static bool isFlexibleColorFormat( + const sp<IOMX> &omx, IOMX::node_id node, + uint32_t colorFormat, OMX_U32 *flexibleEquivalent); + protected: virtual ~ACodec(); @@ -316,7 +320,10 @@ private: OMX_ERRORTYPE error = OMX_ErrorUndefined, status_t internalError = UNKNOWN_ERROR); - static void describeDefaultColorFormat(DescribeColorFormatParams &describeParams); + static bool describeDefaultColorFormat(DescribeColorFormatParams &describeParams); + static bool describeColorFormat( + const sp<IOMX> &omx, IOMX::node_id node, + DescribeColorFormatParams &describeParams); status_t requestIDRFrame(); status_t setParameters(const sp<AMessage> ¶ms); diff --git a/include/media/stagefright/DataSource.h b/include/media/stagefright/DataSource.h index f8787dd..3fb9e36 100644 --- a/include/media/stagefright/DataSource.h +++ b/include/media/stagefright/DataSource.h @@ -31,6 +31,7 @@ namespace android { struct AMessage; +struct AString; struct IMediaHTTPService; class String8; @@ -46,7 +47,8 @@ public: static sp<DataSource> CreateFromURI( const sp<IMediaHTTPService> &httpService, const char *uri, - const KeyedVector<String8, String8> *headers = NULL); + const KeyedVector<String8, String8> *headers = NULL, + AString *sniffedMIME = NULL); DataSource() {} @@ -100,6 +102,10 @@ protected: virtual ~DataSource() {} private: + enum { + kDefaultMetaSize = 200000, + }; + static Mutex gSnifferMutex; static List<SnifferFunc> gSniffers; static bool gSniffersRegistered; diff --git a/include/media/stagefright/MediaCodec.h b/include/media/stagefright/MediaCodec.h index 4ff0d62..b87a09e 100644 --- a/include/media/stagefright/MediaCodec.h +++ b/include/media/stagefright/MediaCodec.h @@ -55,10 +55,10 @@ struct MediaCodec : public AHandler { struct BatteryNotifier; static sp<MediaCodec> CreateByType( - const sp<ALooper> &looper, const char *mime, bool encoder); + const sp<ALooper> &looper, const char *mime, bool encoder, status_t *err = NULL); static sp<MediaCodec> CreateByComponentName( - const sp<ALooper> &looper, const char *name); + const sp<ALooper> &looper, const char *name, status_t *err = NULL); status_t configure( const sp<AMessage> &format, @@ -223,6 +223,7 @@ private: AString mComponentName; uint32_t mReplyID; uint32_t mFlags; + status_t mStickyError; sp<Surface> mNativeWindow; SoftwareRenderer *mSoftRenderer; sp<AMessage> mOutputFormat; @@ -304,6 +305,18 @@ private: void updateBatteryStat(); bool isExecuting() const; + /* called to get the last codec error when the sticky flag is set. + * if no such codec error is found, returns UNKNOWN_ERROR. + */ + inline status_t getStickyError() const { + return mStickyError != 0 ? mStickyError : UNKNOWN_ERROR; + } + + inline void setStickyError(status_t err) { + mFlags |= kFlagStickyError; + mStickyError = err; + } + DISALLOW_EVIL_CONSTRUCTORS(MediaCodec); }; diff --git a/include/media/stagefright/MediaCodecList.h b/include/media/stagefright/MediaCodecList.h index c11fcc9..8605d99 100644 --- a/include/media/stagefright/MediaCodecList.h +++ b/include/media/stagefright/MediaCodecList.h @@ -20,6 +20,9 @@ #include <media/stagefright/foundation/ABase.h> #include <media/stagefright/foundation/AString.h> +#include <media/IMediaCodecList.h> +#include <media/IOMX.h> +#include <media/MediaCodecInfo.h> #include <sys/types.h> #include <utils/Errors.h> @@ -31,32 +34,22 @@ namespace android { struct AMessage; -struct MediaCodecList { - static const MediaCodecList *getInstance(); +struct MediaCodecList : public BnMediaCodecList { + static sp<IMediaCodecList> getInstance(); - ssize_t findCodecByType( + virtual ssize_t findCodecByType( const char *type, bool encoder, size_t startIndex = 0) const; - ssize_t findCodecByName(const char *name) const; + virtual ssize_t findCodecByName(const char *name) const; - size_t countCodecs() const; - const char *getCodecName(size_t index) const; - bool isEncoder(size_t index) const; - bool codecHasQuirk(size_t index, const char *quirkName) const; + virtual size_t countCodecs() const; - status_t getSupportedTypes(size_t index, Vector<AString> *types) const; + virtual sp<MediaCodecInfo> getCodecInfo(size_t index) const { + return mCodecInfos.itemAt(index); + } - struct ProfileLevel { - uint32_t mProfile; - uint32_t mLevel; - }; - status_t getCodecCapabilities( - size_t index, const char *type, - Vector<ProfileLevel> *profileLevels, - Vector<uint32_t> *colorFormats, - uint32_t *flags, - // TODO default argument is only for compatibility with existing JNI - sp<AMessage> *capabilities = NULL) const; + // to be used by MediaPlayerService alone + static sp<IMediaCodecList> getLocalInstance(); private: enum Section { @@ -70,17 +63,8 @@ private: SECTION_INCLUDE, }; - struct CodecInfo { - AString mName; - bool mIsEncoder; - uint32_t mTypes; - uint32_t mSoleType; - uint32_t mQuirks; - KeyedVector<uint32_t, sp<AMessage> > mCaps; - sp<AMessage> mCurrentCaps; - }; - - static MediaCodecList *sCodecList; + static sp<IMediaCodecList> sCodecList; + static sp<IMediaCodecList> sRemoteList; status_t mInitCheck; Section mCurrentSection; @@ -88,9 +72,9 @@ private: int32_t mDepth; AString mHrefBase; - Vector<CodecInfo> mCodecInfos; - KeyedVector<AString, size_t> mCodecQuirks; - KeyedVector<AString, size_t> mTypes; + Vector<sp<MediaCodecInfo> > mCodecInfos; + sp<MediaCodecInfo> mCurrentInfo; + sp<IOMX> mOMX; MediaCodecList(); ~MediaCodecList(); @@ -117,6 +101,8 @@ private: status_t addFeature(const char **attrs); void addType(const char *name); + status_t initializeCapabilities(const char *type); + DISALLOW_EVIL_CONSTRUCTORS(MediaCodecList); }; diff --git a/include/media/stagefright/MediaCodecSource.h b/include/media/stagefright/MediaCodecSource.h index 4b18a0b..e1b2830 100644 --- a/include/media/stagefright/MediaCodecSource.h +++ b/include/media/stagefright/MediaCodecSource.h @@ -106,7 +106,6 @@ private: bool mStarted; bool mStopping; bool mDoMoreWorkPending; - bool mPullerReachedEOS; sp<AMessage> mEncoderActivityNotify; sp<IGraphicBufferProducer> mGraphicBufferProducer; Vector<sp<ABuffer> > mEncoderInputBuffers; @@ -123,7 +122,7 @@ private: Mutex mOutputBufferLock; Condition mOutputBufferCond; List<MediaBuffer*> mOutputBufferQueue; - bool mEncodedReachedEOS; + bool mEncoderReachedEOS; status_t mErrorCode; DISALLOW_EVIL_CONSTRUCTORS(MediaCodecSource); diff --git a/include/media/stagefright/MediaErrors.h b/include/media/stagefright/MediaErrors.h index 686f286..7540e07 100644 --- a/include/media/stagefright/MediaErrors.h +++ b/include/media/stagefright/MediaErrors.h @@ -23,6 +23,18 @@ namespace android { enum { + // status_t map for errors in the media framework + // OK or NO_ERROR or 0 represents no error. + + // See system/core/include/utils/Errors.h + // System standard errors from -1 through (possibly) -133 + // + // Errors with special meanings and side effects. + // INVALID_OPERATION: Operation attempted in an illegal state (will try to signal to app). + // DEAD_OBJECT: Signal from CodecBase to MediaCodec that MediaServer has died. + // NAME_NOT_FOUND: Signal from CodecBase to MediaCodec that the component was not found. + + // Media errors MEDIA_ERROR_BASE = -1000, ERROR_ALREADY_CONNECTED = MEDIA_ERROR_BASE, @@ -64,8 +76,34 @@ enum { // Heartbeat Error Codes HEARTBEAT_ERROR_BASE = -3000, ERROR_HEARTBEAT_TERMINATE_REQUESTED = HEARTBEAT_ERROR_BASE, + + // NDK Error codes + // frameworks/av/include/ndk/NdkMediaError.h + // from -10000 (0xFFFFD8F0 - 0xFFFFD8EC) + // from -20000 (0xFFFFB1E0 - 0xFFFFB1D7) + + // Codec errors are permitted from 0x80001000 through 0x9000FFFF + ERROR_CODEC_MAX = (signed)0x9000FFFF, + ERROR_CODEC_MIN = (signed)0x80001000, + + // System unknown errors from 0x80000000 - 0x80000007 (INT32_MIN + 7) + // See system/core/include/utils/Errors.h +}; + +// action codes for MediaCodecs that tell the upper layer and application +// the severity of any error. +enum ActionCode { + ACTION_CODE_FATAL, + ACTION_CODE_TRANSIENT, + ACTION_CODE_RECOVERABLE, }; +// returns true if err is a recognized DRM error code +static inline bool isCryptoError(status_t err) { + return (ERROR_DRM_RESOURCE_BUSY <= err && err <= ERROR_DRM_UNKNOWN) + || (ERROR_DRM_VENDOR_MIN <= err && err <= ERROR_DRM_VENDOR_MAX); +} + } // namespace android #endif // MEDIA_ERRORS_H_ diff --git a/include/media/stagefright/MediaExtractor.h b/include/media/stagefright/MediaExtractor.h index 3076a96..183933a 100644 --- a/include/media/stagefright/MediaExtractor.h +++ b/include/media/stagefright/MediaExtractor.h @@ -65,6 +65,8 @@ public: virtual char* getDrmTrackInfo(size_t trackID, int *len) { return NULL; } + virtual void setUID(uid_t uid) { + } protected: MediaExtractor() : mIsDrm(false) {} diff --git a/include/media/stagefright/OMXCodec.h b/include/media/stagefright/OMXCodec.h index 5590b60..e341160 100644 --- a/include/media/stagefright/OMXCodec.h +++ b/include/media/stagefright/OMXCodec.h @@ -28,7 +28,7 @@ namespace android { -struct MediaCodecList; +struct MediaCodecInfo; class MemoryDealer; struct OMXCodecObserver; struct CodecProfileLevel; @@ -115,7 +115,7 @@ struct OMXCodec : public MediaSource, Vector<CodecNameAndQuirks> *matchingCodecNamesAndQuirks); static uint32_t getComponentQuirks( - const MediaCodecList *list, size_t index); + const sp<MediaCodecInfo> &list); static bool findCodecQuirks(const char *componentName, uint32_t *quirks); diff --git a/include/media/stagefright/foundation/ABase.h b/include/media/stagefright/foundation/ABase.h index 949d49e..72e3d87 100644 --- a/include/media/stagefright/foundation/ABase.h +++ b/include/media/stagefright/foundation/ABase.h @@ -18,6 +18,8 @@ #define A_BASE_H_ +#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a))) + #define DISALLOW_EVIL_CONSTRUCTORS(name) \ name(const name &); \ name &operator=(const name &) diff --git a/include/media/stagefright/foundation/AString.h b/include/media/stagefright/foundation/AString.h index 4be3c6d..7c98699 100644 --- a/include/media/stagefright/foundation/AString.h +++ b/include/media/stagefright/foundation/AString.h @@ -18,11 +18,13 @@ #define A_STRING_H_ +#include <utils/Errors.h> #include <sys/types.h> namespace android { struct String8; +struct Parcel; struct AString { AString(); @@ -77,7 +79,9 @@ struct AString { bool operator>(const AString &other) const; int compare(const AString &other) const; + int compareIgnoreCase(const AString &other) const; + bool equalsIgnoreCase(const AString &other) const; bool startsWith(const char *prefix) const; bool endsWith(const char *suffix) const; bool startsWithIgnoreCase(const char *prefix) const; @@ -85,6 +89,9 @@ struct AString { void tolower(); + static AString FromParcel(const Parcel &parcel); + status_t writeToParcel(Parcel *parcel) const; + private: static const char *kEmptyString; diff --git a/include/soundtrigger/ISoundTriggerClient.h b/include/soundtrigger/ISoundTriggerClient.h index 7f86d02..480429a 100644 --- a/include/soundtrigger/ISoundTriggerClient.h +++ b/include/soundtrigger/ISoundTriggerClient.h @@ -31,6 +31,10 @@ public: virtual void onRecognitionEvent(const sp<IMemory>& eventMemory) = 0; + virtual void onSoundModelEvent(const sp<IMemory>& eventMemory) = 0; + + virtual void onServiceStateChange(const sp<IMemory>& eventMemory) = 0; + }; // ---------------------------------------------------------------------------- diff --git a/include/soundtrigger/ISoundTriggerHwService.h b/include/soundtrigger/ISoundTriggerHwService.h index 05a764a..ae0cb01 100644 --- a/include/soundtrigger/ISoundTriggerHwService.h +++ b/include/soundtrigger/ISoundTriggerHwService.h @@ -39,6 +39,8 @@ public: virtual status_t attach(const sound_trigger_module_handle_t handle, const sp<ISoundTriggerClient>& client, sp<ISoundTrigger>& module) = 0; + + virtual status_t setCaptureState(bool active) = 0; }; // ---------------------------------------------------------------------------- diff --git a/include/soundtrigger/SoundTrigger.h b/include/soundtrigger/SoundTrigger.h index 1f7f286..bf5e1de 100644 --- a/include/soundtrigger/SoundTrigger.h +++ b/include/soundtrigger/SoundTrigger.h @@ -18,6 +18,7 @@ #define ANDROID_HARDWARE_SOUNDTRIGGER_H #include <binder/IBinder.h> +#include <utils/threads.h> #include <soundtrigger/SoundTriggerCallback.h> #include <soundtrigger/ISoundTrigger.h> #include <soundtrigger/ISoundTriggerHwService.h> @@ -32,12 +33,15 @@ class SoundTrigger : public BnSoundTriggerClient, public IBinder::DeathRecipient { public: + + virtual ~SoundTrigger(); + static status_t listModules(struct sound_trigger_module_descriptor *modules, uint32_t *numModules); static sp<SoundTrigger> attach(const sound_trigger_module_handle_t module, const sp<SoundTriggerCallback>& callback); - virtual ~SoundTrigger(); + static status_t setCaptureState(bool active); void detach(); @@ -51,6 +55,8 @@ public: // BpSoundTriggerClient virtual void onRecognitionEvent(const sp<IMemory>& eventMemory); + virtual void onSoundModelEvent(const sp<IMemory>& eventMemory); + virtual void onServiceStateChange(const sp<IMemory>& eventMemory); //IBinder::DeathRecipient virtual void binderDied(const wp<IBinder>& who); diff --git a/include/soundtrigger/SoundTriggerCallback.h b/include/soundtrigger/SoundTriggerCallback.h index 8a5ba02..b5277f2 100644 --- a/include/soundtrigger/SoundTriggerCallback.h +++ b/include/soundtrigger/SoundTriggerCallback.h @@ -31,6 +31,10 @@ public: virtual void onRecognitionEvent(struct sound_trigger_recognition_event *event) = 0; + virtual void onSoundModelEvent(struct sound_trigger_model_event *event) = 0; + + virtual void onServiceStateChange(sound_trigger_service_state_t state) = 0; + virtual void onServiceDied() = 0; }; |