[ACR-1214] Added rotation method for orientation of the rendered video 49/177449/7 accepted/tizen/unified/20180510.134328 submit/tizen/20180510.014849
authorSejun Park <sejun79.park@samsung.com>
Mon, 30 Apr 2018 05:35:10 +0000 (14:35 +0900)
committerSejun Park <sejun79.park@samsung.com>
Wed, 9 May 2018 08:51:40 +0000 (17:51 +0900)
Change-Id: I0dcd8987b0221ec88eaf38d7955d4891b4e4164e

include/media_packet.h
include/media_packet_private.h
src/media_packet.c

index 027ffc008d06ea9c64bc00ecbe7965037a2098d9..60c8e84f9af1e824716d5a0d32549612573b201e 100755 (executable)
@@ -78,6 +78,19 @@ typedef enum _finalize_cb_ret {
        MEDIA_PACKET_FINALIZE,   /**< Destroy packet handle */
 } media_packet_finalize_cb_ret_t;
 
+/**
+ * @brief Enumeration for media packet rotation method.
+ * @since_tizen 5.0
+ */
+typedef enum {
+       MEDIA_PACKET_ROTATE_IDENTITY,         /**< None */
+       MEDIA_PACKET_ROTATE_90,               /**< Rotate 90 degrees */
+       MEDIA_PACKET_ROTATE_180,              /**< Rotate 180 degrees */
+       MEDIA_PACKET_ROTATE_270,              /**< Rotate 270 degrees */
+       MEDIA_PACKET_ROTATE_HORIZONTAL_FLIP,  /**< Flip horizontal */
+       MEDIA_PACKET_ROTATE_VERTICAL_FLIP     /**< Flip vertical */
+} media_packet_rotate_method_e;
+
 /**
  * @brief   Called when the media packet is destroyed.
  * @details It will be invoked when media_packet_destroy() is called.
@@ -87,12 +100,9 @@ typedef enum _finalize_cb_ret {
  * @param[in] packet        The media packet handle
  * @param[in] error_code    The error code of #media_packet_error_e
  * @param[in] user_data  The user data passed from the callback registration function
- *
- * @pre It will be invoked when media packet is destroyed.
- *
  * @retval #MEDIA_PACKET_REUSE     Packet handle is not destroyed, the handle will be reused.
  * @retval #MEDIA_PACKET_FINALIZE  Destroy media packet handle, the handle will not be reused.
- *
+ * @pre It will be invoked when media packet is destroyed.
  * @see media_packet_destroy()
  * @see media_packet_create_alloc()
  * @see media_packet_create()
@@ -104,10 +114,8 @@ typedef int (*media_packet_finalize_cb) (media_packet_h packet, int error_code,
 /**
  * @brief    Creates a media packet handle and allocates buffer.
  * @details  The buffer will be allocated to heap or tbm_surface.
- *
  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- *
- * @remarks The @c packet must be released by using media_packet_destroy().
+ * @remarks The @a packet should be released using media_packet_destroy().
  * @param[in]  fmt       The allocated #media_format_h by caller
  * @param[in]  fcb       The media_packet_finalize_cb() to register
  * @param[in]  fcb_data  The user data to be passed to the media_packet_finalize_cb() function
@@ -747,11 +755,11 @@ int media_packet_get_flags(media_packet_h packet, media_buffer_flags_e * flags);
 int media_packet_set_flags(media_packet_h packet, media_buffer_flags_e flags);
 
 /**
- * @brief Unsets media_buffer_flags_e of media packet
+ * @brief Unsets media_buffer_flags_e of media packet.
  * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
  *
  * @param[in] packet   The media packet handle
- * @param[in] flags    The media_buffer_flags_e of media packet to unset
+ * @param[in] flags    The #media_buffer_flags_e of media packet to unset
  *
  * @return @c 0 on success,
  *         otherwise a negative error value
@@ -919,9 +927,8 @@ int media_packet_get_video_plane_data_ptr(media_packet_h packet, int plane_idx,
 
 /**
  * @brief Gets codec data and the codec data size of media packet.
- *
  * @since_tizen @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif
- *
+ * @remarks The @a codec_data should be released using free().
  * @param[in] packet   The media packet handle
  * @param[out] codec_data    The codec data to get
  * @param[out] codec_data_size    The codec data size to get
@@ -956,6 +963,35 @@ int media_packet_get_codec_data(media_packet_h packet, void **codec_data, unsign
  */
 int media_packet_destroy(media_packet_h packet);
 
+/**
+ * @brief Sets the rotation method.
+ * @since_tizen 5.0
+ *
+ * @param[in] packet   The media packet handle
+ * @param[in] method   The rotation method
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #MEDIA_PACKET_ERROR_NONE              Successful
+ * @retval #MEDIA_PACKET_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_PACKET_ERROR_INVALID_OPERATION Invalid operation
+ */
+int media_packet_set_rotate_method(media_packet_h packet, media_packet_rotate_method_e method);
+
+/**
+ * @brief Gets the rotation method.
+ * @since_tizen 5.0
+ *
+ * @param[in] packet   The media packet handle
+ * @param[out] method  The rotation method
+ *
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #MEDIA_PACKET_ERROR_NONE              Successful
+ * @retval #MEDIA_PACKET_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_PACKET_ERROR_INVALID_OPERATION Invalid operation
+ */
+int media_packet_get_rotate_method(media_packet_h packet, media_packet_rotate_method_e *method);
 /**
  * @}
  */
index 628ce8767a7d445eea196640a1aff9289f21df61..5e701476e4e4967748198109c2383370bdd5c986 100755 (executable)
@@ -134,6 +134,7 @@ typedef struct _media_packet_s {
        media_format_s *format;
        media_buffer_type_e type;
        media_buffer_flags_e flags;
+       media_packet_rotate_method_e method;
 
 } media_packet_s;
 
index 00229e2df9d04ea438f0436e7440c6149bf9204b..6c1676434c4031676c9032e8be01d408fe30500a 100755 (executable)
@@ -248,6 +248,7 @@ int _pkt_alloc_buffer(media_packet_s *pkt)
        pkt->pts = CLOCK_TIME_NONE;
        pkt->dts = CLOCK_TIME_NONE;
        pkt->duration = CLOCK_TIME_NONE;
+       pkt->method = MEDIA_PACKET_ROTATE_IDENTITY;
 
        if (pkt->type == MEDIA_BUFFER_TYPE_NORMAL) {
                /* need to use format,width,height to get buffer size */
@@ -1455,3 +1456,32 @@ void _aligned_free_normal_buffer_type(void *buffer_ptr)
        free(ptr);
        ptr = NULL;
 }
+
+int media_packet_set_rotate_method(media_packet_h packet, media_packet_rotate_method_e method)
+{
+       media_packet_s *handle;
+       int ret = MEDIA_PACKET_ERROR_NONE;
+
+       MEDIA_PACKET_INSTANCE_CHECK(packet);
+
+       handle = (media_packet_s *)packet;
+
+       handle->method = method;
+
+       return ret;
+}
+
+int media_packet_get_rotate_method(media_packet_h packet, media_packet_rotate_method_e *method)
+{
+       media_packet_s *handle;
+       int ret = MEDIA_PACKET_ERROR_NONE;
+
+       MEDIA_PACKET_INSTANCE_CHECK(packet);
+       MEDIA_PACKET_NULL_ARG_CHECK(method);
+
+       handle = (media_packet_s *)packet;
+
+       *method = handle->method;
+
+       return ret;
+}