mp4if.cpp
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "mp4if.h"
  3. #include "our_config_file.h"
  4. CMP4If::CMP4If (CString &name)
  5. {
  6. m_process = new CMP4Process(name);
  7. m_audio_volume = config.get_config_value(CONFIG_VOLUME);
  8. m_state = MP4IF_STATE_PLAY;
  9. m_fullscreen_state = FALSE;
  10. m_screen_size = 1;
  11. }
  12. CMP4If::~CMP4If (void)
  13. {
  14. delete m_process;
  15. }
  16. int CMP4If::get_initial_response (CString &errmsg)
  17. {
  18. int retval;
  19. msg_initial_resp_t msg;
  20. retval = m_process->get_initial_response(&msg, errmsg);
  21. if (retval >= 0) {
  22. m_is_seekable = msg.session_is_seekable;
  23. m_has_audio = msg.has_audio;
  24. m_max_time = msg.max_time;
  25. }
  26. return retval;
  27. }
  28. int CMP4If::set_audio_volume (int val)
  29. {
  30. int ret;
  31. if (m_process == NULL) {
  32. return -1;
  33. }
  34. ret = client_read_config();
  35. if (ret == 0) {
  36. m_audio_volume = val;
  37. } else {
  38. return ret;
  39. }
  40. return 0;
  41. }
  42. int CMP4If::get_mute (void) 
  43. return config.get_config_value(CONFIG_MUTED); 
  44. }
  45. int CMP4If::toggle_mute (void)
  46. {
  47. int ret;
  48. if (m_process == NULL) {
  49. return -1;
  50. }
  51. config.set_config_value(CONFIG_MUTED,
  52. config.get_config_value(CONFIG_MUTED) == 0 ?
  53. 1 : 0);
  54. ret = client_read_config();
  55. return ret;
  56. }
  57. int CMP4If::set_screen_size (int val)
  58. {
  59. int ret;
  60. uint64_t retvalue;
  61. if (m_process == NULL) {
  62. return -1;
  63. }
  64. ret = m_process->send_message(CLIENT_MSG_SET_SCREEN_SIZE,
  65.   &retvalue,
  66.   (const char *)&val,
  67.   sizeof(int));
  68. if (ret == 0) {
  69. m_screen_size = val;
  70. } else {
  71. return ret;
  72. }
  73. return 0;
  74. }
  75. int CMP4If::play (void)
  76. {
  77. int ret;
  78. uint64_t retvalue;
  79. client_msg_play_t cmp;
  80. if (m_process == NULL) {
  81. return -1;
  82. }
  83. if (m_state == MP4IF_STATE_PAUSE)
  84. cmp.start_from_begin = FALSE;
  85. else 
  86. cmp.start_from_begin = TRUE;
  87. cmp.start_time = 0.0;
  88. ret = m_process->send_message(CLIENT_MSG_PLAY,
  89.   &retvalue,
  90.   (const char *)&cmp, 
  91.   sizeof(cmp));
  92. m_state = MP4IF_STATE_PLAY;
  93. return ret;
  94. }
  95. int CMP4If::pause (void)
  96. {
  97. int ret;
  98. uint64_t retvalue;
  99. if (m_process == NULL) {
  100. return -1;
  101. }
  102. if (m_state == MP4IF_STATE_PLAY) {
  103. ret = m_process->send_message(CLIENT_MSG_PAUSE,
  104. &retvalue);
  105. m_state = MP4IF_STATE_PAUSE;
  106. }
  107. return ret;
  108. }
  109. int CMP4If::stop (void)
  110. {
  111. int ret = pause();
  112. m_state = MP4IF_STATE_STOP;
  113. return ret;
  114. }
  115. int CMP4If::seek_to (double time)
  116. {
  117. if (m_state == MP4IF_STATE_PLAY) {
  118. pause();
  119. }
  120. int ret;
  121. uint64_t retvalue;
  122. if (m_process == NULL) {
  123. return -1;
  124. }
  125. client_msg_play_t cmp;
  126. cmp.start_from_begin = time == 0.0 ? TRUE : FALSE;
  127. cmp.start_time = time;
  128. ret = m_process->send_message(CLIENT_MSG_PLAY,
  129.   &retvalue,
  130.   (const char *)&cmp, 
  131.   sizeof(cmp));
  132. m_state = MP4IF_STATE_PLAY;
  133. return ret;
  134. }
  135. int CMP4If::client_read_config (void)
  136. {
  137. config.write_config_file("Software\Mpeg4ip", "Config");
  138. return m_process->send_message(CLIENT_READ_CONFIG_FILE, NULL);
  139. }
  140. bool CMP4If::get_current_time (uint64_t *time)
  141. {
  142. return m_process->send_message(CLIENT_MSG_GET_CURRENT_TIME, time);
  143. }