]> Git Repo - qemu.git/blobdiff - audio/audio.h
Merge remote-tracking branch 'remotes/vivier2/tags/trivial-branch-pull-request' into...
[qemu.git] / audio / audio.h
index 6dd2fd22e34ba6c49bdf80810ee76f1093e8f3ef..c74abb8c4718dd780afbf39b3598a5eb0e0fd7c4 100644 (file)
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
+
 #ifndef QEMU_AUDIO_H
 #define QEMU_AUDIO_H
 
-typedef void (*audio_callback_fn_t) (void *opaque, int avail);
+#include "qemu/queue.h"
+#include "qapi/qapi-types-audio.h"
+#include "hw/qdev-properties.h"
+
+typedef void (*audio_callback_fn) (void *opaque, int avail);
+
+#ifdef HOST_WORDS_BIGENDIAN
+#define AUDIO_HOST_ENDIANNESS 1
+#else
+#define AUDIO_HOST_ENDIANNESS 0
+#endif
+
+typedef struct audsettings {
+    int freq;
+    int nchannels;
+    AudioFormat fmt;
+    int endianness;
+} audsettings;
+
+audsettings audiodev_to_audsettings(AudiodevPerDirectionOptions *pdo);
+int audioformat_bytes_per_sample(AudioFormat fmt);
+int audio_buffer_frames(AudiodevPerDirectionOptions *pdo,
+                        audsettings *as, int def_usecs);
+int audio_buffer_samples(AudiodevPerDirectionOptions *pdo,
+                         audsettings *as, int def_usecs);
+int audio_buffer_bytes(AudiodevPerDirectionOptions *pdo,
+                       audsettings *as, int def_usecs);
 
 typedef enum {
-  AUD_FMT_U8,
-  AUD_FMT_S8,
-  AUD_FMT_U16,
-  AUD_FMT_S16
-} audfmt_e;
+    AUD_CNOTIFY_ENABLE,
+    AUD_CNOTIFY_DISABLE
+} audcnotification_e;
+
+struct audio_capture_ops {
+    void (*notify) (void *opaque, audcnotification_e cmd);
+    void (*capture) (void *opaque, void *buf, int size);
+    void (*destroy) (void *opaque);
+};
+
+struct capture_ops {
+    void (*info) (void *opaque);
+    void (*destroy) (void *opaque);
+};
+
+typedef struct CaptureState {
+    void *opaque;
+    struct capture_ops ops;
+    QLIST_ENTRY (CaptureState) entries;
+} CaptureState;
 
 typedef struct SWVoiceOut SWVoiceOut;
+typedef struct CaptureVoiceOut CaptureVoiceOut;
 typedef struct SWVoiceIn SWVoiceIn;
 
+typedef struct AudioState AudioState;
+typedef struct QEMUSoundCard {
+    char *name;
+    AudioState *state;
+    QLIST_ENTRY (QEMUSoundCard) entries;
+} QEMUSoundCard;
+
 typedef struct QEMUAudioTimeStamp {
     uint64_t old_ts;
 } QEMUAudioTimeStamp;
 
