Adds APIs for setting modes. It serves to select mode for recording what user want.
Mode means how to stream recorder works.
[apis]
streamrecorder_set_mode(streamrecorder_h recorder, streamrecorder_mode_e mode);
streamrecorder_get_mode(streamrecorder_h recorder, streamrecorder_mode_e* mode);
[modes]
Add stream recording modes.
- STREAMRECORDER_MODE_STREAM_BUFFER
- STREAMRECORDER_MODE_DEVICE_LOOPBACK
*STREAMRECORDER_MODE_STREAM_BUFFER
: Uses Stream Recorder same as current.
*STREAMRECORDER_MODE_DEVICE_LOOPBACK
: For using it only device's own screen (display) and audio, please use this mode.
Change-Id: Ibbe4356589769659e5091c1b57945ead837a5d22
Signed-off-by: Hyunsoo Park <hance.park@samsung.com>
typedef enum {
STREAMRECORDER_SOURCE_VIDEO, /**< Video only */
STREAMRECORDER_SOURCE_AUDIO, /**< Audio only */
- STREAMRECORDER_SOURCE_VIDEO_AUDIO, /**< Video and Audio */
+ STREAMRECORDER_SOURCE_VIDEO_AUDIO, /**< Video and Audio */
} streamrecorder_source_e;
/**
STREAMRECORDER_VIDEO_SOURCE_FORMAT_NV12, /**< NV12 pixel format */
STREAMRECORDER_VIDEO_SOURCE_FORMAT_NV21, /**< NV21 pixel format */
STREAMRECORDER_VIDEO_SOURCE_FORMAT_I420, /**< I420 pixel format */
- STREAMRECORDER_VIDEO_SOURCE_FORMAT_NUM /**< Number of the video source format */
+ STREAMRECORDER_VIDEO_SOURCE_FORMAT_NUM /**< @deprecated Number of the video source format (Deprecated since 6.0, please don't use it) */
} streamrecorder_video_source_format_e;
/**
} streamrecorder_state_e;
/**
+ * @brief Enumeration for StreamRecorder recoding modes.
+ * @since_tizen 6.0
+ */
+typedef enum {
+ STREAMRECORDER_MODE_STREAM_BUFFER = 0, /**< Recording with media buffer */
+ STREAMRECORDER_MODE_DEVICE_LOOPBACK /**< Recording with device's own screen and audio */
+} streamrecorder_mode_e;
+
+/**
* @}
*/
int streamrecorder_get_audio_channel(streamrecorder_h recorder, int *channel_count);
/**
+ * @brief Sets the recording mode.
+ * @since_tizen 6.0
+ * @remarks This attribute can be set only in the #STREAMRECORDER_STATE_CREATED state. \n
+ * To record with media buffer, set the mode to #STREAMRECORDER_MODE_STREAM_BUFFER. \n
+ * To record with the device's own screen (display) and audio, set the mode to #STREAMRECORDER_MODE_DEVICE_LOOPBACK.
+ * @param[in] recorder The handle to the streamrecorder
+ * @param[in] mode The recording mode
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #STREAMRECORDER_ERROR_NONE Successful
+ * @retval #STREAMRECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #STREAMRECORDER_ERROR_INVALID_STATE Invalid state
+ * @pre The streamrecorder state must be #STREAMRECORDER_STATE_CREATED.\n
+ * @see streamrecorder_get_mode()
+ */
+int streamrecorder_set_mode(streamrecorder_h recorder, streamrecorder_mode_e mode);
+
+/**
+ * @brief Gets the recording mode.
+ * @since_tizen 6.0
+ * @remarks #STREAMRECORDER_MODE_STREAM_BUFFER indicates recording with media buffer. \n
+ * #STREAMRECORDER_MODE_DEVICE_LOOPBACK indicates recording the device's own screen (display) and audio.
+ * @param[in] recorder The handle to the streamrecorder
+ * @param[out] mode The recording mode
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #STREAMRECORDER_ERROR_NONE Successful
+ * @retval #STREAMRECORDER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #STREAMRECORDER_ERROR_INVALID_STATE Invalid state
+ * @pre The streamrecorder state must be #STREAMRECORDER_STATE_CREATED.\n
+ * @see streamrecorder_set_mode()
+ */
+int streamrecorder_get_mode(streamrecorder_h recorder, streamrecorder_mode_e *mode);
+
+/**
* @}
*/
int _streamrecorder_foreach_supported_video_encoder(streamrecorder_h recorder, streamrecorder_supported_video_encoder_cb foreach_cb, void *user_data);
int _streamrecorder_set_audio_channel(streamrecorder_h recorder, int channel_count);
int _streamrecorder_get_audio_channel(streamrecorder_h recorder, int *channel_count);
+int _streamrecorder_set_mode(streamrecorder_h recorder, streamrecorder_mode_e mode);
+int _streamrecorder_get_mode(streamrecorder_h recorder, streamrecorder_mode_e *mode);
#ifdef __cplusplus
}
#endif
Name: capi-media-streamrecorder
Summary: A Streamrecorder library in Tizen Native API
-Version: 0.0.25
+Version: 0.0.26
Release: 0
Group: Multimedia/Other
License: Apache-2.0
video_buf->height[0] = height;
media_packet_get_video_stride_width(packet, 0, &video_buf->stride_width[0]);
media_packet_get_video_stride_width(packet, 0, &video_buf->stride_height[0]);
- video_buf->size[0] = width*height*3/2;
+ video_buf->size[0] = width*height*3/2; // 1392640
for (i = 0; i < MAX_MPACKET_DATA; i++) {
if (pkt->packet[i] == NULL) {
}
ret = mm_streamrecorder_push_stream_buffer(handle->mm_handle, MM_STREAM_TYPE_VIDEO, pts, video_buf, video_buf->size[0]);
- } else if (mimetype == MEDIA_FORMAT_I420) {
+ } else if (mimetype == MEDIA_FORMAT_I420 || mimetype == MEDIA_FORMAT_BGRA) {
void *buf_data = NULL;
-
+ LOGI("mimetype: [%d]", mimetype);
ret = media_packet_get_video_plane_data_ptr(packet, 0, (void **)&buf_data);
if (ret != MEDIA_PACKET_ERROR_NONE) {
LOGW("buffer size get fail");
int streamrecorder_get_audio_channel(streamrecorder_h recorder, int *channel_count)
{
+ if (recorder == NULL) {
+ LOGE("NULL pointer handle");
+ return STREAMRECORDER_ERROR_INVALID_PARAMETER;
+ }
+
+ return _streamrecorder_get_audio_channel(recorder, channel_count);
+}
+
+int streamrecorder_set_mode(streamrecorder_h recorder, streamrecorder_mode_e mode)
+{
+ if (recorder == NULL) {
+ LOGE("NULL pointer handle");
+ return STREAMRECORDER_ERROR_INVALID_PARAMETER;
+ }
+
+ return _streamrecorder_set_mode(recorder, mode);
+}
+
+int streamrecorder_get_mode(streamrecorder_h recorder, streamrecorder_mode_e *mode)
+{
int ret = STREAMRECORDER_ERROR_NONE;
if (recorder == NULL) {
LOGE("NULL pointer handle");
return STREAMRECORDER_ERROR_INVALID_PARAMETER;
}
+ ret = _streamrecorder_get_mode(recorder, mode);
- ret = _streamrecorder_get_audio_channel(recorder, channel_count);
return ret;
-
}
static int __mm_streamrecorder_msg_cb(int message, void *param, void *user_data)
#include <fcntl.h>
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "TIZEN_N_STREAMRECORDER"
+
int __convert_streamrecorder_error_code(const char *func, int code)
{
streamrecorder_s *handle = (streamrecorder_s *)recorder;
mm_streamrecorder_set_attributes(handle->mm_handle, NULL,
- MMSTR_RECORDER_MODE, MM_STREAMRECORDER_MODE_MEDIABUFFER,
+ MMSTR_RECORDER_MODE, MM_STREAMRECORDER_MODE_STREAM_BUFFER,
NULL);
mm_streamrecorder_set_attributes(handle->mm_handle, NULL,
- MMSTR_VIDEO_ENABLE, true,
+ MMSTR_VIDEO_ENABLE, TRUE,
NULL);
streamrecorder_s *handle;
handle = (streamrecorder_s *) recorder;
mm_streamrecorder_set_attributes(handle->mm_handle, NULL,
- MMSTR_RECORDER_MODE, MM_STREAMRECORDER_MODE_MEDIABUFFER,
+ MMSTR_RECORDER_MODE, MM_STREAMRECORDER_MODE_STREAM_BUFFER,
NULL);
mm_streamrecorder_set_attributes(handle->mm_handle, NULL,
- MMSTR_AUDIO_ENABLE, true,
+ MMSTR_AUDIO_ENABLE, TRUE,
NULL);
return ret;
return __convert_streamrecorder_error_code(__func__, ret);
}
+
+int _streamrecorder_set_mode(streamrecorder_h recorder , streamrecorder_mode_e mode)
+{
+ int ret = MM_ERROR_NONE;
+ streamrecorder_s *handle = (streamrecorder_s *)recorder;
+
+ if (mode > STREAMRECORDER_MODE_DEVICE_LOOPBACK) {
+ LOGE("invalid mode %d", mode);
+ return STREAMRECORDER_ERROR_INVALID_PARAMETER;
+ }
+
+ ret = mm_streamrecorder_set_attributes(handle->mm_handle, NULL,
+ MMSTR_RECORDER_MODE, mode,
+ NULL);
+ return __convert_streamrecorder_error_code(__func__, ret);
+}
+
+int _streamrecorder_get_mode(streamrecorder_h recorder, streamrecorder_mode_e *mode)
+{
+ int ret = MM_ERROR_NONE;
+ int mm_mode = 0;
+ streamrecorder_s *handle = (streamrecorder_s *)recorder;
+
+ if (mode == NULL) {
+ LOGE("mode is NULL");
+ return STREAMRECORDER_ERROR_INVALID_PARAMETER;
+ }
+
+ ret = mm_streamrecorder_get_attributes(handle->mm_handle, NULL,
+ MMSTR_RECORDER_MODE, &mm_mode,
+ NULL);
+ if (ret == MM_ERROR_NONE) {
+ switch (mm_mode) {
+ case MM_STREAMRECORDER_MODE_STREAM_BUFFER:
+ *mode = STREAMRECORDER_MODE_STREAM_BUFFER;
+ break;
+ case MM_STREAMRECORDER_MODE_DEVICE_LOOPBACK:
+ *mode = STREAMRECORDER_MODE_DEVICE_LOOPBACK;
+ break;
+ default:
+ ret = MM_ERROR_STREAMRECORDER_INTERNAL;
+ break;
+ }
+ }
+ return __convert_streamrecorder_error_code(__func__, ret);
+}
\ No newline at end of file