video_player.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /*
  2. * Copyright (c) 2020 Actions Technology Co., Ltd
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. /**
  7. * @file video_player.c
  8. *
  9. */
  10. #include <string.h>
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <os_common_api.h>
  14. #include "srv_manager.h"
  15. #include <soc_dsp.h>
  16. #include "video_player.h"
  17. #include "video_player_defs.h"
  18. #include <video_mem.h>
  19. #include <file_stream.h>
  20. extern video_player_data_t *video_player_data;
  21. static int vp_send_msg(char *srv_name, int cmd, void *ptr, bool sync_flag)
  22. {
  23. int ret = 0;
  24. os_sem sync_sem;
  25. struct app_msg msg = {
  26. .type = MSG_VIDEO_PLAYER,
  27. .cmd = cmd,
  28. .ptr = ptr,
  29. .callback = NULL,
  30. .sync_sem = NULL,
  31. };
  32. if (!srv_manager_check_service_is_actived(srv_name)) {
  33. return -1;
  34. }
  35. if (sync_flag) {
  36. msg.sync_sem = &sync_sem;
  37. os_sem_init(msg.sync_sem, 0, 1);
  38. }
  39. send_async_msg(srv_name, &msg);
  40. if(sync_flag)
  41. {
  42. ret = os_sem_take(msg.sync_sem, OS_FOREVER);
  43. }
  44. return ret;
  45. }
  46. int video_player_open(video_init_param_t *p_init_param)
  47. {
  48. SYS_LOG_INF("enter ++");
  49. if(p_init_param == NULL) {
  50. return -1;
  51. }
  52. if (!srv_manager_check_service_is_actived(VIDEODEC_SRV_NAME))
  53. {
  54. srv_manager_active_service(VIDEODEC_SRV_NAME);
  55. }
  56. vp_send_msg(VIDEODEC_SRV_NAME, CMD_VP_OPEN, p_init_param, true);
  57. SYS_LOG_INF("ok");
  58. return 0;
  59. }
  60. int video_player_close(void)
  61. {
  62. SYS_LOG_INF("enter ++");
  63. vp_send_msg(VIDEODEC_SRV_NAME, CMD_VP_CLOSE, NULL, false);
  64. SYS_LOG_INF("ok");
  65. return 0;
  66. }
  67. int video_player_play(void)
  68. {
  69. SYS_LOG_INF("enter ++");
  70. vp_send_msg(VIDEODEC_SRV_NAME, CMD_VP_PLAY, NULL, false);
  71. return 0;
  72. }
  73. int video_player_pause(bool sync, bool mem_release)
  74. {
  75. SYS_LOG_INF("enter ++");
  76. vp_send_msg(VIDEODEC_SRV_NAME, CMD_VP_PAUSE, (void *)mem_release, sync);
  77. return 0;
  78. }
  79. int video_player_stop(bool sync, bool mem_release)
  80. {
  81. SYS_LOG_INF("enter ++");
  82. vp_send_msg(VIDEODEC_SRV_NAME, CMD_VP_STOP, (void *)mem_release, sync);
  83. return 0;
  84. }
  85. int video_player_seek(int ms)
  86. {
  87. SYS_LOG_INF("seek at %dms", ms);
  88. vp_send_msg(VIDEODEC_SRV_NAME, CMD_VP_SEEK, (void *)ms, false);
  89. return 0;
  90. }
  91. int video_player_mute(void)
  92. {
  93. SYS_LOG_INF("enter ++");
  94. vp_send_msg(VIDEODEC_SRV_NAME, CMD_VP_MUTE, NULL, false);
  95. return 0;
  96. }
  97. int video_player_demute(void)
  98. {
  99. SYS_LOG_INF("enter ++");
  100. vp_send_msg(VIDEODEC_SRV_NAME, CMD_VP_DEMUTE, NULL, false);
  101. return 0;
  102. }
  103. vp_status_e video_player_get_status(void)
  104. {
  105. video_player_data_t *data = video_player_data;
  106. if(data == NULL)
  107. return -1;
  108. return data->status;
  109. }
  110. int video_player_get_total_time(void)
  111. {
  112. video_player_data_t *data = video_player_data;
  113. if(data == NULL)
  114. return -1;
  115. return data->video_info.vtotal_time;
  116. }
  117. int video_player_get_cur_time(void)
  118. {
  119. video_player_data_t *data = video_player_data;
  120. if(data == NULL)
  121. return -1;
  122. return data->cur_pts;
  123. }
  124. void * video_player_get_buffer(void)
  125. {
  126. video_player_data_t *data = video_player_data;
  127. if(data == NULL)
  128. return NULL;
  129. return data->decode_buf;
  130. }