player.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2023-03-29 Rbb666 the first version
  9. */
  10. #ifndef PLAYER_H
  11. #define PLAYER_H
  12. #include <rtthread.h>
  13. #include "drv_jpeg.h"
  14. #define PLAYER_SOUND_SIZE_DEFAULT 0
  15. #define PLAYER_SONG_NUM_MAX 20
  16. #define PLAYER_SONG_NAME_LEN_MAX 32
  17. enum PLAYER_STATUS
  18. {
  19. PLAYER_IDLE,
  20. PLAYER_READY, //准备播放
  21. PLAYER_RUNNING, //正在播放
  22. PLAYER_STOP, //播放停止
  23. PLAYER_DELETE, //删除资源
  24. PLAYER_LAST, //播放上一首
  25. PLAYER_NEXT, //播放下一首
  26. };
  27. enum PLAYER_CMD
  28. {
  29. PLAYER_CMD_INIT,
  30. PLAYER_CMD_PLAY,
  31. PLAYER_CMD_STOP,
  32. PLAYER_CMD_LAST,
  33. PLAYER_CMD_NEXT,
  34. PLAYER_CMD_SET_VOL,
  35. PLAYER_CMD_GET_VOL,
  36. PLAYER_CMD_GET_STATUS
  37. };
  38. enum AUDIO_OPS_CMD
  39. {
  40. AUDIO_OPS_CMD_SET_VOL
  41. };
  42. enum DECODE_OPS_CMD
  43. {
  44. DECODE_OPS_CMD_GET_NAME,
  45. DECODE_OPS_CMD_GET_LEN
  46. };
  47. struct audio_ops
  48. {
  49. int (*init)(void);
  50. int (*open)(void);
  51. int (*close)(void);
  52. int (*control)(int cmd, void *arg);
  53. int (*write)(void *buffer, int size);
  54. };
  55. struct player
  56. {
  57. enum PLAYER_STATUS status; //当前播放状态
  58. int16_t volume; //声音大小
  59. uint8_t song_current; //正在播放的视频
  60. uint8_t video_num; //视频总数
  61. uint16_t song_time_pass; //已经播放的时间
  62. uint16_t song_time_all; //总播放时间
  63. char * video_list[PLAYER_SONG_NUM_MAX]; //列表
  64. char video_name[PLAYER_SONG_NAME_LEN_MAX];
  65. rt_sem_t sem_play; //用于播放状态控制的信号量
  66. rt_thread_t play_thread; //播放的线程
  67. struct audio_ops *audio;
  68. decode_drv_t *decode;
  69. };
  70. typedef struct player *player_t;
  71. int player_add_song(player_t player, void *song); //添加歌曲到歌曲列表
  72. int player_start(player_t player); //初始化
  73. int player_control(player_t player, int cmd, void *arg);
  74. int player_show(player_t player); //打印歌单和当前进度
  75. int player_delete(player_t player);
  76. #endif