Added tc for verifying mediamuxer 02/142202/3 accepted/tizen/unified/20170804.133249 submit/tizen/20170804.051805
authorSejun Park <sejun79.park@samsung.com>
Thu, 3 Aug 2017 05:08:19 +0000 (14:08 +0900)
committerSejun Park <sejun79.park@samsung.com>
Fri, 4 Aug 2017 04:57:13 +0000 (13:57 +0900)
Change-Id: Id25024ce9dd66404e8c5603f58bd285e6fc373de

packaging/capi-media-codec.spec
src/media_codec_port_gst.c
test/CMakeLists.txt
test/media_codec_test.c

index 7196071..ff08340 100644 (file)
@@ -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
index ca4994d..83ab219 100644 (file)
@@ -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;
index d6a1257..de10cdc 100644 (file)
@@ -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)
index 5eca332..80e6c60 100644 (file)
@@ -33,6 +33,7 @@
 #ifdef TIZEN_FEATURE_INTEGRATION
 #include <camera.h>
 #include <mediademuxer.h>
+#include <mediamuxer.h>
 #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");