[0.6.141] remove not used pcm extract source code 09/192509/4
authorEunhae Choi <eunhae1.choi@samsung.com>
Tue, 6 Nov 2018 06:00:53 +0000 (15:00 +0900)
committerEunhae Choi <eunhae1.choi@samsung.com>
Tue, 6 Nov 2018 06:25:57 +0000 (15:25 +0900)
- there are two pcm extract path
  1. for each audio channel output
  2. for merged audio output
- remove (2) pcm extract path which is not used.

Change-Id: I764da3cf5226bfb5bf84507b3ce1ac531b1e60a1

packaging/libmm-player.spec
src/include/mm_player.h
src/include/mm_player_internal.h [changed mode: 0755->0644]
src/include/mm_player_priv.h
src/mm_player.c
src/mm_player_attrs.c
src/mm_player_gst.c
src/mm_player_priv.c

index f7223d8..c044836 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-player
 Summary:    Multimedia Framework Player Library
-Version:    0.6.140
+Version:    0.6.141
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 4f5d32c..11aac27 100644 (file)
@@ -929,33 +929,6 @@ mm_player_set_message_callback(g_player, msg_callback, (void*)g_player);
 int mm_player_set_message_callback(MMHandleType player, MMMessageCallback callback, void *user_param);
 
 /**
- * This function set callback function for receiving audio stream from player. \n
- * So, application can get raw audio data and modify it. \n
- * But, if callback don't return or holds it for long time, performance can be deteriorated. \n
- * It's only supported when audio stream is included in file. \n
- * So, if there is video stream or DRM content, it can't be used.
- *
- * @param   player     [in] Handle of player.
- * @param   callback   [in] Audio stream callback function.
- * @param   user_param [in] User parameter.
- *
- * @return  This function returns zero on success, or negative value with error
- *          code.
- * @see     mm_player_audio_stream_callback
- * @remark  It can be used for audio playback only.
- * @par Example
- * @code
-bool audio_callback(void *stream, int stream_size, void *user_param)
-{
-       LOGD("audio stream callback\n");
-       return TRUE;
-}
-mm_player_set_audio_stream_callback(g_player, audio_callback, NULL);
- * @endcode
- */
-int mm_player_set_audio_stream_callback(MMHandleType player, mm_player_audio_stream_callback callback, void *user_param);
-
-/**
  * This function is to mute volume of player
  *
  * @param      player  [in]    Handle of player
old mode 100755 (executable)
new mode 100644 (file)
index 0d4d034..a660756
@@ -133,7 +133,6 @@ int mm_player_set_play_speed(MMHandleType player, float rate, bool streaming);
  * @return     This function returns zero on success, or negative value with error
  *                     code.
  * @remark
- * @see                mm_player_video_stream_callback mm_player_set_audio_stream_callback
  * @since
  */
 int mm_player_set_video_stream_callback(MMHandleType player, mm_player_video_stream_callback callback, void *user_param);
@@ -185,19 +184,6 @@ int mm_player_do_video_capture(MMHandleType player);
 int mm_player_change_videosink(MMHandleType player, MMDisplaySurfaceType display_surface_type, void *display_overlay);
 
 /**
- * This function is to set pcm spec.
- *
- * @param      player          [in]    Handle of player.
- * @param      samplerate      [in]    Samplerate.
- * @param      channel         [in]    Channel.
- *
- * @return     This function returns zero on success, or negative value with error
- * @see
- * @since
- */
-int mm_player_set_pcm_spec(MMHandleType player, int samplerate, int channel);
-
-/**
        @}
  */
 
