cf6b2e83创建于 4月29日历史提交
/****************************************************************************
 * apps/tests/testcases/media_test/media_graph/media_graph_buffer_start.c
 *
 * Name: media_graph_buffer_start
 * Example description:
 *  1. media_graph_buffer_start
 *
 ****************************************************************************/

/****************************************************************************
 * Included Files
 ****************************************************************************/

#include "media_graph_test.h"
#include <media_api.h>
#include <nuttx/config.h>
#include <stdio.h>
#include <stdlib.h>
#include <syslog.h>

/****************************************************************************
 * Public Functions
 ****************************************************************************/

int main(int argc, FAR char *argv[])
{
  struct mediatest_data *media =
      (struct mediatest_data *)malloc(sizeof(struct mediatest_data));
  mediatest_setup(media);
  mediatest_getopt(argc, argv, media);
  mediatest_uv_player_enter();
  struct mediatest_app *player_test;
  int i = 0;
  int streams_len = 1;
  for (i = 0; media->stream_type[i] != '\0'; i++)
    {
      if (media->stream_type[i] == ',')
        streams_len = streams_len + 1;
    }

  i = 0;
  char *stream_types[streams_len];
  struct mediatest_data *medias[streams_len];

  char *token = strtok(media->stream_type, ",");
  while (token != NULL)
    {
      stream_types[i++] = token;
      token = strtok(NULL, ",");
    }

  for (i = 0; i < streams_len; i++)
    {
      medias[i] =
          (struct mediatest_data *)malloc(sizeof(struct mediatest_data));
      if (!medias[i])
        {
          syslog(LOG_ERR, "FAIL! malloc media %d fail.\n", i);
          goto out;
        }

      RET_CHECK(mediatest_setup(medias[i]), "FAIL! malloc failed\n");
    }

  for (i = 0; i < streams_len; i++)
    {
      medias[i]->stream_type = stream_types[i];
      medias[i]->type = media->type;
      medias[i]->url = media->url;

      for (int j = 0; j < media->rept; j++)
        {
          UV_EXECUTE(mediatest_common_open, medias[i]);
          RET_CHECK(media->ret, "mediatest open failed\n");
          if (media->ex == 1)
            {
              UV_EXECUTE(mediatest_common_prepare, medias[i]);
            }
          else if (media->ex == 2)
            {
              UV_EXECUTE(mediatest_common_prepare, medias[i]);
              UV_EXECUTE(mediatest_common_start, medias[i]);
            }
          UV_EXECUTE(mediatest_app_exit, medias[i]);
          RET_CHECK(media->ret, "mediatest close failed\n");
          UV_WAIT(PLAYER_CLOSED, medias[i], "mediatest closecb failed\n");
        }
    }

  syslog(LOG_INFO, "media uvplayer position PASSED!\n");
out:
  for (i = 0; i < streams_len; i++)
    {
      if (medias[i]->handle != NULL)
        {
          media->stop_flag = true;
          usleep(500 * 1000);
          UV_EXECUTE(mediatest_app_stop, medias[i]);
          UV_EXECUTE(mediatest_app_exit, medias[i]);
        }
    }
  mediatest_uv_exit();
  for (i = 0; i < streams_len; i++)
    {
      if (medias[i] != NULL)
        {
          free(medias[i]);
          medias[i] = NULL;
        }
    }
  free(media);
  media = NULL;
  return 0;
}