play_list.c 2.5 KB

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