index bfd00b9..dca8cf8 100644 (file)
@@ -445,7 +445,6 @@ typedef struct {
 typedef struct {
        bool rich_audio;
        bool safety_volume;
-       bool pcm_extraction;
        bool video_zc; // video zero-copy
        bool subtitle_off;
        bool media_packet_video_stream;
@@ -640,7 +639,6 @@ typedef struct {
        bool video_stream_prerolled;
 
        /* audio stram callback */
-       mm_player_audio_stream_callback audio_stream_cb;
        void* audio_stream_cb_user_param;
        bool audio_stream_sink_sync;
        GList* audio_stream_buff_list; /* mm_player_audio_stream_buff_t, buff list of extract pcm data */
@@ -664,8 +662,6 @@ typedef struct {
        MMAudioEffectInfo audio_effect_info;
        gboolean bypass_audio_effect;
 
-       gulong audio_cb_probe_id;
-
        /* content profile */
        MMPlayerParseProfile profile;
        MMPlayerStorageInfo storage_info[MMPLAYER_PATH_MAX];
@@ -832,9 +828,6 @@ typedef struct {
        /* tmb buffer manager for s/w codec tmb_bo */
        tbm_bufmgr bufmgr;
 
-       int pcm_samplerate;
-       int pcm_channel;
-
        MMAdaptiveVariantInfo adaptive_info;
 
        /* Video360 related stuff
@@ -909,7 +902,6 @@ int _mmplayer_set_message_callback(MMHandleType hplayer, MMMessageCallback callb
 int _mmplayer_set_videostream_changed_cb(MMHandleType hplayer, mm_player_stream_changed_callback callback, void *user_param);
 int _mmplayer_set_audiostream_changed_cb(MMHandleType hplayer, mm_player_stream_changed_callback callback, void *user_param);
 int _mmplayer_set_videostream_cb(MMHandleType hplayer, mm_player_video_stream_callback callback, void *user_param);
-int _mmplayer_set_audiostream_cb(MMHandleType hplayer, mm_player_audio_stream_callback callback, void *user_param);
 int _mmplayer_set_subtitle_silent(MMHandleType hplayer, int silent);
 int _mmplayer_get_subtitle_silent(MMHandleType hplayer, int* silent);
 int _mmplayer_set_external_subtitle_path(MMHandleType hplayer, const char* filepath);
@@ -932,7 +924,6 @@ int _mmplayer_set_next_uri(MMHandleType hplayer, const char* uri, bool is_first_
 int _mmplayer_get_next_uri(MMHandleType hplayer, char** uri);
 int _mmplayer_has_closed_caption(MMHandleType hplayer, bool* exist);
 void _mm_player_video_stream_internal_buffer_unref(void *buffer);
-int _mmplayer_set_pcm_spec(MMHandleType hplayer, int samplerate, int channel);
 int _mmplayer_get_timeout(MMHandleType hplayer, int *timeout);
 int _mmplayer_get_num_of_video_out_buffers(MMHandleType hplayer, int *num, int *extra_num);
 int _mmplayer_manage_external_storage_state(MMHandleType hplayer, int id, int state);
@@ -958,7 +949,6 @@ int __mmplayer_check_state(mm_player_t* player, enum PlayerCommandState command)
 gboolean __mmplayer_update_content_attrs(mm_player_t* player, enum content_attr_flag flag);
 void __mmplayer_cancel_eos_timer(mm_player_t* player);
 void __mmplayer_audio_stream_clear_buffer(mm_player_t* player, gboolean send_all);
-gboolean __mmplayer_configure_audio_callback(mm_player_t* player);
 MMStreamingType __mmplayer_get_stream_service_type(mm_player_t* player);
 int __mmplayer_get_video_angle(mm_player_t* player, int *display_angle, int *orientations);
 gboolean __mmplayer_gst_remove_fakesink(mm_player_t* player, MMPlayerGstElement* fakesink);
index f06bc4c..33c02f8 100644 (file)
@@ -195,21 +195,6 @@ int mm_player_set_pd_message_callback(MMHandleType player, MMMessageCallback cal
        return result;
 }
 
-int mm_player_set_audio_stream_callback(MMHandleType player, mm_player_audio_stream_callback callback, void *user_param)
-{
-       int result = MM_ERROR_NONE;
-
-       MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
-
-       MMPLAYER_CMD_LOCK(player);
-
-       result = _mmplayer_set_audiostream_cb(player, callback, user_param);
-
-       MMPLAYER_CMD_UNLOCK(player);
-
-       return result;
-}
-
 int mm_player_set_audio_stream_callback_ex(MMHandleType player, bool sync, mm_player_audio_stream_callback_ex callback, void *user_param)
 {
        int result = MM_ERROR_NONE;
@@ -1055,21 +1040,6 @@ int mm_player_set_video_stream_changed_callback(MMHandleType player, mm_player_s
        return result;
 }
 
-int mm_player_set_pcm_spec(MMHandleType player, int samplerate, int channel)
-{
-       int result = MM_ERROR_NONE;
-
-       MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
-
-       MMPLAYER_CMD_LOCK(player);
-
-       result = _mmplayer_set_pcm_spec(player, samplerate, channel);
-
-       MMPLAYER_CMD_UNLOCK(player);
-
-       return result;
-}
-
 int mm_player_get_timeout(MMHandleType player, int *timeout)
 {
        int result = MM_ERROR_NONE;
index dc7e95c..3eb51a3 100644 (file)
@@ -621,15 +621,6 @@ _mmplayer_construct_attribute(MMHandleType handle)
                        2
                },
                {
-                       "pcm_extraction",               // enable pcm extraction
-                       MM_ATTRS_TYPE_INT,
-                       MM_ATTRS_FLAG_RW,
-                       (void *) FALSE,
-                       MM_ATTRS_VALID_TYPE_INT_RANGE,
-                       FALSE,
-                       TRUE
-               },
-               {
                        "pcm_extraction_samplerate",    // set samplerate for pcm extraction
                        MM_ATTRS_TYPE_INT,
                        MM_ATTRS_FLAG_RW,
@@ -639,15 +630,6 @@ _mmplayer_construct_attribute(MMHandleType handle)
                        MMPLAYER_MAX_INT
                },
                {
-                       "pcm_extraction_depth", // set depth for pcm extraction
-                       MM_ATTRS_TYPE_INT,
-                       MM_ATTRS_FLAG_RW,
-                       (void *) 16,                    // bits
-                       MM_ATTRS_VALID_TYPE_INT_RANGE,
-                       0,
-                       MMPLAYER_MAX_INT
-               },
-               {
                        "pcm_extraction_channels",      // set channels for pcm extraction
                        MM_ATTRS_TYPE_INT,
                        MM_ATTRS_FLAG_RW,
index 97e6dd8..d737d95 100644 (file)
@@ -1254,11 +1254,11 @@ __mmplayer_handle_eos_delay(mm_player_t* player, int delay_in_ms)
        MMPLAYER_RETURN_IF_FAIL(player);
 
        /* post now if delay is zero */
-       if (delay_in_ms == 0 || player->set_mode.pcm_extraction) {
+       if (delay_in_ms == 0 || player->audio_stream_render_cb_ex) {
                LOGD("eos delay is zero. posting EOS now\n");
                MMPLAYER_POST_MSG(player, MM_MESSAGE_END_OF_STREAM, NULL);
 
-               if (player->set_mode.pcm_extraction)
+               if (player->audio_stream_render_cb_ex)
                        __mmplayer_cancel_eos_timer(player);
 
                return;
@@ -1396,26 +1396,9 @@ __mmplayer_gst_handle_eos_message(mm_player_t* player, GstMessage *msg)
                return;
        }
 
-       if (player->pipeline) {
-               if (player->pipeline->textbin)
-                       __mmplayer_drop_subtitle(player, TRUE);
-
-               if ((player->audio_stream_cb) && (player->set_mode.pcm_extraction) && (!player->audio_stream_render_cb_ex)) {
-                       GstPad *pad = NULL;
-
-                       pad = gst_element_get_static_pad(player->pipeline->audiobin[MMPLAYER_A_SINK].gst, "sink");
-
-                       LOGD("release audio callback");
-
-                       /* release audio callback */
-                       gst_pad_remove_probe(pad, player->audio_cb_probe_id);
-                       player->audio_cb_probe_id = 0;
-                       /* audio callback should be free because it can be called even though probe remove.*/
-                       player->audio_stream_cb = NULL;
-                       player->audio_stream_cb_user_param = NULL;
+       if (player->pipeline && player->pipeline->textbin)
+               __mmplayer_drop_subtitle(player, TRUE);
 
-               }
-       }
        if ((player->audio_stream_render_cb_ex) && (!player->audio_stream_sink_sync))
                __mmplayer_audio_stream_clear_buffer(player, TRUE);
 
@@ -1698,9 +1681,6 @@ __mmplayer_gst_handle_state_message(mm_player_t* player, GstMessage *msg)
                {
                        gboolean prepare_async = FALSE;
 
-                       if (!player->audio_cb_probe_id && player->set_mode.pcm_extraction && !player->audio_stream_render_cb_ex)
-                               __mmplayer_configure_audio_callback(player);
-
                        if (!player->sent_bos && oldstate == GST_STATE_READY) {
                                // managed prepare async case
                                mm_attrs_get_int_by_name(player->attrs, "profile_prepare_async", &prepare_async);
index 9f55658..864bec4 100755 (executable)
@@ -157,7 +157,6 @@ static gboolean     __mmplayer_update_subtitle(GstElement* object, GstBuffer *buffer
 static void            __mmplayer_release_misc(mm_player_t* player);
 static void            __mmplayer_release_misc_post(mm_player_t* player);
 static gboolean        __mmplayer_init_gstreamer(mm_player_t* player);
-static GstPadProbeReturn __mmplayer_audio_stream_probe(GstPad *pad, GstPadProbeInfo *info, gpointer u_data);
 static void __mmplayer_video_stream_decoded_preroll_cb(GstElement* object, GstBuffer *buffer, GstPad *pad, gpointer data);
 static void __mmplayer_video_stream_decoded_render_cb(GstElement* object, GstBuffer *buffer, GstPad *pad, gpointer data);
 static GstPadProbeReturn __mmplayer_subtitle_adjust_position_probe(GstPad *pad, GstPadProbeInfo *info, gpointer u_data);
@@ -177,7 +176,6 @@ static int          __mmplayer_gst_realize(mm_player_t* player);
 static int             __mmplayer_gst_unrealize(mm_player_t* player);
 static int             __mmplayer_gst_adjust_subtitle_position(mm_player_t* player, int format, int position);
 static int             __mmplayer_gst_set_message_callback(mm_player_t* player, MMMessageCallback callback, gpointer user_param);
-static gboolean __mmplayer_can_extract_pcm(mm_player_t* player);
 
 /* util */
 static int __mmplayer_realize_streaming_ext(mm_player_t* player);
@@ -398,12 +396,6 @@ __mmplayer_set_state(mm_player_t* player, int state)
                                        __mmplayer_update_content_attrs(player, ATTR_ALL);
                                }
                        }
-
-                       /* add audio callback probe if condition is satisfied */
-                       if (!player->audio_cb_probe_id && player->set_mode.pcm_extraction && !player->audio_stream_render_cb_ex)
-                               __mmplayer_configure_audio_callback(player);
-
-                       /* FIXIT : handle return value */
                }
                break;
 
@@ -1903,17 +1895,16 @@ __mmplayer_gst_decode_callback(GstElement *elem, GstPad *pad, gpointer data)
                goto ERROR;
        }
 
-       //LOGD("detected mimetype : %s\n", name);
-
+       /* LOGD("detected mimetype : %s", name); */
        if (strstr(name, "audio")) {
                if (player->pipeline->audiobin == NULL) {
-                       if (MM_ERROR_NONE !=  __mmplayer_gst_create_audio_pipeline(player)) {
+                       if (__mmplayer_gst_create_audio_pipeline(player) != MM_ERROR_NONE) {
                                LOGE("failed to create audiobin. continuing without audio\n");
                                goto ERROR;
                        }
 
                        sinkbin = player->pipeline->audiobin[MMPLAYER_A_BIN].gst;
-                       LOGD("creating audiosink bin success\n");
+                       LOGD("creating audiosink bin success");
                } else {
                        reusing = TRUE;
                        sinkbin = player->pipeline->audiobin[MMPLAYER_A_BIN].gst;
@@ -3046,13 +3037,12 @@ void __mmplayer_gst_set_audiosink_property(mm_player_t* player, MMHandleType att
 static int
 __mmplayer_gst_create_audio_pipeline(mm_player_t* player)
 {
-       MMPlayerGstElementfirst_element = NULL;
-       MMPlayerGstElementaudiobin = NULL;
+       MMPlayerGstElement *first_element = NULL;
+       MMPlayerGstElement *audiobin = NULL;
        MMHandleType attrs = 0;
        GstPad *pad = NULL;
        GstPad *ghostpad = NULL;
-       GList* element_bucket = NULL;
-       gboolean link_audio_sink_now = TRUE;
+       GList *element_bucket = NULL;
        int i = 0;
        GstCaps *acaps;
 
@@ -3080,11 +3070,6 @@ __mmplayer_gst_create_audio_pipeline(mm_player_t* player)
        /* take it */
        player->pipeline->audiobin = audiobin;
 
-       player->set_mode.pcm_extraction = __mmplayer_can_extract_pcm(player);
-
-       /* Adding audiotp plugin for reverse trickplay feature */
-//     MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_TP, "audiotp", "audio trickplay", TRUE, player);
-
        /* converter */
        MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_CONV, "audioconvert", "audio converter", TRUE, player);
 
@@ -3098,80 +3083,51 @@ __mmplayer_gst_create_audio_pipeline(mm_player_t* player)
        /* resampler */
        MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_RESAMPLER,  player->ini.audioresampler_element, "audio resampler", TRUE, player);
 
-       if (player->set_mode.pcm_extraction) {
-               // pcm extraction only and no sound output
-               if (player->audio_stream_render_cb_ex) {
-                       char *caps_str = NULL;
-                       GstCaps* caps = NULL;
-                       gchar *format = NULL;
-
-                       /* capsfilter */
-                       MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_CAPS_DEFAULT, "capsfilter", "audio capsfilter", TRUE, player);
-
-                       mm_attrs_get_string_by_name(player->attrs, "pcm_audioformat", &format);
-
-                       LOGD("contents : format: %s samplerate : %d pcm_channel: %d", format, player->pcm_samplerate, player->pcm_channel);
-
-                       caps = gst_caps_new_simple("audio/x-raw",
-                                       "format", G_TYPE_STRING, format,
-                                       "rate", G_TYPE_INT, player->pcm_samplerate,
-                                       "channels", G_TYPE_INT, player->pcm_channel,
+       if (player->audio_stream_render_cb_ex) { /* pcm extraction only, no sound output */
+               gchar *dst_format = NULL;
+               int dst_len = 0;
+               int dst_samplerate = 0;
+               int dst_channels = 0;
+               GstCaps *caps = NULL;
+               char *caps_str = NULL;
+
+               /* get conf. values */
+               mm_attrs_multiple_get(player->attrs, NULL,
+                                       "pcm_audioformat", &dst_format, &dst_len,
+                                       "pcm_extraction_samplerate", &dst_samplerate,
+                                       "pcm_extraction_channels", &dst_channels,
                                        NULL);
-                       caps_str = gst_caps_to_string(caps);
-                       LOGD("new caps : %s\n", caps_str);
 
-                       g_object_set(GST_ELEMENT(audiobin[MMPLAYER_A_CAPS_DEFAULT].gst), "caps", caps, NULL);
+               LOGD("pcm info - format: %s(%d), samplerate : %d, channel: %d", dst_format, dst_len, dst_samplerate, dst_channels);
 
-                       /* clean */
-                       gst_caps_unref(caps);
-                       MMPLAYER_FREEIF(caps_str);
+               /* capsfilter */
+               MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_CAPS_DEFAULT, "capsfilter", "audio capsfilter", TRUE, player);
+               caps = gst_caps_new_simple("audio/x-raw",
+                               "format", G_TYPE_STRING, dst_format,
+                               "rate", G_TYPE_INT, dst_samplerate,
+                               "channels", G_TYPE_INT, dst_channels,
+                               NULL);
 
-                       MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_DEINTERLEAVE, "deinterleave", "deinterleave", TRUE, player);
+               caps_str = gst_caps_to_string(caps);
+               LOGD("new caps : %s", caps_str);
 
-                       g_object_set(G_OBJECT(audiobin[MMPLAYER_A_DEINTERLEAVE].gst), "keep-positions", TRUE, NULL);
-                       /* raw pad handling signal */
-                       __mmplayer_add_signal_connection(player, G_OBJECT(audiobin[MMPLAYER_A_DEINTERLEAVE].gst),
-                               MM_PLAYER_SIGNAL_TYPE_AUTOPLUG, "pad-added", G_CALLBACK(__mmplayer_gst_audio_deinterleave_pad_added), (gpointer)player);
-               } else {
-                       int dst_samplerate = 0;
-                       int dst_channels = 0;
-                       int dst_depth = 0;
-                       char *caps_str = NULL;
-                       GstCaps* caps = NULL;
-
-                       /* get conf. values */
-                       mm_attrs_multiple_get(player->attrs,
-                                               NULL,
-                                               "pcm_extraction_samplerate", &dst_samplerate,
-                                               "pcm_extraction_channels", &dst_channels,
-                                               "pcm_extraction_depth", &dst_depth,
-                                               NULL);
-
-                       /* capsfilter */
-                       MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_CAPS_DEFAULT, "capsfilter", "audio capsfilter", TRUE, player);
-                       caps = gst_caps_new_simple("audio/x-raw",
-                                       "rate", G_TYPE_INT, dst_samplerate,
-                                       "channels", G_TYPE_INT, dst_channels,
-                                       "depth", G_TYPE_INT, dst_depth,
-                                       NULL);
-                       caps_str = gst_caps_to_string(caps);
-                       LOGD("new caps : %s\n", caps_str);
+               g_object_set(GST_ELEMENT(audiobin[MMPLAYER_A_CAPS_DEFAULT].gst), "caps", caps, NULL);
+
+               /* clean */
+               gst_caps_unref(caps);
+               MMPLAYER_FREEIF(caps_str);
 
-                       g_object_set(GST_ELEMENT(audiobin[MMPLAYER_A_CAPS_DEFAULT].gst), "caps", caps, NULL);
+               MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_DEINTERLEAVE, "deinterleave", "deinterleave", TRUE, player);
 
-                       /* clean */
-                       gst_caps_unref(caps);
-                       MMPLAYER_FREEIF(caps_str);
+               g_object_set(G_OBJECT(audiobin[MMPLAYER_A_DEINTERLEAVE].gst), "keep-positions", TRUE, NULL);
 
-                       /* fake sink */
-                       MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_SINK, "fakesink", "fakesink", TRUE, player);
+               /* raw pad handling signal */
+               __mmplayer_add_signal_connection(player, G_OBJECT(audiobin[MMPLAYER_A_DEINTERLEAVE].gst),
+                       MM_PLAYER_SIGNAL_TYPE_AUTOPLUG, "pad-added", G_CALLBACK(__mmplayer_gst_audio_deinterleave_pad_added), (gpointer)player);
 
-                       /* set sync */
-                       g_object_set(G_OBJECT(audiobin[MMPLAYER_A_SINK].gst), "sync", FALSE, NULL);
-               }
        } else {
-               // normal playback
-               //GstCaps* caps = NULL;
+
+               /* normal playback */
                gint channels = 0;
 
                /* for logical volume control */
@@ -3183,18 +3139,6 @@ __mmplayer_gst_create_audio_pipeline(mm_player_t* player)
                        g_object_set(G_OBJECT(audiobin[MMPLAYER_A_VOL].gst), "mute", player->sound.mute, NULL);
                }
 
-#if 0
-               /*capsfilter */
-               MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_CAPS_DEFAULT, "capsfilter", "audiocapsfilter", TRUE, player);
-               caps = gst_caps_from_string("audio/x-raw-int, "
-                                       "endianness = (int) LITTLE_ENDIAN, "
-                                       "signed = (boolean) true, "
-                                       "width = (int) 16, "
-                                       "depth = (int) 16");
-               g_object_set(GST_ELEMENT(audiobin[MMPLAYER_A_CAPS_DEFAULT].gst), "caps", caps, NULL);
-               gst_caps_unref(caps);
-#endif
-
                /* check if multi-channels */
                if (player->pipeline->mainbin && player->pipeline->mainbin[MMPLAYER_M_DEMUX].gst) {
                        GstPad *srcpad = NULL;
@@ -3248,14 +3192,14 @@ __mmplayer_gst_create_audio_pipeline(mm_player_t* player)
 
                        strncpy(player->ini.audiosink_element, "openalsink", PLAYER_INI_MAX_STRLEN - 1);
 
-                       MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_CONV_BFORMAT, "audioconvert", "audio-converter-bformat", link_audio_sink_now, player);
+                       MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_CONV_BFORMAT, "audioconvert", "audio-converter-bformat", TRUE, player);
 
-                       MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_CAPS_360, "capsfilter", "audio-caps-filter", link_audio_sink_now, player);
+                       MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_CAPS_360, "capsfilter", "audio-caps-filter", TRUE, player);
                        acaps = gst_caps_from_string(SPATIAL_AUDIO_CAPS);
                        g_object_set(G_OBJECT(audiobin[MMPLAYER_A_CAPS_360].gst), "caps", acaps, NULL);
                        gst_caps_unref(acaps);
 
