Update APIs description 75/298675/3
authorGilbok Lee <gilbok.lee@samsung.com>
Tue, 12 Sep 2023 07:25:09 +0000 (16:25 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Thu, 21 Sep 2023 01:26:58 +0000 (10:26 +0900)
[Version] 0.0.39

Change-Id: I06fbc43d35d5cd5f1b56b3557e7b060e172e0369

include/trackrenderer_capi/trackrenderer_capi.h

index 4de14144770967e89dd6e2cdcb4bf5ed71f5d949..1792ad81be854f66c9a8f09d24a6e2f604cfcee0 100644 (file)
@@ -2,6 +2,7 @@
  * @file           trackrenderer_capi.h
  * @brief          Plusplayer trackrenderer api c version.
  * @interfacetype  Platform
+ * @platform_porting_interface
  * @privlevel      None-privilege
  * @privilege      None
  * @product        TV, AV, B2B
@@ -45,21 +46,42 @@ extern "C" {
 #endif
 
 /**
- * @brief
+ * @brief  Player app id, version, type information
  */
 typedef struct {
   /**
-   * @description
+   * @description   App id for controlling resource.
+   */
+  char* id;
+  /**
+   * @description   When there is playback market issue, KPI logger will
+   *                send the version.
+   */
+  char* version;
+  /**
+   * @description   RunningApps.InformationTicker will use this type to show
+   *                stream information. ex) "MSE", "HTML5", etc..
+   */
+  char* type;
+} TrackRendererAppInfo;
+
+/**
+ * @brief Event message
+ */
+typedef struct {
+  /**
+   * @description event message data
+   *           eg) kTrackRendererEventTypeResolutionChanged : "1920x1080"
    */
   char* data;
   /**
-   * @description
+   * @description the length of event message data
    */
   uint64_t len;
 } TrackrendererEventMsg;
 
 /**
- * @brief
+ * @brief Enumerations for event message types
  */
 enum TrackRendererEventType {
   kTrackRendererEventTypeNone,
@@ -78,6 +100,8 @@ typedef void* TrackRendererHandle;
  *               trackrenderer_set_error_cb in advance.
  * @post         User will handle the posted error according to error code.
  * @see          trackrenderer_set_error_cb()
+ * @see          trackrenderer_error_msg_cb() if a detailed error message is
+ *               required
  */
 typedef void (*trackrenderer_error_cb)(const TrackRendererErrorType error_code,
                                        void* userdata);
@@ -131,15 +155,15 @@ typedef void (*trackrenderer_flushdone_cb)(void* userdata);
 typedef void (*trackrenderer_eos_cb)(void* userdata);
 
 /**
- * @description  When resolution is changed, this function will be
- *               called to notify that resolution has been changed changed.
- * @param        [in] event_type : Resolution change event type.
- * @param        [in] msg_data : Resolution info.
+ * @description  When a specific event occurs, this function will be called to
+ *               notify it.
+ * @param        [in] event_type : event type that occured
+ * @param        [in] msg_data : event information
  * @param        [in] userdata : userdata of trackrenderer_event_cb callback
  *               function.
  * @pre          The callback function should be set by
  *               trackrenderer_set_event_cb, in advance.
- * @post         User can handle functionality referencing resolution info.
+ * @post         User can get the information of the event that occured
  * @see          trackrenderer_set_event_cb()
  */
 typedef void (*trackrenderer_event_cb)(const TrackRendererEventType event_type,
@@ -270,6 +294,12 @@ typedef void (*trackrenderer_media_packet_video_decoded_cb)(
  * @brief        return libtrackrenderer.so lib version as string
  * @param        None
  * @return       version info - major.minor.micro - as string
+ * @code
+ *               //your logic
+ *               const char* version;
+ *               version =  trackrenderer_get_version();
+ *               //your logic
+ * @endcode
  * @pre          None
  * @post         None
  * @exception    None
@@ -280,6 +310,12 @@ const char* trackrenderer_get_version(void);
  * @brief        return libtrackrenderer.so lib version as constant int.
  * @param        None
  * @return       version info - major.minor.micro - as unsigned int
+ * @code
+ *               //your logic
+ *               uint32_t version = 0;
+ *               version =  trackrenderer_get_version_int();
+ *               //your logic
+ * @endcode
  * @pre          None
  * @post         None
  * @exception    None
@@ -293,6 +329,12 @@ uint32_t trackrenderer_get_version_int(void);
  *               related job ex) display setting, decoding, rendering, etc..
  * @param        [out] handle : Get trackrenderer handle ptr.
  * @return       0 on success, otherwise -1 failed.
+ * @code
+ *               TrackRendererHandle handle = nullptr;
+ *               trackrenderer_create(&handle);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          None
  * @post         None
  * @exception    None
@@ -304,9 +346,13 @@ int trackrenderer_create(TrackRendererHandle* handle);
  * @description  Remove and dealloc trackrenderer object and handle.
  * @param        [in] handle : trackrenderer handle
  * @return       0 on success, otherwise -1 failed.
+ * @code
+ *               refer to the sample code of trackrenderer_create()
+ * @endcode
  * @pre          None
  * @post         None
  * @exception    None
+ * @see          trackrenderer_create()
  */
 int trackrenderer_destroy(TrackRendererHandle handle);
 
@@ -318,23 +364,21 @@ int trackrenderer_destroy(TrackRendererHandle handle);
  * @return       Return 0 if no problem.
  *               Otherwise -1 if the trackrenderer is not even set up.
  * @pre          The trackrenderer must be at least created and set up.
- *               trackrenderer_create()
- *               trackrenderer_prepare()
  * @post         The contents is playing.
  * @exception    None
  * @code
- * TrackRendererHandle handle = nullptr;
- * trackrenderer_create(&handle)
- * TrackRendererDisplayType type = kTrackRendererDisplayTypeOverlay;
- * ...
- * ...
- * TrackRendererTrack tracks[] = {videotrack, audiotrack};
- * int tracksize = 2;
- * trackrenderer_set_track(handle, tracks, tracksize);
- * trackrenderer_prepare(handle);
- * trackrenderer_start(handle);
+ *               //prepare trackrenderer hanle
+ *               trackrenderer_start(handle);
+ *               //your logic
+ *               trackrenderer_pause(handle);
+ *               //your logic
+ *               trackrenderer_resume(handle);
+ *               //your logic
+ *               trackrenderer_stop(handle);
  * @endcode
  * @remark       None
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare()
  */
 int trackrenderer_start(TrackRendererHandle handle);
 
@@ -348,10 +392,15 @@ int trackrenderer_start(TrackRendererHandle handle);
  * @return       Return 0 if the trackrenderer is not even setup or release the
  *               resource successfully.
  *               Otherwise -1.
+ * @code
+ *               refer to the sample code of trackrenderer_start()
+ * @endcode
  * @pre          After trackrenderer object is created, this can be called.
- *               trackrenderer_create()
  * @post         Trackrenderer release the decoder and display resource.
  * @exception    None
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare() \n
+ *               trackrenderer_start()
  */
 int trackrenderer_stop(TrackRendererHandle handle);
 
@@ -364,15 +413,22 @@ int trackrenderer_stop(TrackRendererHandle handle);
  * @return       Return 0 if all valid tracks playback is successfully prepared,
  *               succeed to update display 1 decoded frame media contents.
  *               Otherwise -1.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               //set tracks if needed
+ *               trackrenderer_prepare(handle);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          Active tracks informations for playing need to be set up.
- *               trackrenderer_create()
- *               trackrenderer_set_track()
  *               The media contents data must be delivered as mush as
  *               trackrenderer can parse data type.
  * @post         1 decoded frame media contents is displayed. The necessary TV
  *               resource is prepared to use.
  * @exception    None
  * @remark       None
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_set_track()
  */
 int trackrenderer_prepare(TrackRendererHandle handle);
 
@@ -382,13 +438,17 @@ int trackrenderer_prepare(TrackRendererHandle handle);
  * @return       Return 0 if trackrenderer is successfully paused.
  *               Otherwise return -1 if trackrenderer already release the
  *               resource.
+ * @code
+ *               refer to the sample code of trackrenderer_start()
+ * @endcode
  * @pre          The trackrenderer must be at least created and set up.
- *               trackrenderer_create()
- *               trackrenderer_prepare()
  * @post         The trackrenderer pause playback and displaying 1 decoded frame
  *               data.
  * @exception    None
  * @remark       None
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare() \n
+ *               trackrenderer_start()
  */
 int trackrenderer_pause(TrackRendererHandle handle);
 
@@ -400,12 +460,17 @@ int trackrenderer_pause(TrackRendererHandle handle);
  * @return       Return 0 if trackrenderer is successfully resume media
  *               contents.
  *               Otherwise -1.
+ * @code
+ *               refer to the sample code of trackrenderer_start()
+ * @endcode
  * @pre          The trackrenderer must be at least created and set up.
- *               trackrenderer_create()
- *               trackrenderer_prepare()
  * @post         The contents is playing.
  * @exception    None
  * @remark       None
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare() \n
+ *               trackrenderer_start() \n
+ *               trackrenderer_pause()
  */
 int trackrenderer_resume(TrackRendererHandle handle);
 
@@ -421,11 +486,21 @@ int trackrenderer_resume(TrackRendererHandle handle);
  *               subtitle and successfully set the track info to trackrenderer.
  *               Otherwise -1 if there is not any active tracks or already set
  *               tracks info.
+ * @code
+ *               TrackRendererHandle handle = nullptr;
+ *               trackrenderer_create(&handle)
+ *               TrackRendererTrack tracks[] = {videotrack, audiotrack};
+ *               int tracksize = 2;
+ *               trackrenderer_set_track(handle, tracks, tracksize);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          Get active tracks list for playing.
  * @post         Set up left of other properties to trackrenderer with using
  *               trackrenderer_prepare().
  * @exception    None
  * @remark       None
+ * @see          trackrenderer_create()
  */
 int trackrenderer_set_track(TrackRendererHandle handle,
                             const TrackRendererTrack* track, const int size);
@@ -437,10 +512,22 @@ int trackrenderer_set_track(TrackRendererHandle handle,
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] properties : Setting properties got from property file.
  * @param        [in] property_size : Number of properties for parsing.
+ * @code
+ *               trackrenderer_create(&handle)
+ *               TrackRendererIniProperty properties[2];
+ *               properties[0].key = "use_new_hls_mpegts_demuxer";
+ *               properties[0].value = true;
+ *               properties[1].key = "use_new_dash_tiny_demuxer";
+ *               properties[1].value = false;
+ *               trackrenderer_set_ini_property(handle, properties, 2)
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          Load property file and get informations.
  * @post         Trackrenderer set the parsed properties.
  * @exception    None
  * @remark       None
+ * @see          trackrenderer_create()
  */
 void trackrenderer_set_ini_property(TrackRendererHandle handle,
                                     TrackRendererIniProperty* properties,
@@ -467,8 +554,8 @@ void trackrenderer_set_ini_element(TrackRendererHandle handle,
  * @description  In this function, trackrenderer seek playback position to
  *               specific position and can set playback rate.
  * @param        [in] handle : trackrenderer handle ptr.
- * @param        [in] time_millisecond : the absolute position(playingtime) of
- *               the stream in milliseconds
+ * @param        [in] time : the absolute position(playingtime) of
+ *               the stream , default in milliseconds,according to the timeunit type.
  * @param        [in] playback_rate : For trick play playback rate.
  * @return       Return 0 if he trackrenderer can seek the position or set
  *               playback rate successfully. Playback rate 0 is not acceptable
@@ -476,9 +563,26 @@ void trackrenderer_set_ini_element(TrackRendererHandle handle,
  *               Otherwise -1 if the trackrenderer is not even setup,
  *               trackrenderer fail to seek playback position or fail to set
  *               playback rate.
+ * @code
+ *               static void SeekDoneCb(UserData userdata) {
+ *                  //do something you want when seek done
+ *               }
+ *               static void SeekDataCb(const TrackRendererTrackType type,
+ *                  const unsigned long long offset, UserData userdata) {
+ *                 //do something you want when trackrenderer is ready
+ *                  to get new seeked position segment data
+ *               }
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_seekdone_cb(handle, SeekDoneCb, nullptr);
+ *               trackrenderer_set_seekdata_cb(handle, SeekDataCb, nullptr);
+ *               trackrenderer_prepare(handle);
+ *               trackrenderer_start(handle);
+ *               //your logic
+ *               trackrenderer_seek(handle,10,1.0);
+ *               //your logic
+ *               trackrenderer_stop(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created and set up.
- *               trackrenderer_create()
- *               trackrenderer_prepare()
  * @post         Release the buffered data and start buffering seeked position
  *               segment data.
  * @exception    None
@@ -486,9 +590,12 @@ void trackrenderer_set_ini_element(TrackRendererHandle handle,
  *               called when seek operation is finished.
  *               The acceptable playback rate is different for each streaming
  *               source type.
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare() \n
+ *               trackrenderer_start() \n
+ *               trackrenderer_set_seekdone_cb()
  */
-int trackrenderer_seek(TrackRendererHandle handle,
-                       unsigned long long time_millisecond,
+int trackrenderer_seek(TrackRendererHandle handle, unsigned long long time,
                        double playback_rate);
 /**
  * @brief        Seek trackrenderer playback position, asynchronously.
@@ -496,20 +603,27 @@ int trackrenderer_seek(TrackRendererHandle handle,
  *               specific position and can set playback rate with audio mute
  *               on/off.
  * @param        [in] handle : trackrenderer handle ptr.
- * @param        [in] time_millisecond : the absolute position(playingtime) of
- *               the stream in milliseconds
+ * @param        [in] time : the absolute position(playingtime) of
+ *               the stream, default in milliseconds,according to the timeunit type.
  * @param        [in] playback_rate : For trick play playback rate.
  * @param        [in] audio_mute : audio is mute on/off when seek to target
- * position.
+ *               position.
  * @return       Return 0 if he trackrenderer can seek the position or set
- *               playback rate successfully. Playback rate 0 is not acceptable
- *               even though return value is 0.
+ *               playback rate successfully. Playback rate 0 is not accecptable
+ *               eventhough return value is 0.
  *               Otherwise -1 if the trackrenderer is not even setup,
  *               trackrenderer fail to seek playback position or fail to set
  *               playback rate.
+ * @code
+ *               //prepare trackrenderer hanle
+ *               //your logic
+ *               trackrenderer_start(handle);
+ *               //your logic
+ *               trackrenderer_seek2(handle,10,1.0,true);
+ *               //your logic
+ *               trackrenderer_stop(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created and set up.
- *               trackrenderer_create()
- *               trackrenderer_prepare()
  * @post         Release the buffered data and start buffering seeked position
  *               segment data.
  * @exception    None
@@ -518,34 +632,43 @@ int trackrenderer_seek(TrackRendererHandle handle,
  *               called when seek operation is finished.
  *               The acceptable playback rate is different for each streaming
  *               source type.
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare() \n
+ *               trackrenderer_start()
  */
-int trackrenderer_seek2(TrackRendererHandle handle,
-                        unsigned long long time_millisecond,
+int trackrenderer_seek2(TrackRendererHandle handle, unsigned long long time,
                         double playback_rate, bool audio_mute);
 
 /**
  * @brief        Set trackrenderer playback rate, asynchronously.
  * @description  In this function, trackrenderer set playback rate and audio
- * mute on/off.
+ *               mute on/off.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] playback_rate : For trick play playback rate.
  * @param        [in] audio_mute : For trick play audio mute on/off, true: mute
- * on, false: mute off.
+ *               on, false: mute off.
  * @return       Return 0 if he trackrenderer can  set  playback rate
- * successfully. Playback rate 0 is not accecptable
+ *               successfully. Playback rate 0 is not accecptable
  *               even though return value is 0.
  *               Otherwise -1 if the trackrenderer is not even setup,
  *               trackrenderer fail to set playback rate.
+ * @code
+ *               //prepare trackrenderer hanle
+ *               //your logic
+ *               trackrenderer_set_playback_rate(handle, 2.0, true);
+ *               //your logic
+ *               trackrenderer_stop(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created and set up.
- *               trackrenderer_create()
- *               trackrenderer_prepare()
  * @post         Release the buffered data and start buffering current playing
  * position
  * @exception    None
- * @version        2.0
+ * @version      2.0
  * @remark       Setting playback rate is asynchronous operation.
  *               The acceptable playback rate is different for each streaming
  *               source type.
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare()
  */
 int trackrenderer_set_playback_rate(TrackRendererHandle handle,
                                     double playback_rate, bool audio_mute);
@@ -556,20 +679,27 @@ int trackrenderer_set_playback_rate(TrackRendererHandle handle,
  *               contents position. This is used when change playback rate from
  *               current position.
  * @param        [in] handle : trackrenderer handle ptr.
- * @param        [out] time_millisecond : current playing time in milliseconds
+ * @param        [out] time : current playing time (default milliseconds)
  * @return       Return 0 if trackrenderer successfully get currently rendering
  *               contents position.
  *               Otherwise -1.
+ * @code
+ *               //prepare trackrenderer hanle
+ *               //your logic
+ *               uint64_t time_millisecond = 0;
+ *               trackrenderer_get_playing_time(handle, &time_millisecond));
+ *               //your logic
+ *               trackrenderer_stop(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created and set up.
- *               trackrenderer_create()
- *               trackrenderer_prepare()
  * @post         None
  * @exception    None.
  * @remark       None
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare()
  */
 int trackrenderer_get_playing_time(TrackRendererHandle handle,
-                                   uint64_t* time_millisecond);
-
+                                   unsigned long long* time);
 /**
  * @brief        Get dropped frame counts in videosink
  * @description  In this function trackrenderer get currently dropped frames in
@@ -618,7 +748,7 @@ int trackrenderer_get_dropped_frames(TrackRendererHandle handle, void* counts);
  * @pre          The trackrenderer must be at least created and set up.
  * @post         None
  * @exception    None.
- * @version      3.0
+ * @version      2.7
  * @remark       None
  * @see          trackrenderer_create() \n
  *               trackrenderer_prepare()
@@ -630,19 +760,33 @@ int trackrenderer_get_dropped_frames_for_catchup(TrackRendererHandle handle,
 /**
  * @brief        Flush buffers for a trackrenderer.
  * @description  In this function trackrenderer will flush data in
- * appsrc,decoder,sink.
+ *               appsrc,decoder,sink.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] type : type of track which need to be flush.
  * @return       Return 0 if flushing buffer for a track successfully.
  *               Otherwise -1.
+ * @code
+ *               static void FlushDoneCb(UserData userdata) {
+ *                   //do something you want to do when flush done
+ *               }
+
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_flushdone_cb(handle, FlushDoneCb, nullptr);
+ *               trackrenderer_prepare(handle);
+ *               //your logic
+ *               trackrenderer_flush(handle, kTrackRendererTrackTypeAudio);
+ *               //your logic
+ *               trackrenderer_stop(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created and set up.
- *               trackrenderer_create()
- *               trackrenderer_prepare()
  * @post         None
  * @exception    None.
- * @version        2.0
+ * @version      2.0
  * @remark       trackrenderer_flushdone_cb() is called when flush operation is
- * fininshed
+ *               fininshed
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare() \n
+ *               trackrenderer_flushdone_cb()
  */
 int trackrenderer_flush(TrackRendererHandle handle,
                         TrackRendererTrackType type);
@@ -660,15 +804,24 @@ int trackrenderer_flush(TrackRendererHandle handle,
  *               the TV resources.
  *               Otherwise -1 if the trackrenderer is not even set up or fail to
  *               release the resources.
+ * @code
+ *               //prepare trackrenderer hanle
+ *               //your logic
+ *               trackrenderer_deactivate(handle, kTrackRendererTrackTypeVideo)
+ *               //your logic
+ *               trackrenderer_activate(handle,
+ *                   kTrackRendererTrackTypeVideo,nullptr));
+ *               //your logic
+ *               trackrenderer_stop(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created and set up.
- *               trackrenderer_create()
- *               trackrenderer_prepare()
  * @post         trackrenderer_activate() should be called if new data stream
  *               need to be inserted and get new TV resource for decoding and
  *               rendering.
  * @exception    None
  * @remark       None
- *
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare()
  */
 int trackrenderer_deactivate(TrackRendererHandle handle,
                              TrackRendererTrackType type);
@@ -684,12 +837,16 @@ int trackrenderer_deactivate(TrackRendererHandle handle,
  * @return       Return 0 if trackrenderer is successfully rebuilt with using
  *               new data stream. Otherwise -1 if the trackrenderer is not even
  *               set up or fail to get resources.
+ * @code
+ *               refer to the sample code of trackrenderer_deactivate()
+ * @endcode
  * @pre          The trackrenderer must be at least created and set up.
- *               trackrenderer_create()
- *               trackrenderer_prepare()
  * @post         None
  * @exception    None
  * @remark       None
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare() \n
+ *               trackrenderer_deactivate()
  */
 int trackrenderer_activate(TrackRendererHandle handle,
                            TrackRendererTrackType type,
@@ -705,22 +862,56 @@ int trackrenderer_activate(TrackRendererHandle handle,
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] data : the data user want to add to the trackrenderer
                  buffer
- * @param        [out] retval : the result of submission.
+ * @param        [out] retval : the result of submition.
  * @return       Return 0 if trackrenderer successfully add the buffer to queue
  *               or the EOS data.
  *               Otherwise -1 if the trackrenderer is not even set up, queue is
  *               already full or the data is unusable.
+ * @code
+ *               static void BufferStatusCb(const TrackRendererTrackType type,
+ *                   const TrackRendererBufferStatus status,UserData userdata) {
+ *                   if (type == kTrackRendererTrackTypeAudio) {
+ *                       if (status == kTrackRendererBufferStatusUnderrun)
+ *                           // do something when feed Audio is possible
+ *                       else
+ *                           //do something when feed Audio is impossible
+ *                   } else if(type == kTrackRendererTrackTypeVideo) {
+ *                       if (status == kTrackRendererBufferStatusUnderrun)
+ *                           //do something when feed Video is possible
+ *                       else
+ *                           //do something when feed Video is impossible
+ *                   } else if(type == kTrackRendererTrackTypeSubtitle) {
+ *                       if (status == kTrackRendererBufferStatusUnderrun)
+ *                           //do something when feed Subtitle is possible
+ *                       else
+ *                           //do something when feed Subtitle is impossible
+ *                   }
+ *               }
+ *               void FeedPacket(const TrackRendererHandle& handle,
+ *                   const TrackRendererDecoderInputBufferPtr& buffer,...) {
+ *                   //your logic
+ *                   SubmitStatus status=kTrackRendererSubmitStatusNotPrepared;
+ *                   trackrenderer_submit_packet(handle, buffer.get(),&status);
+ *                   //your logic
+ *               }
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_bufferstatus_cb(handle,BufferStatusCb,nullptr);
+ *               trackrenderer_prepare(handle);
+ *               //your logic
+ *               //execute FeedPacket() when feed is possible.
+ *               (call a new thread to do this)
+ *               //your logic
+ *               trackrenderer_stop(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created and set up.
- *               trackrenderer_create()
- *               trackrenderer_prepare()
  * @post         If EOS is submitted to buffer, trackrenderer_eos_cb will be
  *               called.
  * @exception    None
  * @remark       The buffered tracksource data is submitted to trackrenderer by
  *               feeder.
- *
- *
- * this is data copy
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare() \n
+ *               trackrenderer_set_bufferstatus_cb()
  */
 int trackrenderer_submit_packet(TrackRendererHandle handle,
                                 TrackRendererDecoderInputBuffer* data,
@@ -737,20 +928,22 @@ int trackrenderer_submit_packet(TrackRendererHandle handle,
  * @param        [in] data : the data user want to add to the trackrenderer
  *               buffer
  * @param        [out] retval : the result of submission.
+ * @code
+                 refer to the sample code of trackrenderer_submit_packet()
+ * @endcode
  * @return       Return 0 if trackrenderer successfully add the buffer to queue
  *               or the EOS data.
  *               Otherwise -1 if the trackrenderer is not even set up, queue is
  *               already full or the data is unusable.
  * @pre          The trackrenderer must be at least created and set up.
- *               trackrenderer_create()
- *               trackrenderer_prepare()
  * @post         If EOS is submitted to buffer, trackrenderer_eos_cb will be
  *               called.
  * @exception    None
  * @remark       The buffered tracksource data is submitted to trackrenderer by
  *               feeder.
- *
- * this is data move
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare() \n
+ *               trackrenderer_set_bufferstatus_cb()
  */
 int trackrenderer_submit_packet2(TrackRendererHandle handle,
                                  TrackRendererDecoderInputBuffer* data,
@@ -763,7 +956,16 @@ int trackrenderer_submit_packet2(TrackRendererHandle handle,
  *               process itself.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] drm_property : drm property
- * @pre          None
+ * @code
+ *               trackrenderer_create(&handle);
+ *               TrackRendererDrmProperty_64bit trackrenderer_drm_property{
+ *                      kTrackRendererDrmTypePlayready,
+ *                                      0, 1, nullptr, nullptr};
+ *               trackrenderer_set_drm(handle,&trackrenderer_drm_property);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
+ * @pre          The trackrenderer must be at least created.
  * @post         None
  * @exception    None
  * @remark       Set drm property directly
@@ -778,11 +980,19 @@ void trackrenderer_set_drm(TrackRendererHandle handle,
  *               process itself.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] type : which type of track drm license was acquired
+ * @code
+ *               //prepare trackrenderer hanle
+ *               //your logic
+ *               trackrenderer_drm_license_acquired_done(handle,
+ *                   kTrackRendererTrackTypeMax);
+ *               //your logic
+ *               trackrenderer_stop(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created and set up.
- *               trackrenderer_create()
- *               trackrenderer_prepare()
  * @post         None
  * @exception    None
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare()
  */
 void trackrenderer_drm_license_acquired_done(TrackRendererHandle handle,
                                              TrackRendererTrackType type);
@@ -811,11 +1021,22 @@ void trackrenderer_set_drm_license_key(TrackRendererHandle handle,
  * @return       Return 0 if rendering mode is successfully applied or stored
  *               for future displaying.
  *               Otherwise -1 if the trackrenderer is not even setup.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_display_mode(
+ *                   handle, kTrackRendererDisplayModeOriginSize));
+ *               //your logic
+ *               TrackRendererDisplayMode display_mode =
+ *                   static_cast<TrackRendererDisplayMode>(-1);
+ *               trackrenderer_get_display_mode(handle, &display_mode);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created.
- *               trackrenderer_create()
  * @post         None
  * @exception    None
  * @remark       None
+ * @see          trackrenderer_create()
  */
 int trackrenderer_set_display_mode(TrackRendererHandle handle,
                                    TrackRendererDisplayMode mode);
@@ -824,20 +1045,25 @@ int trackrenderer_set_display_mode(TrackRendererHandle handle,
  * @brief        Set the video display rotate angle.
  * @description  In this function will set the video display rotate. If the
  *               trackrenderer is not prepared to update the display rotate yet,
- * the
- *               trackrenderer stored the rotate and update it after
+ *               the trackrenderer stored the rotate and update it after
  *               trackrenderer is ready to update display.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] rotate : display rotate angle
  * @return       Return 0 if rendering mode is successfully applied or stored
  *               for future displaying.
  *               Otherwise -1 if the trackrenderer is not even setup.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_display_rotate(handle,kTrackRendererDisplayRotate90);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created.
- *               trackrenderer_create()
  * @post         None
  * @exception    None
- * @version        2.0
+ * @version      2.0
  * @remark       None
+ * @see          trackrenderer_create()
  */
 int trackrenderer_set_display_rotate(TrackRendererHandle handle,
                                      TrackRendererDisplayRotate rotate);
@@ -849,12 +1075,21 @@ int trackrenderer_set_display_rotate(TrackRendererHandle handle,
  * @param        [out] rotate : store the display rotate angle
  * @return       Return 0 if get rotate value success.
  *               Otherwise -1 if the trackrenderer is not even setup.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               //your logic
+ *               TrackRendererDisplayRotate gtype =
+ *                   kTrackRendererDisplayRotateNone;
+ *               rackrenderer_get_display_rotate(handle, &gtype);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created.
- *               trackrenderer_create()
  * @post         None
  * @exception    None
- * @version        2.0
+ * @version      2.0
  * @remark       None
+ * @see          trackrenderer_create()
  */
 int trackrenderer_get_display_rotate(TrackRendererHandle handle,
                                      TrackRendererDisplayRotate* rotate);
@@ -875,11 +1110,22 @@ int trackrenderer_get_display_rotate(TrackRendererHandle handle,
  * @return       Return 0 if rendering properties are successfully applied for
  *               displaying contents or stored for future displaying.
  *               Otherwise -1 if the trackrenderer is not even setup.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_display_surface(handle,
+ *                   kTrackRendererDisplayTypeOverlay, 3, 100, 100, 100, 100);
+ *               //your logic
+ *               TrackRendererDisplayType type = kTrackRendererDisplayTypeNone;
+ *               TrackRendererGeometry area = {-1, -1, -1, -1};
+ *               trackrenderer_get_display(handle, &type, &area);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created.
- *               trackrenderer_create()
  * @post         None
  * @exception    None
  * @remark       None
+ * @see          trackrenderer_create()
  */
 int trackrenderer_set_display_surface(TrackRendererHandle handle,
                                       TrackRendererDisplayType type,
@@ -898,11 +1144,21 @@ int trackrenderer_set_display_surface(TrackRendererHandle handle,
  * @return       Return 0 if rendering object is successfully applied for
  *               displaying contents or stored for future displaying.
  *               Otherwise -1 if the trackrenderer is not even setup.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               Environment* env = new Environment();
+ *               TrackRendererDisplayType type =
+ *                   kTrackRendererDisplayTypeOverlay;
+ *               trackrenderer_set_display(handle,type,env->Window());
+ *               //your logic
+ *               delete env;
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created.
- *               trackrenderer_create()
  * @post         None
  * @exception    None
  * @remark       None
+ * @see          trackrenderer_create()
  */
 int trackrenderer_set_display(TrackRendererHandle handle,
                               TrackRendererDisplayType type, void* obj);
@@ -925,11 +1181,19 @@ int trackrenderer_set_display(TrackRendererHandle handle,
  *               applied for displaying contents or stored for future
  *               displaying.
  *               Otherwise -1 if the trackrenderer is not even setup.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_display_ecore_wl2_window(
+ *                   handle,kTrackRendererDisplayTypeOverlay,NULL,
+ *                   0,0,1920,1080));
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created.
- *               trackrenderer_create()
  * @post         None
  * @exception    None
  * @remark       None
+ * @see          trackrenderer_create()
  */
 int trackrenderer_set_display_ecore_wl2_window(TrackRendererHandle handle,
                                                TrackRendererDisplayType type,
@@ -944,31 +1208,51 @@ int trackrenderer_set_display_ecore_wl2_window(TrackRendererHandle handle,
  * @return       Return 0 if rendering range is successfully set or
  *               rendering range is stored for future displaying.
  *               Otherwise -1 if the trackrenderer is not even setup.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_display_mode(
+ *                   handle, kTrackRendererDisplayModeDstRoi));
+ *               TrackRendererGeometry roi = {0, 0, 1920, 1080};
+ *               trackrenderer_set_display_roi(handle, &roi);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created.
- *               trackrenderer_create()
  *               The display mode should be set to
  *               kTrackRendererDisplayModeDstRoi.
- *               trackrenderer_set_display_mode()
  * @post         None
  * @exception    None
  * @remark       The minimum value of width and height are 1.
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_set_display_mode()
  */
 int trackrenderer_set_display_roi(TrackRendererHandle handle,
                                   TrackRendererGeometry* roi);
 
 /**
- * @brief     Set the Crop Area(Region Of Src ratio) area of display.
- * @param     [in] handle : esplusplayer handle.
- * @param     [in] crop: x y label , height, width crop ratio in src video area.
- * @return    @c true on success, otherwise @c false.
- * @pre       The player state can be all of #esplusplayer_state except
- *            #ESPLUSPLAYER_STATE_NONE. \n
- * @post      None
- * @exception   None
- * @version        2.0
- * @remark    The minimum value of input are 0,maximum value is 1.
- * @see       esplusplayer_set_display() \n
- *            esplusplayer_set_display_visible()
+ * @brief        Set the Crop Area(Region Of Src ratio) area of display.
+ * @param        [in] handle : esplusplayer handle.
+ * @param        [in] crop: x y label , height, width crop ratio in src video area.
+ * @return       @c true on success, otherwise @c false.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_display_mode(
+ *                   handle, kTrackRendererDisplayModeDstRoi));
+ *               TrackRendererCropArea roi = {0.2, 0.2, 0.5, 0.5};
+ *               trackrenderer_set_video_roi(handle, &roi));
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
+ * @pre          The trackrenderer must be at least created and
+ *               The player state can be all of #esplusplayer_state except
+ *               #ESPLUSPLAYER_STATE_NONE.
+ * @post         None
+ * @exception    None
+ * @version      2.0
+ * @remark       The minimum value of input are 0,maximun value is 1.
+ * @see          trackrenderer_create() \n
+ *               esplusplayer_set_display() \n
+ *               esplusplayer_set_display_visible()
  */
 int trackrenderer_set_video_roi(TrackRendererHandle handle,
                                 TrackRendererCropArea* crop);
@@ -984,12 +1268,18 @@ int trackrenderer_set_video_roi(TrackRendererHandle handle,
  * @return       Return 0 if visibility is updated or stored for future
  *               displaying.
  *               Otherwise -1 if the trackrenderer is not even setup.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_display_visible(handle, true);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created.
- *               trackrenderer_create()
  * @post         None
  * @exception    None
  * @remark       None
  * @see          This is similar to trackrenderer_set_audio_mute() for audio
+ * @see          trackrenderer_create()
  */
 int trackrenderer_set_display_visible(TrackRendererHandle handle,
                                       bool is_visible);
@@ -1002,9 +1292,15 @@ int trackrenderer_set_display_visible(TrackRendererHandle handle,
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [out] type : display type
  * @param        [out] area : Roi Geometry
- * @pre          None
+ * @code
+ *               please refer to the sample code of
+ *               trackrenderer_set_display_surface
+ * @endcode
+ * @pre          The trackrenderer must be at least created.
  * @post         None
  * @exception    None
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_set_display_surface()
  */
 void trackrenderer_get_display(TrackRendererHandle handle,
                                TrackRendererDisplayType* type,
@@ -1016,9 +1312,15 @@ void trackrenderer_get_display(TrackRendererHandle handle,
  *               contents.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [out] mode : display mode
- * @pre          None
+ * @code
+ *               please refer to the sample code of
+ *               trackrenderer_set_display_mode
+ * @endcode
+ * @pre          The trackrenderer must be at least created.
  * @post         None
  * @exception    None
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_set_display_mode()
  */
 void trackrenderer_get_display_mode(TrackRendererHandle handle,
                                     TrackRendererDisplayMode* mode);
@@ -1033,24 +1335,35 @@ void trackrenderer_get_display_mode(TrackRendererHandle handle,
  * @return       Return 0 if audio mute successfully turn into or stored for
  *               future playing.
  *               Otherwise -1 failed if the trackrenderer not even set up.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_audio_mute(handle, true);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created.
- *               trackrenderer_create()
  * @post         None
  * @exception    None
  * @remark       None
- * @see          This is similar to trackrenderer_set_display_visible() for
- *               video.
+ * @see          trackrenderer_create()
  */
 int trackrenderer_set_audio_mute(TrackRendererHandle handle, bool is_mute);
 
 /**
- * (This is need to be checked whether it is using or not)
- * @brief     Set trackrenderer video still mode
- * @param     [in] handle : trackrenderer handle ptr.
- * @param     [in] type : trackrenderer still mode on, off or non
- * @pre       None
- * @post      None
- * @exception None
+ * @brief        Set trackrenderer video still mode
+ * @param        [in] handle : trackrenderer handle ptr.
+ * @param        [in] type : trackrenderer still mode on, off or non
+ * @code
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_video_still_mode(handle,
+ *                   kTrackRendererStillModeOn);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
+ * @pre          The trackrenderer must be at least created.
+ * @post         None
+ * @exception    None
+ * @see          trackrenderer_create()
  */
 void trackrenderer_set_video_still_mode(TrackRendererHandle handle,
                                         TrackRendererStillMode type);
@@ -1059,9 +1372,17 @@ void trackrenderer_set_video_still_mode(TrackRendererHandle handle,
  * @brief        Get trackrenderer current state
  * @param        [in] handle : trackrenderer handle ptr.
  * @return       Returns TrackRendererState.
- * @pre          None
+ * @code
+ *               trackrenderer_create(&handle);
+ *               //your logic
+ *               TrackRendererState state = trackrenderer_get_state(handle);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
+ * @pre          The trackrenderer must be at least created.
  * @post         None
  * @exception    None
+ * @see          trackrenderer_create()
  */
 TrackRendererState trackrenderer_get_state(TrackRendererHandle handle);
 
@@ -1071,22 +1392,26 @@ TrackRendererState trackrenderer_get_state(TrackRendererHandle handle);
  * @param        [in] attr_name : name of first property to set.
  * @param        [in] ... : value for the first property, followed optionally by
  *               more name/value pairs, followed by NULL.
- * @pre          None
- * @post         None
- * @exception    None
  * @code
- * unsigned long long video_queue_size = 2 * 1024 * 1024; // 2MB
- * unsigned long long audio_queue_size = 100 * 1024;      // 100KB
- * trackrenderer_set_attribute(handle,
- *                             "video-queue-max-byte", video_queue_byte,
- *                             "audio-queue-max-byte", audio_queue_byte,
- *                             NULL);
+ *               trackrenderer_create(&handle);
+ *               unsigned long long video_queue_size = 2 * 1024 * 1024; // 2MB
+ *               unsigned long long audio_queue_size = 100 * 1024; // 100KB
+ *               trackrenderer_set_attribute(handle,
+ *                   "video-queue-max-byte", video_queue_byte,
+ *                   "audio-queue-max-byte", audio_queue_byte,
+ *                   NULL);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
  * @endcode
+ * @pre          The trackrenderer must be at least created.
+ * @post         None
+ * @exception    None
  * @remark       a name of attribute and a type of value must be paired. \n
  *               if you set wrong type of attribute, unknown error can occur.
  *               \n if trackrenderer can't parse attr_name, assertion
  *               will be failed.
- * @see          If you want to know what kinds of attribute are there, please
+ * @see          trackrenderer_create() \n
+ *               If you want to know what kinds of attribute are there, please
  *               refer this link: \n
  *               http://wiki.vd.sec.samsung.net/display/plusplayer/TrackRenderer+Attribute
  */
@@ -1099,23 +1424,27 @@ void trackrenderer_set_attribute(TrackRendererHandle handle,
  * @param        [in] attr_name : name of first property to set.
  * @param        [in] ... : value for the first property, followed optionally by
  *               more name/value pairs, followed by NULL.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               unsigned long long video_current_byte;
+ *               unsigned long long audio_current_byte;
+ *               trackrenderer_get_attribute(handle,
+ *                   "video-current-level-byte", &video_current_byte,
+ *                   "audio-current-level-byte", &audio_current_byte,
+ *                   NULL);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          None
  * @post         None
  * @exception    None
- * @version        2.0
- * @code
- * unsigned long long video_current_byte;
- * unsigned long long audio_current_byte;
- * trackrenderer_get_attribute(handle,
- *                             "video-current-level-byte", &video_current_byte,
- *                             "audio-current-level-byte", &audio_current_byte,
- *                             NULL);
- * @endcode
+ * @version      2.0
  * @remark       a name of attribute and a type of value must be paired. \n
  *               if you set wrong type of attribute, unknown error can occur.
  *               \n if trackrenderer can't parse attr_name, assertion
  *               will be failed.
- * @see          If you want to know what kinds of attribute are there, please
+ * @see          trackrenderer_create() \n
+ *               If you want to know what kinds of attribute are there, please
  *               refer this link: \n
  *               http://wiki.vd.sec.samsung.net/display/plusplayer/TrackRenderer+Attribute
  */
@@ -1128,24 +1457,43 @@ void trackrenderer_get_attribute(TrackRendererHandle handle,
  * @param        [in] color_info : matroska color info
  * @return       Return 0 if no problem.
  *               Otherwise -1 if the trackrenderer is not even set up.
+ * @code
+ *               //prepare trackrenderer hanle
+ *               //your logic
+ *               std::string color = "red";
+ *               trackrenderer_set_matroska_color_info(handle, color.c_str());
+ *               //your logic
+ *               trackrenderer_stop(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created and set up.
- *               trackrenderer_create()
- *               trackrenderer_prepare()
  * @post         None
  * @exception    None
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_prepare()
  */
 int trackrenderer_set_matroska_color_info(TrackRendererHandle handle,
                                           const char* color_info);
 
 /**
- * @brief     Set decoded video frame buffer type.
+ * @brief        Set decoded video frame buffer type.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] type : one of the video decoded buffer type to set .
- * @pre          The trackrenderer must be at least created but before prepare.
- *               trackrenderer_create()
- * @post      None
- * @exception   None
- * @version        2.0
+ * @pre          The trackrenderer must be at least created, but before prepare
+ *               if type is not equal to be
+ * kTrackRendererDecodedVideoFrameBufferScale.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_video_frame_buffer_type(handle,
+ *                   kTrackRendererDecodedVideoFrameBufferReference);
+ *               //your logic
+ *               trackrenderer_prepare(handle);
+ *               //your logic
+ * @endcode
+ * @pre          The trackrenderer must be at least created and set up.
+ * @post         None
+ * @exception    None
+ * @version      2.0
+ * @see          trackrenderer_create()
  */
 void trackrenderer_set_video_frame_buffer_type(
     TrackRendererHandle handle, TrackRendererDecodedVideoFrameBufferType type);
@@ -1156,11 +1504,18 @@ void trackrenderer_set_video_frame_buffer_type(
  * @param        [in] volume : volume level(0 ~ 100)
  * @return       Return 0 if no problem.
  *               Otherwise -1 if the trackrenderer is not created.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               int volume = 65;
+ *               trackrenderer_set_volume(handle, volume));
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created.
- *               trackrenderer_create()
  * @post         None
- * @version        2.0
+ * @version      2.0
  * @exception    None
+ * @see          trackrenderer_create()
  */
 int trackrenderer_set_volume(TrackRendererHandle handle, const int volume);
 
@@ -1170,11 +1525,19 @@ int trackrenderer_set_volume(TrackRendererHandle handle, const int volume);
  * @param        [out] volume : volume ptr
  * @return       Return 0 if no problem.
  *               Otherwise -1 if the trackrenderer is not created.
+ * @code
+ *               trackrenderer_create(&handle);
+ *               //your logic
+ *               int volume = 0;
+ *               trackrenderer_get_volume(handle, &volume));
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
  * @pre          The trackrenderer must be at least created.
- *               trackrenderer_create()
  * @post         None
- * @version        2.0
+ * @version      2.0
  * @exception    None
+ * @see          trackrenderer_create()
  */
 int trackrenderer_get_volume(TrackRendererHandle handle, int* volume);
 
@@ -1203,13 +1566,26 @@ int trackrenderer_enable_video_hole(TrackRendererHandle handle, const bool value
  * @param        [in] callback : trackrenderer_error_cb function
  * @param        [in] userdata : userdata of trackrenderer_error_cb callback
  *               function.
- * @pre          None
+ * @code
+ *               static void ErrorCb(const TrackRendererErrorType error_code,
+ *                   UserData userdata) {
+ *                   //Something you want to do when Receive error
+ *                   printf("Receive error\n");
+ *               }
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_error_cb(handle, ErrorCb, nullptr);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
+ * @pre          The trackrenderer must be at least created
  * @post         When there is error event, trackrenderer_error_cb() is called.
  * @exception    None
  * @remark       trackrenderer_error_cb \n
  *               [in] error_code : enum TrackRendererErrorType\n
  *               [in] userdata : userdata of trackrenderer_error_cb
  *               callback function.
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_error_cb
  */
 void trackrenderer_set_error_cb(TrackRendererHandle handle,
                                 trackrenderer_error_cb callback,
@@ -1224,7 +1600,18 @@ void trackrenderer_set_error_cb(TrackRendererHandle handle,
  * @param        [in] callback : trackrenderer_resource_conflicted_cb ptr.
  * @param        [in] userdata : userdata of
  *               trackrenderer_resource_conflicted_cb callback function.
- * @pre          None
+ * @code
+ *               static void ResourceConflictCb(UserData userdata) {
+ *                   //Something you want to do when Resource Conflict
+ *                   printf("Receive Resource Conflict message\n");
+ *               }
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_resourceconflict_cb(handle,
+ *                   ResourceConflictCb, nullptr);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
+ * @pre          The trackrenderer must be at least created
  * @post         When there is resource conflict, the
  *               trackrenderer_resource_conflicted_cb will notify the resource
  *               conflict message to manage the resource.
@@ -1232,6 +1619,8 @@ void trackrenderer_set_error_cb(TrackRendererHandle handle,
  * @remark       trackrenderer_resource_conflicted_cb \n
  *               [in] userdata : userdata of
  *               trackrenderer_resource_conflicted_cb callback function.
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_resource_conflicted_cb
  */
 void trackrenderer_set_resourceconflict_cb(
     TrackRendererHandle handle, trackrenderer_resource_conflicted_cb callback,
@@ -1246,13 +1635,18 @@ void trackrenderer_set_resourceconflict_cb(
  * @param        [in] callback : trackrenderer_seekdone_cb ptr.
  * @param        [in] userdata : userdata of trackrenderer_seekdone_cb callback
  *               function.
- * @pre          None
+ * @code
+ *               refer to the sample code of trackrenderer_seek()
+ * @endcode
+ * @pre          The trackrenderer must be at least created
  * @post         When seek done, app will handle the trackrenderer_seekdone_cb
  *               to decide next operation.
  * @exception    None
  * @remark       trackrenderer_seekdone_cb \n
  *               [in] userdata : userdata of trackrenderer_seekdone_cb callback
  *               function.
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_seekdone_cb
  */
 void trackrenderer_set_seekdone_cb(TrackRendererHandle handle,
                                    trackrenderer_seekdone_cb callback,
@@ -1267,58 +1661,81 @@ void trackrenderer_set_seekdone_cb(TrackRendererHandle handle,
  * @param        [in] callback : trackrenderer_flushdone_cb ptr.
  * @param        [in] userdata : userdata of trackrenderer_flushdone_cb callback
  *               function.
- * @pre          None
+ * @code
+ *               refer to the sample code of trackrenderer_flush()
+ * @endcode
+ * @pre          The trackrenderer must be at least created
  * @post         When flush done, app will handle the trackrenderer_flushdone_cb
  *               to decide next operation.
  * @exception    None
- * @version        2.0
+ * @version      2.0
  * @remark       trackrenderer_flushdone_cb \n
  *               [in] userdata : userdata of trackrenderer_flushdone_cb callback
  *               function.
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_flushdone_cb
  */
 void trackrenderer_set_flushdone_cb(TrackRendererHandle handle,
                                     trackrenderer_flushdone_cb callback,
                                     void* userdata);
-
 /**
- * @brief        Set resolution change event callback function
- * @description  In this function set resolution change event callback to
- *               handle the event. If there is resolution change event,
- *               trackrenderer_event_cb will be called to notify resolution is
- changed.
- *               The resolution info will be shared.
+ * @brief        Set event callback function
+ * @description  In this function set event callback to get event information.
+ *               If a specific event occurs, trackrenderer_event_cb will be
+ *               called to notify it with event information.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] callback : trackrenderer_event_cb ptr.
- * @param        [in] userdata : userdata of trackrenderer_event_cb callback
- function.
- * @pre          None
- * @post         When resolution is changed, call trackrenderer_event_cb to
- notice that
- *               resolution has been changed.
+ * @param        [in] userdata : userdata of trackrenderer_event_cb
+ *               callback function.
+ * @code
+ *               static void OnEventCb(const TrackRendererEventType event_type,
+ *                   const TrackrendererEventMsg msg_data,UserData userdata) {
+ *                   //Something you want to do when the event occurs
+ *               }
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_event_cb(handle,OnEventCb, nullptr);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
+ * @pre          The trackrenderer must be at least created
+ * @post         App can get the information of the event that occured.
  * @version      2.0
  * @exception    None
  * @remark       trackrenderer_event_cb
                [in] event_type : Resolution change event type.
                [in] msg_data : Resolution info.
                [in] userdata : userdata of trackrenderer_event_cb callback
*               [in] event_type : event type that occured.
*               [in] msg_data : event message data.
*               [in] userdata : userdata of trackrenderer_event_cb callback
  *               function.
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_event_cb
  */
 void trackrenderer_set_event_cb(TrackRendererHandle handle,
                                 trackrenderer_event_cb callback,
                                 void* userdata);
 /**
  * @brief        Set subtitle callback function
- * @description  In this function set subtitle callback to handle the
- *               subtitle. If there is subtitle to display
- * trackrenderer_subtitle_rawdata_cb will be called to notify there is subtitle
- * to display. The subtitle whole raw data will be shared. If user get this
- * callback and want to display the subtitle, user should get subtitle
- * informations from shared raw data.
+ * @description  In this function set subtitle callback to handle the subtitle.
+ *               If there is subtitle to display trackrenderer_subtitle_rawdata_cb
+ *               will be called to notify there is subtitle to display.
+ *               The subtitle whole raw data will be shared. If user get this
+ *               callback and want to display the subtitle, user should get
+ *               subtitle informations from shared raw data.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] callback : trackrenderer_subtitle_rawdata_cb ptr.
  * @param        [in] userdata : userdata of
  *               trackrenderer_subtitle_rawdata_cb callback function.
- * @pre          None
+ * @code
+ *               static void SubtitleRawDataCb(TrackRendererDecoderInputBuffer* buf,
+ *                   const TrackRendererSubtitleType type,
+ *                   UserData userdata) {
+ *                   //Something you want to do when there is subtitle data
+ *               }
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_subtitle_rawdata_cb(handle,SubtitleRawDataCb,nullptr);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
+ * @pre          The trackrenderer must be at least created
  * @post         When there is subtitledata, call
  *               trackrenderer_subtitle_rawdata_cb to notice that there is
  *               subtitle needed to be displayed.
@@ -1328,6 +1745,8 @@ void trackrenderer_set_event_cb(TrackRendererHandle handle,
  *               [in] type : subtitle type (text or picture) \n
  *               [in] userdata : userdata of
  *               trackrenderer_subtitle_rawdata_cb callback function.
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_subtitle_rawdata_cb
  */
 void trackrenderer_set_subtitle_rawdata_cb(
     TrackRendererHandle handle, trackrenderer_subtitle_rawdata_cb callback,
@@ -1339,16 +1758,29 @@ void trackrenderer_set_subtitle_rawdata_cb(
  * @description  (deprecated) In this function set subtitle callback to handle
  *               the subtitle. If there is subtitle to display
  *               trackrenderer_subtitledata_cb will be called to notify there
- * is subtitle to display. If user get this callback and want to display the
- * subtitle, user can use the shared subtitle informations.
+ *               is subtitle to display. If user get this callback and want to display the
+ *               subtitle, user can use the shared subtitle informations.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] callback : trackrenderer_subtitledata_cb ptr.
  * @param        [in] userdata : userdata of trackrenderer_subtitledata_cb
  *               callback function.
- * @pre          None
+ * @code
+ *               static void SubtitleDataCb(const char* data, const int size,
+ *                   const TrackRendererSubtitleType type,
+ *                   const unsigned long long duration,
+ *                   TrackRendererSubtitleAttr* attr_list,
+ *                   int attr_list_size, UserData userdata) {
+ *                   //Something you want to do when  there is subtitle data
+ *               }
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_subtitledata_cb(handle,SubtitleDataCb,nullptr);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
+ * @pre          The trackrenderer must be at least created
  * @post         When there is subtitledata, call
- * trackrenderer_subtitledata_cb to notice that there is subtitle needed to be
- * displayed.
+ *               trackrenderer_subtitledata_cb to notice that there is subtitle needed to be
+ *               displayed.
  * @exception    None
  * @remark       trackrenderer_subtitledata_cb \n
  *               [in] data : subtitle data \n
@@ -1356,9 +1788,11 @@ void trackrenderer_set_subtitle_rawdata_cb(
  *               [in] type : subtitle type (text or picture) \n
  *               [in] duration : subtitle duration (ms) \n
  *               [in] attr_list : list of subtitle attribute \n
- *               [in] attr_list_size : length of subtitle attribute \n
+ *               [in] attr_list_size : length of subtite attribute \n
  *               [in] userdata : userdata of trackrenderer_subtitledata_cb
  *               callback function.
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_subtitledata_cb
  */
 void trackrenderer_set_subtitledata_cb(TrackRendererHandle handle,
                                        trackrenderer_subtitledata_cb callback,
@@ -1368,19 +1802,31 @@ void trackrenderer_set_subtitledata_cb(TrackRendererHandle handle,
 /**
  * @brief        Set EOS callback function
  * @description  In this function set EOS callback to handle EOS. If the
- * playing contents meet EOS, trackrenderer_eos_cb will be called to notify
- * the contents end.
+ *               playing contents meet EOS, trackrenderer_eos_cb will be called 
+ *               to notify the contents end.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] callback : trackrenderer_eos_cb ptr.
  * @param        [in] userdata : userdata of trackrenderer_eos_cb callback
  *               function.
- * @pre          None
- * @post         When contents meet  EOS, the trackrenderer_eos_cb will be
+ * @code
+ *               static void EosCb(UserData userdata) {
+ *                   //Something you want to do when contents meet EOS
+ *                   printf("EOS received\n");
+ *               }
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_eos_cb(handle,EosCb,nullptr);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
+ * @pre          The trackrenderer must be at least created
+ * @post         When contents meet EOS, the trackrenderer_eos_cb will be
  *               called
  * @exception    None
  * @remark       trackrenderer_eos_cb \n
  *               [in] userdata : userdata of trackrenderer_eos_cb callback
  *               function.
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_eos_cb
  */
 void trackrenderer_set_eos_cb(TrackRendererHandle handle,
                               trackrenderer_eos_cb callback, void* userdata);
@@ -1395,9 +1841,20 @@ void trackrenderer_set_eos_cb(TrackRendererHandle handle,
  * @param        [in] callback : trackrenderer_closedcaption_cb ptr.
  * @param        [in] userdata : userdata of trackrenderer_closedcaption_cb
  *               callback function.
- * @pre          None
+ * @code
+ *               static void ClosedCaptionDataCb(const char* data,
+ *                   const int size, UserData userdata) {
+ *                   //Something you want to do when there is closed
+ *                   caption needed to be displayed
+ *               }
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_closedcaption_cb(handle,ClosedCaptionDataCb,nullptr);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
+ * @pre          The trackrenderer must be at least created
  * @post         When there is closed caption data, call
- *               trackrenderer_closedcaption_cb to notify that there is closed
+ *               trackrenderer_closedcaption_cb to nofity that there is closed
  *               caption needed to be displayed.
  * @exception    None
  * @remark       trackrenderer_closedcaption_cb \n
@@ -1405,6 +1862,8 @@ void trackrenderer_set_eos_cb(TrackRendererHandle handle,
  *               [in] size : length of closedcaption data \n
  *               [in] userdata : userdata of trackrenderer_closedcaption_cb
  *               callback function.
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_closedcaption_cb
  */
 void trackrenderer_set_closedcaption_cb(TrackRendererHandle handle,
                                         trackrenderer_closedcaption_cb callback,
@@ -1414,16 +1873,28 @@ void trackrenderer_set_closedcaption_cb(TrackRendererHandle handle,
  * @brief        Set drm initialize data callback function.
  * @description  In this function set drm initialize data callback. If
  *               trackrenderer detected any informations which need to
- * initiate drm, the trackrenderer_drminitdata_cb is called to share the drm
- * informations for decryption.
+ *               initiate drm, the trackrenderer_drminitdata_cb is called to
+ *               share the drm informations for dectyption.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] callback : trackrenderer_drminitdata_cb ptr.
  * @param        [in] userdata : userdata of trackrenderer_drminitdata_cb
  *               callback function.
- * @pre          None
+ * @code
+ *               static void DrmInitDataCb(int* drmhandle,unsigned int len,
+ *                   unsigned char* psshdata, TrackRendererTrackType type,
+ *                   UserData userdata) {
+ *                   //Something you want to do when detect any drm data
+ *                   printf("drm data received\n");
+ *               }
+ *               trackrenderer_create(&handle);
+ *               trackrenderer_set_drminitdata_cb(handle,DrmInitDataCb,nullptr);
+ *               //your logic
+ *               trackrenderer_destroy(handle);
+ * @endcode
+ * @pre          The trackrenderer must be at least created
  * @post         When the trackrenderer detect any drm data, call
  *               trackrenderer_drminitdata_cb function to share the init data.
- * @exception    None
+ * @exception    The trackrenderer must be at least created
  * @remark       trackrenderer_drminitdata_cb \n
  *               [in] drmhandle : drm handle \n
  *               [in] len : pssh data length \n
@@ -1431,6 +1902,8 @@ void trackrenderer_set_closedcaption_cb(TrackRendererHandle handle,
  *               [in] type : track type \n
  *               [in] userdata : userdata of trackrenderer_drminitdata_cb
  *               callback function.
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_set_drminitdata_cb
  */
 void trackrenderer_set_drminitdata_cb(TrackRendererHandle handle,
                                       trackrenderer_drminitdata_cb callback,
@@ -1440,19 +1913,24 @@ void trackrenderer_set_drminitdata_cb(TrackRendererHandle handle,
  * @brief        Set current buffer status call back function
  * @description  In this function set buffer status callback function. If
  *               trackrenderer detected that there is not enough data or full
- * at trackrenderer buffer, call trackrenderer_bufferstatus_cb to let user
- * know what current buffer status is.
+ *               at trackrenderer buffer, call trackrenderer_bufferstatus_cb
+ *               to let user know what current buffer status is.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] callback : trackrenderer_bufferstatus_cb ptr.
  * @param        [in] userdata : userdata of trackrenderer_bufferstatus_cb
  *               callback function.
- * @pre          None
+ * @code
+ *               refer to the sample code of trackrenderer_submit_packet()
+ * @endcode
+ * @pre          The trackrenderer must be at least created
  * @post         When trackrenderer buffer status has changed to not enough or
  *               full, call trackrenderer_bufferstatus_cb()
  * @exception    None
  * @remark       trackrenderer_bufferstatus_cb \n
  *               [in] type : track type \n
  *               [in] status : trackrenderer buffer status \n
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_bufferstatus_cb
  */
 void trackrenderer_set_bufferstatus_cb(TrackRendererHandle handle,
                                        trackrenderer_bufferstatus_cb callback,
@@ -1462,20 +1940,25 @@ void trackrenderer_set_bufferstatus_cb(TrackRendererHandle handle,
  * @brief        Set seek data callback function
  * @description  In this function set seek data callback function. After
  *               flushing currently buffered data and trackrenderer is ready
- * to get new seeked position segment data, the trackrenderer_seekdata_cb is
- * called. If get this callback, user can know the time to push new segment
- * data.
+ *               to get new seeked position segment data, the
+ *               trackrenderer_seekdata_cb is called. If get this callback,
+ *               user can know the time to push new segment data.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] callback : trackrenderer_seekdata_cb ptr.
  * @param        [in] userdata : userdata of trackrenderer_seekdata_cb
- * callback function.
- * @pre          None
+ *               callback function.
+ * @code
+ *               please refer to the sample code of trackrenderer_seek()
+ * @endcode
+ * @pre          The trackrenderer must be at least created
  * @post         When trackrenderer finish to flush the buffered data for seek
  *               operation, call trackrenderer_seekdata_cb .
  * @exception    None
  * @remark       trackrenderer_seekdata_cb \n
  *               [in] type : track type \n
  *               [in] offset : the new seeked position \n
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_seekdata_cb
  */
 void trackrenderer_set_seekdata_cb(TrackRendererHandle handle,
                                    trackrenderer_seekdata_cb callback,
@@ -1488,16 +1971,18 @@ void trackrenderer_set_seekdata_cb(TrackRendererHandle handle,
  *               callback.
  * @param        [in] handle : trackrenderer handle ptr.
  * @param        [in] media_packet_video_decoded_cb :
- * trackrenderer_media_packet_video_decoded_cb ptr.
+ *               trackrenderer_media_packet_video_decoded_cb ptr.
  * @param        [in] userdata : userdata of media_packet_video_decoded_cb
  *               callback function.
- * @pre          None
- * @version        2.0
+ * @pre          The trackrenderer must be at least created
+ * @version      2.0
  * @post         When trackrenderer decoded video buffer, call
- * trackrenderer_media_packet_video_decoded_cb .
+ *               trackrenderer_media_packet_video_decoded_cb .
  * @exception    None
  * @remark       trackrenderer_media_packet_video_decoded_cb \n
  *               [in] packet : packet including decoded buffer  \n
+ * @see          trackrenderer_create() \n
+ *               trackrenderer_media_packet_video_decoded_cb
  */
 void trackrenderer_set_media_packet_video_decoded_cb(
     TrackRendererHandle handle,