From: Sejun Park Date: Thu, 3 Aug 2017 05:08:19 +0000 (+0900) Subject: Added tc for verifying mediamuxer X-Git-Tag: submit/tizen/20170804.051805^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F02%2F142202%2F3;p=platform%2Fcore%2Fapi%2Fmediacodec.git Added tc for verifying mediamuxer Change-Id: Id25024ce9dd66404e8c5603f58bd285e6fc373de --- diff --git a/packaging/capi-media-codec.spec b/packaging/capi-media-codec.spec index 7196071..ff08340 100644 --- a/packaging/capi-media-codec.spec +++ b/packaging/capi-media-codec.spec @@ -22,6 +22,9 @@ BuildRequires: pkgconfig(gstreamer-plugins-base-1.0) BuildRequires: pkgconfig(gstreamer-app-1.0) BuildRequires: pkgconfig(capi-system-info) BuildRequires: pkgconfig(iniparser) +#BuildRequires: pkgconfig(capi-media-camera) +#BuildRequires: pkgconfig(capi-mediademuxer) +#BuildRequires: pkgconfig(capi-mediamuxer) %description A Media Codec library in Tizen Native API diff --git a/src/media_codec_port_gst.c b/src/media_codec_port_gst.c index ca4994d..83ab219 100644 --- a/src/media_codec_port_gst.c +++ b/src/media_codec_port_gst.c @@ -2191,6 +2191,7 @@ void __mc_gst_buffer_add(GstElement *element, GstBuffer *buffer, GstPad *pad, gp if (mcbuffer->packet) { media_packet_set_pts(mcbuffer->packet, GST_BUFFER_TIMESTAMP(buffer)); + media_packet_set_dts(mcbuffer->packet, GST_BUFFER_DTS(buffer)); media_packet_set_duration(mcbuffer->packet, GST_BUFFER_DURATION(buffer)); if (core->need_codec_data) { @@ -2297,6 +2298,7 @@ GstMCBuffer *_mc_gst_media_packet_to_gstbuffer(mc_gst_core_t *core, media_packet gint ret = MEDIA_PACKET_ERROR_NONE; uint64_t buf_size = 0; uint64_t pts = 0; + uint64_t dts = 0; uint64_t dur = 0; void *buf_data = NULL; GstMCBuffer *mcbuffer = NULL; @@ -2333,6 +2335,10 @@ GstMCBuffer *_mc_gst_media_packet_to_gstbuffer(mc_gst_core_t *core, media_packet return NULL; } + /* dts */ + media_packet_get_pts(packet, &dts); + GST_BUFFER_DTS(mcbuffer->buffer) = dts; + /* pts */ media_packet_get_pts(packet, &pts); GST_BUFFER_PTS(mcbuffer->buffer) = pts; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d6a1257..de10cdc 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -7,12 +7,14 @@ link_directories(${CMAKE_SOURCE_DIR}/../) INCLUDE(FindPkgConfig) pkg_check_modules(${fw_test} REQUIRED appcore-efl elementary) +#pkg_check_modules(${fw_test} REQUIRED appcore-efl elementary capi-media-camera capi-mediademuxer capi-mediamuxer) FOREACH(flag ${${fw_test}_CFLAGS}) SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") ENDFOREACH(flag) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -pie") +#add_definitions(-DTIZEN_FEATURE_INTEGRATION) aux_source_directory(. sources) FOREACH(src ${sources}) GET_FILENAME_COMPONENT(src_name ${src} NAME_WE) diff --git a/test/media_codec_test.c b/test/media_codec_test.c index 5eca332..80e6c60 100644 --- a/test/media_codec_test.c +++ b/test/media_codec_test.c @@ -33,6 +33,7 @@ #ifdef TIZEN_FEATURE_INTEGRATION #include #include +#include #endif #define PACKAGE "media_codec_test" @@ -140,12 +141,14 @@ struct _App { gboolean is_encoder; gboolean hardware; gboolean enable_dump; + gboolean enable_muxer; gint frame; type_e type; #ifdef TIZEN_FEATURE_INTEGRATION camera_h camera_handle; mediademuxer_h demuxer; + mediamuxer_h muxer; #endif GThread *thread; @@ -167,6 +170,7 @@ struct _App { guint fps; guint target_bits; media_format_mimetype_e mime; + gint track; gint video_track; /* Audio */ @@ -1286,7 +1290,13 @@ void _mediacodec_outbuf_available_cb(media_packet_h pkt, void *user_data) else output_dump(app, out_pkt); } - +#ifdef TIZEN_FEATURE_INTEGRATION + if (app->enable_muxer) { + if (mediamuxer_write_sample(app->muxer, app->track, out_pkt) != MEDIAMUXER_ERROR_NONE) + g_print("mediamuxer_write_sample failed\n"); + g_print("write sample!!!\n"); + } +#endif app->frame_count++; app->fbd++; @@ -1366,6 +1376,29 @@ void _mediademuxer_eos_cb(int track, void *user_data) return; } + +void _mediamuxer_eos_cb(void *user_data) +{ + if (user_data == NULL) { + g_print("invalid param"); + return; + } + + App *app = (App *)user_data; + + g_print("muxer eos\n"); + + if (mediamuxer_stop(app->muxer) != MEDIAMUXER_ERROR_NONE) + g_print(" mediamuxer_stop failed\n"); + + if (mediamuxer_unprepare(app->muxer) != MEDIAMUXER_ERROR_NONE) + g_print(" mediamuxer_unprepare failed\n"); + + if (mediamuxer_destroy(app->muxer) != MEDIAMUXER_ERROR_NONE) + g_print(" mediamuxer_destory failed\n"); + + g_print("mediamuxer destroyed\n"); +} #endif gboolean _foreach_cb(mediacodec_codec_type_e codec_type, void *user_data) @@ -1452,6 +1485,7 @@ void _mediacodec_prepare(App *app, gboolean frame_all) media_format_set_audio_channel(codec_format, app->channel); media_format_set_audio_samplerate(codec_format, app->samplerate); media_format_set_audio_bit(codec_format, app->bit); + media_format_set_audio_avg_bps(codec_format, app->bitrate); ret = mediacodec_configure_from_media_format(app->mc_handle[0], codec_format, app->flag); if (ret != MEDIACODEC_ERROR_NONE) @@ -1485,6 +1519,36 @@ void _mediacodec_prepare(App *app, gboolean frame_all) return; } +#ifdef TIZEN_FEATURE_INTEGRATION + if (app->enable_muxer) { + if (mediamuxer_create(&app->muxer) != MEDIAMUXER_ERROR_NONE) + g_print("mediamuxer_create failed\n"); + + if (mediamuxer_set_data_sink(app->muxer, "/tmp/muxtest.mp4", MEDIAMUXER_CONTAINER_FORMAT_MP4) != MEDIAMUXER_ERROR_NONE) + g_print("mediamuxer_set_data_sink failed\n"); + + media_format_create(&app->format[0]); + if (app->type == AUDIO_ENC) + media_format_set_audio_mime(app->format[0], codec_mime); + else if (app->type == VIDEO_ENC) + media_format_set_video_mime(app->format[0], codec_mime); + else + g_print("invalid format\n"); + + if (mediamuxer_set_eos_cb(app->muxer, _mediamuxer_eos_cb, app) != MEDIAMUXER_ERROR_NONE) + g_print("mediamuxer_set_eos_cb failed\n"); + + if (mediamuxer_add_track(app->muxer, app->format[0], &app->track) != MEDIAMUXER_ERROR_NONE) + g_print("mediamuxer_add_track failed\n"); + + if (mediamuxer_prepare(app->muxer) != MEDIAMUXER_ERROR_NONE) + g_print("mediamuxer_prepare failed\n"); + + if (mediamuxer_start(app->muxer) != MEDIAMUXER_ERROR_NONE) + g_print("mediamuxer_start failed\n"); + } +#endif + /* get packet pool instance */ ret = mediacodec_get_packet_pool(app->mc_handle[0], &pkt_pool); @@ -1828,6 +1892,10 @@ void _mediacodec_unprepare(App *app) void _mediacodec_destroy(App *app) { + if (app == NULL) { + g_print("invalid param"); + return; + } #ifdef USE_POOL if (media_packet_pool_deallocate(pkt_pool) != MEDIA_PACKET_ERROR_NONE) { @@ -1843,6 +1911,12 @@ void _mediacodec_destroy(App *app) g_print("media packet pool destroyed! \n"); #endif mediacodec_destroy(app->mc_handle[0]); +#ifdef TIZEN_FEATURE_INTEGRATION + if (app->enable_muxer) { + if (mediamuxer_close_track(app->muxer, app->track) != MEDIAMUXER_ERROR_NONE) + g_print("mediamuxer_close_track failed\n"); + } +#endif } void input_filepath(char *filename, App *app) @@ -1918,6 +1992,15 @@ void _interpret_main_menu(char *cmd, App *app) _mediacodec_camera_stop(app); else if (strncmp(cmd, "au", 2) == 0) g_menu_state = CURRENT_STATUS_AUTO_TEST; + else if (strncmp(cmd, "mp", 2) == 0) { + if (!app->enable_muxer) { + app->enable_muxer = TRUE; + g_print("muxer enabled\n"); + } else { + app->enable_dump = FALSE; + g_print("dump disabled\n"); + } + } #endif else if (strncmp(cmd, "dp", 2) == 0) { if (!app->enable_dump) { @@ -2243,6 +2326,7 @@ void display_sub_basic() g_print("q. quit test suite \n"); g_print("dp. enable dump \n"); #ifdef TIZEN_FEATURE_INTEGRATION + g_print("mp. enable muxer \n"); g_print("-----------------------------------------------------------------------------------------\n"); g_print("cr. camera preview -> encoder -> decoder\n"); g_print("au. integration test with mediademuxer\n");