-                       MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_SINK, "openalsink", "audiosink", link_audio_sink_now, player);
+                       MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_SINK, "openalsink", "audiosink", TRUE, player);
                        g_object_set(G_OBJECT(audiobin[MMPLAYER_A_SINK].gst), "source-ambisonics-type", 1, NULL);
                        sound_manager_create_stream_information(SOUND_STREAM_TYPE_MEDIA, NULL, NULL, &stream_info);
                        g_object_set(G_OBJECT(audiobin[MMPLAYER_A_SINK].gst), "stream-info", stream_info, NULL);
@@ -3277,7 +3221,7 @@ __mmplayer_gst_create_audio_pipeline(mm_player_t* player)
                } else {
                        if (player->is_360_feature_enabled && player->is_content_spherical)
                                LOGW("Audio track isn't of the ambisonic type and can't be played back as a spatial sound.\n");
-                       MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_SINK, player->ini.audiosink_element, "audiosink", link_audio_sink_now, player);
+                       MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_SINK, player->ini.audiosink_element, "audiosink", TRUE, player);
                }
 
                /* qos on */
@@ -3389,21 +3333,6 @@ ERROR:
        return MM_ERROR_PLAYER_INTERNAL;
 }
 
-static GstPadProbeReturn
-__mmplayer_audio_stream_probe(GstPad *pad, GstPadProbeInfo *info, gpointer u_data)
-{
-       mm_player_t* player = (mm_player_t*) u_data;
-       GstBuffer *pad_buffer = gst_pad_probe_info_get_buffer(info);
-       GstMapInfo probe_info = GST_MAP_INFO_INIT;
-
-       gst_buffer_map(pad_buffer, &probe_info, GST_MAP_READ);
-
-       if (player->audio_stream_cb && probe_info.size && probe_info.data)
-               player->audio_stream_cb((void *)probe_info.data, probe_info.size, player->audio_stream_cb_user_param);
-
-       return GST_PAD_PROBE_OK;
-}
-
 static guint32 _mmplayer_convert_fourcc_string_to_value(const gchar* format_name)
 {
        return format_name[0] | (format_name[1] << 8) | (format_name[2] << 16) | (format_name[3] << 24);
@@ -4810,8 +4739,8 @@ __mmplayer_can_do_interrupt(mm_player_t *player)
                goto FAILED;
        }
 
