hal-audio.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /* SPDX-License-Identifier: Apache-2.0 */
  2. /*
  3. * Copyright (C) 2013 Intel Corporation
  4. *
  5. */
  6. #include <time.h>
  7. #include <hardware/audio.h>
  8. #if __BYTE_ORDER == __LITTLE_ENDIAN
  9. struct rtp_header {
  10. unsigned cc:4;
  11. unsigned x:1;
  12. unsigned p:1;
  13. unsigned v:2;
  14. unsigned pt:7;
  15. unsigned m:1;
  16. uint16_t sequence_number;
  17. uint32_t timestamp;
  18. uint32_t ssrc;
  19. uint32_t csrc[0];
  20. } __attribute__ ((packed));
  21. #elif __BYTE_ORDER == __BIG_ENDIAN
  22. struct rtp_header {
  23. unsigned v:2;
  24. unsigned p:1;
  25. unsigned x:1;
  26. unsigned cc:4;
  27. unsigned m:1;
  28. unsigned pt:7;
  29. uint16_t sequence_number;
  30. uint32_t timestamp;
  31. uint32_t ssrc;
  32. uint32_t csrc[0];
  33. } __attribute__ ((packed));
  34. #else
  35. #error "Unknown byte order"
  36. #endif
  37. struct media_packet {
  38. uint8_t data[0];
  39. };
  40. struct media_packet_rtp {
  41. struct rtp_header hdr;
  42. uint8_t data[0];
  43. };
  44. struct audio_input_config {
  45. uint32_t rate;
  46. uint32_t channels;
  47. audio_format_t format;
  48. };
  49. struct audio_codec {
  50. uint8_t type;
  51. bool use_rtp;
  52. bool (*load) (void);
  53. void (*unload) (void);
  54. int (*get_presets) (struct audio_preset *preset, size_t *len);
  55. bool (*init) (struct audio_preset *preset, uint16_t mtu,
  56. void **codec_data);
  57. bool (*cleanup) (void *codec_data);
  58. bool (*get_config) (void *codec_data,
  59. struct audio_input_config *config);
  60. size_t (*get_buffer_size) (void *codec_data);
  61. size_t (*get_mediapacket_duration) (void *codec_data);
  62. ssize_t (*encode_mediapacket) (void *codec_data, const uint8_t *buffer,
  63. size_t len, struct media_packet *mp,
  64. size_t mp_data_len, size_t *written);
  65. bool (*update_qos) (void *codec_data, uint8_t op);
  66. };
  67. #define QOS_POLICY_DEFAULT 0x00
  68. #define QOS_POLICY_DECREASE 0x01
  69. typedef const struct audio_codec * (*audio_codec_get_t) (void);
  70. const struct audio_codec *codec_sbc(void);
  71. const struct audio_codec *codec_aptx(void);