summaryrefslogtreecommitdiffstats
path: root/include/hardware/audio.h
diff options
context:
space:
mode:
authorStewart Miles <smiles@google.com>2014-05-01 09:03:27 -0700
committerStewart Miles <smiles@google.com>2014-05-12 12:35:37 -0700
commit84d35492b145cebc000f8fd72818eb25b8e65c04 (patch)
tree0a7adfd3f93de27984377aa1e210685540891ff8 /include/hardware/audio.h
parent4c847f2b79d99b1fecf487b167dd5bbe3ea7da06 (diff)
downloadhardware_libhardware-84d35492b145cebc000f8fd72818eb25b8e65c04.zip
hardware_libhardware-84d35492b145cebc000f8fd72818eb25b8e65c04.tar.gz
hardware_libhardware-84d35492b145cebc000f8fd72818eb25b8e65c04.tar.bz2
Described restrictions for common HAL object methods.
Inheritance of HAL object is performed by composing a child structure of a single parent structure located at offset 0 followed by new data members and function pointers in the child structure. For example, struct child { struct parent common; int a_data_member; void (*a_method)(struct child *c, int v); }; HAL code assumes this layout when accessing child structures given a pointer to a parent structure such that users write code like the following... void child_method(struct *parent, int v) { struct child * c = (struct child*)parent; // do stuff with c } Code above will break if a member is added before "common" in "struct child". This change adds comments that describe the restriction on the location of parent HAL objects within a derived HAL object. HAL objects that already have comments that describe the required location of parent objects are not modified. Change-Id: Ibe4300275286ef275b2097534c84f1029d761d87
Diffstat (limited to 'include/hardware/audio.h')
-rw-r--r--include/hardware/audio.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/include/hardware/audio.h b/include/hardware/audio.h
index b53cbff..6c28def 100644
--- a/include/hardware/audio.h
+++ b/include/hardware/audio.h
@@ -260,6 +260,11 @@ typedef enum {
*/
struct audio_stream_out {
+ /**
+ * Common methods of the audio stream out. This *must* be the first member of audio_stream_out
+ * as users of this structure will cast a audio_stream to audio_stream_out pointer in contexts
+ * where it's known the audio_stream references an audio_stream_out.
+ */
struct audio_stream common;
/**
@@ -383,6 +388,11 @@ struct audio_stream_out {
typedef struct audio_stream_out audio_stream_out_t;
struct audio_stream_in {
+ /**
+ * Common methods of the audio stream in. This *must* be the first member of audio_stream_in
+ * as users of this structure will cast a audio_stream to audio_stream_in pointer in contexts
+ * where it's known the audio_stream references an audio_stream_in.
+ */
struct audio_stream common;
/** set the input gain for the audio driver. This method is for
@@ -439,6 +449,11 @@ struct audio_module {
};
struct audio_hw_device {
+ /**
+ * Common methods of the audio device. This *must* be the first member of audio_hw_device
+ * as users of this structure will cast a hw_device_t to audio_hw_device pointer in contexts
+ * where it's known the hw_device_t references an audio_hw_device.
+ */
struct hw_device_t common;
/**