-       if (player->set_mode.pcm_extraction) {
-               LOGW("leave right now, %d", player->set_mode.pcm_extraction);
+       if (player->audio_stream_render_cb_ex) {
+               LOGW("not support in pcm extraction mode");
                goto FAILED;
        }
 
@@ -5770,24 +5699,6 @@ _mmplayer_set_videostream_cb(MMHandleType hplayer, mm_player_video_stream_callba
        return MM_ERROR_NONE;
 }
 
-int
-_mmplayer_set_audiostream_cb(MMHandleType hplayer, mm_player_audio_stream_callback callback, void *user_param)
-{
-       mm_player_t* player = (mm_player_t*) hplayer;
-
-       MMPLAYER_FENTER();
-
-       MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
-
-       player->audio_stream_cb = callback;
-       player->audio_stream_cb_user_param = user_param;
-       LOGD("Audio Stream cb Handle value is %p : %p\n", player, player->audio_stream_cb);
-
-       MMPLAYER_FLEAVE();
-
-       return MM_ERROR_NONE;
-}
-
 static int
 __mmplayer_start_streaming_ext(mm_player_t *player)
 {
@@ -7937,45 +7848,6 @@ __mmplayer_gst_element_added(GstElement *bin, GstElement *element, gpointer data
        return;
 }
 
-gboolean __mmplayer_configure_audio_callback(mm_player_t* player)
-{
-       MMPLAYER_FENTER();
-       MMPLAYER_RETURN_VAL_IF_FAIL(player, FALSE);
-
-       if (MMPLAYER_IS_STREAMING(player))
-               return FALSE;
-
-       /* This callback can be set to music player only. */
-       if ((player->can_support_codec & 0x02) == FOUND_PLUGIN_VIDEO) {
-               LOGW("audio callback is not supported for video");
-               return FALSE;
-       }
-
-       if (player->audio_stream_cb) {
-               GstPad *pad = NULL;
-
-               pad = gst_element_get_static_pad(player->pipeline->audiobin[MMPLAYER_A_SINK].gst, "sink");
-
-               if (!pad) {
-                       LOGE("failed to get sink pad from audiosink to probe data\n");
-                       return FALSE;
-               }
-               player->audio_cb_probe_id = gst_pad_add_probe(pad, GST_PAD_PROBE_TYPE_BUFFER,
-                       __mmplayer_audio_stream_probe, player, NULL);
-
-               gst_object_unref(pad);
-
-               pad = NULL;
-       } else {
-               LOGE("There is no audio callback to configure.\n");
-               return FALSE;
-       }
-
-       MMPLAYER_FLEAVE();
-
-       return TRUE;
-}
-
 static void
 __mmplayer_release_misc(mm_player_t* player)
 {
@@ -7989,7 +7861,6 @@ __mmplayer_release_misc(mm_player_t* player)
        player->video_stream_cb_user_param = NULL;
        player->video_stream_prerolled = FALSE;
 
-       player->audio_stream_cb = NULL;
        player->audio_stream_render_cb_ex = NULL;
        player->audio_stream_cb_user_param = NULL;
        player->audio_stream_sink_sync = false;
@@ -8224,31 +8095,6 @@ __mmplayer_check_subtitle(mm_player_t* player)
        return TRUE;
 }
 
-static gboolean
-__mmplayer_can_extract_pcm(mm_player_t* player)
-{
-       MMHandleType attrs = 0;
-       gboolean sound_extraction = FALSE;
-
-       MMPLAYER_RETURN_VAL_IF_FAIL(player, FALSE);
-
-       attrs = MMPLAYER_GET_ATTRS(player);
-       if (!attrs) {
-               LOGE("fail to get attributes.");
-               return FALSE;
-       }
-
-       /* get sound_extraction property */
-       mm_attrs_get_int_by_name(attrs, "pcm_extraction", &sound_extraction);
-
-       if (!sound_extraction) {
-               LOGD("checking pcm extraction mode : %d ", sound_extraction);
-               return FALSE;
-       }
-
-       return TRUE;
-}
-
 void
 __mmplayer_cancel_eos_timer(mm_player_t* player)
 {
@@ -9227,22 +9073,6 @@ void _mm_player_video_stream_internal_buffer_unref(void *buffer)
        MMPLAYER_FLEAVE();
 }
 
-int
-_mmplayer_set_pcm_spec(MMHandleType hplayer, int samplerate, int channel)
-{
-       mm_player_t* player = (mm_player_t*) hplayer;
-
-       MMPLAYER_FENTER();
-
-       MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
-
-       player->pcm_samplerate = samplerate;
-       player->pcm_channel = channel;
-
-       MMPLAYER_FLEAVE();
-       return MM_ERROR_NONE;
-}
-
 int _mmplayer_get_timeout(MMHandleType hplayer, int *timeout)
 {
        mm_player_t* player = (mm_player_t*) hplayer;