-void AUD_vlog (const char *cap, const char *fmt, va_list ap);
-void AUD_log (const char *cap, const char *fmt, ...)
-#ifdef __GNUC__
-    __attribute__ ((__format__ (__printf__, 2, 3)))
-#endif
-    ;
+void AUD_vlog (const char *cap, const char *fmt, va_list ap) GCC_FMT_ATTR(2, 0);
+void AUD_log (const char *cap, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
 
-void AUD_init (void);
-void AUD_help (void);
+void AUD_register_card (const char *name, QEMUSoundCard *card);
+void AUD_remove_card (QEMUSoundCard *card);
+CaptureVoiceOut *AUD_add_capture(
+    AudioState *s,
+    struct audsettings *as,
+    struct audio_capture_ops *ops,
+    void *opaque
+    );
+void AUD_del_capture (CaptureVoiceOut *cap, void *cb_opaque);
 
-SWVoiceOut  *AUD_open_out (
+SWVoiceOut *AUD_open_out (
+    QEMUSoundCard *card,
     SWVoiceOut *sw,
     const char *name,
     void *callback_opaque,
-    audio_callback_fn_t callback_fn,
-    int freq,
-    int nchannels,
-    audfmt_e fmt
+    audio_callback_fn callback_fn,
+    struct audsettings *settings
     );
-void         AUD_close_out (SWVoiceOut *sw);
-int          AUD_write (SWVoiceOut *sw, void *pcm_buf, int size);
-int          AUD_get_buffer_size_out (SWVoiceOut *sw);
-void         AUD_set_active_out (SWVoiceOut *sw, int on);
-int          AUD_is_active_out (SWVoiceOut *sw);
-void         AUD_init_time_stamp_out (SWVoiceOut *sw,
-                                      QEMUAudioTimeStamp *ts);
-uint64_t     AUD_time_stamp_get_elapsed_usec_out (SWVoiceOut *sw,
-                                                  QEMUAudioTimeStamp *ts);
-
-SWVoiceIn   *AUD_open_in (
+
+void AUD_close_out (QEMUSoundCard *card, SWVoiceOut *sw);
+size_t AUD_write (SWVoiceOut *sw, void *pcm_buf, size_t size);
+int  AUD_get_buffer_size_out (SWVoiceOut *sw);
+void AUD_set_active_out (SWVoiceOut *sw, int on);
+int  AUD_is_active_out (SWVoiceOut *sw);
+
+void     AUD_init_time_stamp_out (SWVoiceOut *sw, QEMUAudioTimeStamp *ts);
+uint64_t AUD_get_elapsed_usec_out (SWVoiceOut *sw, QEMUAudioTimeStamp *ts);
+
+void AUD_set_volume_out (SWVoiceOut *sw, int mute, uint8_t lvol, uint8_t rvol);
+void AUD_set_volume_in (SWVoiceIn *sw, int mute, uint8_t lvol, uint8_t rvol);
+
+SWVoiceIn *AUD_open_in (
+    QEMUSoundCard *card,
     SWVoiceIn *sw,
     const char *name,
     void *callback_opaque,
-    audio_callback_fn_t callback_fn,
-    int freq,
-    int nchannels,
-    audfmt_e fmt
+    audio_callback_fn callback_fn,
+    struct audsettings *settings
     );
-void         AUD_close_in (SWVoiceIn *sw);
-int          AUD_read (SWVoiceIn *sw, void *pcm_buf, int size);
-void         AUD_adjust_in (SWVoiceIn *sw, int leftover);
-void         AUD_set_active_in (SWVoiceIn *sw, int on);
-int          AUD_is_active_in (SWVoiceIn *sw);
-void         AUD_init_time_stamp_in (SWVoiceIn *sw,
-                                     QEMUAudioTimeStamp *ts);
-uint64_t     AUD_time_stamp_get_elapsed_usec_in (SWVoiceIn *sw,
-                                                 QEMUAudioTimeStamp *ts);
+
+void AUD_close_in (QEMUSoundCard *card, SWVoiceIn *sw);
+size_t AUD_read (SWVoiceIn *sw, void *pcm_buf, size_t size);
+void AUD_set_active_in (SWVoiceIn *sw, int on);
+int  AUD_is_active_in (SWVoiceIn *sw);
+
+void     AUD_init_time_stamp_in (SWVoiceIn *sw, QEMUAudioTimeStamp *ts);
+uint64_t AUD_get_elapsed_usec_in (SWVoiceIn *sw, QEMUAudioTimeStamp *ts);
 
 static inline void *advance (void *p, int incr)
 {
@@ -94,24 +147,25 @@ static inline void *advance (void *p, int incr)
     return (d + incr);
 }
 
-uint32_t popcount (uint32_t u);
-inline uint32_t lsbindex (uint32_t u);
-
-#ifdef __GNUC__
-#define audio_MIN(a, b) ( __extension__ ({      \
-    __typeof (a) ta = a;                        \
-    __typeof (b) tb = b;                        \
-    ((ta)>(tb)?(tb):(ta));                      \
-}))
-
-#define audio_MAX(a, b) ( __extension__ ({      \
-    __typeof (a) ta = a;                        \
-    __typeof (b) tb = b;                        \
-    ((ta)<(tb)?(tb):(ta));                      \
-}))
-#else
-#define audio_MIN(a, b) ((a)>(b)?(b):(a))
-#define audio_MAX(a, b) ((a)<(b)?(b):(a))
-#endif
+int wav_start_capture(AudioState *state, CaptureState *s, const char *path,
+                      int freq, int bits, int nchannels);
+
+bool audio_is_cleaning_up(void);
+void audio_cleanup(void);
+
+void audio_sample_to_uint64(void *samples, int pos,
+                            uint64_t *left, uint64_t *right);
+void audio_sample_from_uint64(void *samples, int pos,
+                            uint64_t left, uint64_t right);
+
+void audio_parse_option(const char *opt);
+void audio_init_audiodevs(void);
+void audio_legacy_help(void);
+
+AudioState *audio_state_by_name(const char *name);
+const char *audio_get_id(QEMUSoundCard *card);
+
+#define DEFINE_AUDIO_PROPERTIES(_s, _f)         \
+    DEFINE_PROP_AUDIODEV("audiodev", _s, _f)
 
-#endif  /* audio.h */
+#endif /* QEMU_AUDIO_H */
This page took 0.026211 seconds and 4 git commands to generate.