play_list.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #include "play_list.h"
  2. #include "player_ui.h"
  3. #include <string.h>
  4. static struct play_item **play_list = RT_NULL;
  5. static rt_uint16_t play_list_size = 0;
  6. static rt_int16_t play_list_current = 0;
  7. void play_list_clear()
  8. {
  9. rt_uint32_t index;
  10. for (index = 0; index < play_list_size; index ++)
  11. {
  12. rt_free(play_list[index]->fn);
  13. rt_free(play_list[index]);
  14. play_list[index] = RT_NULL;
  15. }
  16. rt_free(play_list);
  17. play_list = RT_NULL;
  18. play_list_size = 0;
  19. }
  20. char* play_list_start()
  21. {
  22. play_list_current = 0;
  23. return play_list[play_list_current]->fn;
  24. }
  25. rt_bool_t play_list_is_end()
  26. {
  27. if ((play_list_current == play_list_size - 1) ||
  28. play_list_size == 0)
  29. return RT_TRUE;
  30. return RT_FALSE;
  31. }
  32. rt_uint32_t play_list_items(void)
  33. {
  34. return play_list_size;
  35. }
  36. struct play_item* play_list_item(rt_uint32_t n)
  37. {
  38. if (n > play_list_size) return RT_NULL;
  39. return play_list[n];
  40. }
  41. void play_list_append(char* fn)
  42. {
  43. play_list_size ++;
  44. if (play_list == RT_NULL)
  45. play_list = (struct play_item**) rt_malloc (play_list_size * sizeof(struct play_item*));
  46. else
  47. play_list = (struct play_item**) rt_realloc(play_list, play_list_size * sizeof(struct play_item*));
  48. play_list[play_list_size - 1] = (struct play_item*)rt_malloc(sizeof(struct play_item));
  49. if (strstr(fn, ".mp3") != RT_NULL ||
  50. strstr(fn, ".MP3") != RT_NULL)
  51. {
  52. struct tag_info info;
  53. memset(&info, 0, sizeof(info));
  54. mp3_get_info(fn, &info);
  55. if (info.title[0] == '\0')
  56. rt_snprintf(play_list[play_list_size - 1]->title, sizeof(play_list[play_list_size - 1]->title),
  57. "<δ֪ÃûÒôÀÖ>");
  58. else
  59. strcpy(play_list[play_list_size - 1]->title, info.title);
  60. play_list[play_list_size - 1]->fn = rt_strdup(fn);
  61. play_list[play_list_size - 1]->duration = info.duration;
  62. }
  63. else
  64. {
  65. rt_snprintf(play_list[play_list_size - 1]->title, sizeof(play_list[play_list_size - 1]->title),
  66. "<δ֪ÃûÒôÀÖ>");
  67. play_list[play_list_size - 1]->fn = rt_strdup(fn);
  68. play_list[play_list_size - 1]->duration = 0;
  69. }
  70. }
  71. char* play_list_next()
  72. {
  73. if (play_list_current < play_list_size - 1) play_list_current ++;
  74. return play_list[play_list_current]->fn;
  75. }
  76. char* play_list_prev()
  77. {
  78. if (play_list_current > 0) play_list_current --;
  79. return play_list[play_list_current]->fn;
  80. }
  81. char* play_list_current_item()
  82. {
  83. return play_list[play_list_current]->fn;
  84. }