From a9b28d5dbf73bb1038ab3a42d628691496050d2c Mon Sep 17 00:00:00 2001 From: Eunhae Choi Date: Wed, 30 Sep 2015 21:35:43 +0900 Subject: [PATCH] test: push eos media packet at the end of file Change-Id: Ia03187fd23e5ae3c17e4b0c34f5197092486e38e --- test/legacy_player_es_push_test.c | 71 +++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 14 deletions(-) diff --git a/test/legacy_player_es_push_test.c b/test/legacy_player_es_push_test.c index a75c9e6..22210ca 100644 --- a/test/legacy_player_es_push_test.c +++ b/test/legacy_player_es_push_test.c @@ -270,7 +270,7 @@ static void _player_prepared_cb(void *user_data) LOGD("done"); } -unsigned int bytestream2nalunit(FILE *fd, unsigned char* nal) +int bytestream2nalunit(FILE *fd, unsigned char* nal) { int nal_length = 0; size_t result; @@ -316,11 +316,13 @@ unsigned int bytestream2nalunit(FILE *fd, unsigned char* nal) while(1) { if (feof(fd)) - return nal_length; + return -1; result = fread(buffer, 1, read_size, fd); if(result != read_size) { + if (init == 1) + return -1; break; } val = buffer[0]; @@ -377,8 +379,36 @@ unsigned int bytestream2nalunit(FILE *fd, unsigned char* nal) return nal_length; } -static void feed_video_data(appdata_s *appdata) +static void feed_eos_data(appdata_s *appdata) { + appdata_s *ad = appdata; + + LOGD("push EOS"); + + if (media_packet_create_alloc(ad->video_fmt, NULL, NULL, &ad->video_pkt) != MEDIA_PACKET_ERROR_NONE) { + LOGE("media_packet_create_alloc failed\n"); + return; + } + + if (media_packet_set_buffer_size(ad->video_pkt, (uint64_t)0) != MEDIA_PACKET_ERROR_NONE) { + LOGE("media_packet_set_buffer_size failed\n"); + return; + } + + media_packet_set_flags(ad->video_pkt, MEDIA_PACKET_END_OF_STREAM); + if (player_push_media_stream(ad->player_handle, ad->video_pkt) != PLAYER_ERROR_NONE) { + LOGE("fail to push media packet\n"); + } + + media_packet_destroy(ad->video_pkt); + ad->video_pkt = NULL; + + return; +} + +static bool feed_video_data(appdata_s *appdata) +{ + bool ret = FALSE; int read = 0; static guint64 pts = 0L; void *buf_data_ptr = NULL; @@ -386,17 +416,17 @@ static void feed_video_data(appdata_s *appdata) if (media_packet_create_alloc(ad->video_fmt, NULL, NULL, &ad->video_pkt) != MEDIA_PACKET_ERROR_NONE) { LOGE("media_packet_create_alloc failed\n"); - return; + return FALSE; } if (media_packet_get_buffer_data_ptr(ad->video_pkt, &buf_data_ptr) != MEDIA_PACKET_ERROR_NONE) { LOGE("media_packet_get_buffer_data_ptr failed\n"); - return; + goto ERROR; } if (media_packet_set_pts(ad->video_pkt, (uint64_t)(pts/1000000)) != MEDIA_PACKET_ERROR_NONE) { LOGE("media_packet_set_pts failed\n"); - return; + goto ERROR; } /* NOTE: In case of H.264 video, stream format for feeding is NAL unit. @@ -405,39 +435,52 @@ static void feed_video_data(appdata_s *appdata) read = bytestream2nalunit(ad->file_src, buf_data_ptr); LOGD("real length = %d\n", read); if (read == 0) { - LOGD("input file read failed\n"); - return; + LOGE("input file read failed\n"); + ret = TRUE; + goto ERROR; + } + else if (read < 0) { + LOGD("push EOS"); + media_packet_set_buffer_size(ad->video_pkt, (uint64_t)0); + media_packet_set_flags (ad->video_pkt, MEDIA_PACKET_END_OF_STREAM); + if (player_push_media_stream(ad->player_handle, ad->video_pkt) != PLAYER_ERROR_NONE) { + LOGE("fail to push media packet\n"); + } + goto ERROR; } if (media_packet_set_buffer_size(ad->video_pkt, (uint64_t)read) != MEDIA_PACKET_ERROR_NONE) { LOGE("media_packet_set_buffer_size failed\n"); - return; + goto ERROR; } /* push media packet */ player_push_media_stream(ad->player_handle, ad->video_pkt); pts += ES_DEFAULT_VIDEO_PTS_OFFSET; + ret = TRUE; +ERROR: /* destroy media packet after use*/ media_packet_destroy(ad->video_pkt); ad->video_pkt = NULL; - return; + return ret; } static void feed_video_data_thread_func(void *data) { - gboolean exit = FALSE; appdata_s *ad = (appdata_s *)data; - while (!exit) + while (TRUE) { static int frame_count = 0; if (frame_count < ES_DEFAULT_NUMBER_OF_FEED) { - feed_video_data(ad); + if (!feed_video_data(ad)) + break; frame_count++; } else { - exit = TRUE; + feed_eos_data(ad); + break; } } } -- 2.34.1