[ITC][recorder][ACR-1589][Added new APIs to decide video frame encoding] 98/241998/5
authorPriya Kohli <priya.kohli@samsung.com>
Fri, 21 Aug 2020 08:56:16 +0000 (14:26 +0530)
committershobhit verma <shobhit.v@samsung.com>
Thu, 27 Aug 2020 08:18:46 +0000 (08:18 +0000)
Change-Id: Id7d863b8f7b55952cf75f2fa464541c5286a12e2
Signed-off-by: Priya Kohli <priya.kohli@samsung.com>
src/itc/recorder/ITs-recorder.c
src/itc/recorder/tct-recorder-native_mobile.h
src/itc/recorder/tct-recorder-native_tizeniot.h
src/itc/recorder/tct-recorder-native_wearable.h

index 9593090898752e15c12d558245bf43df96036b26..3398eb00a33f5dae6abf95d06c513fbc7f43ec9f 100755 (executable)
@@ -34,6 +34,7 @@ bool g_bRecorderStateChangedCallback;
 bool g_bRecorderSupportedVideoEncoderCallback;
 bool g_bRecorderSupportedVideoResolutionCallback;
 bool g_bStateChange;
+bool g_bVideoEncodeDecisionCallback;
 
 /**
 * @function            ITs_recorder_startup
@@ -324,6 +325,23 @@ static bool RecorderSupportedVideoResolutionCallback(int width, int height, void
        return false;
 }
 
+/**
+* @function            VideoEncodeDecisionCallback
+* @description         Called when each video frame is delivered before encoding
+* @parameter           recorder_video_data_s *frame, void *user_data
+* @return                      NA
+*/
+static bool VideoEncodeDecisionCallback(recorder_video_data_s *frame, void *user_data)
+{
+#if DEBUG
+       FPRINTF("[Line : %d][%s] VideoEncodeDecisionCallback callback is called\\n", __LINE__, API_NAMESPACE);
+#endif
+
+       g_bVideoEncodeDecisionCallback = true;
+
+       return true;
+}
+
 /** @addtogroup itc-recorder-testcases
 *  @brief              Integration testcases for module recorder
 *  @ingroup    itc-recorder
@@ -2252,5 +2270,93 @@ int ITc_recorder_set_unset_muxed_stream_cb_p(void)
        return 0;
 }
 
+//& purpose: Registers and unregisters a callback function to be called when each video frame is delivered before encoding.
+//& type: auto
+/**
+* @testcase                    ITc_recorder_set_unset_video_encode_decision_cb_p
+* @since_tizen                         6.0
+* @author                              SRID(priya.kohli)
+* @reviewer                            SRID(shobhit.v)
+* @type                                auto
+* @scenario                            This test is for checking parameters valid or not. \n
+*                                              1. Check microphone supported or not. \n
+*                                              2. Set video encode decision callback.
+*                                              3. Unset video encode decision callback.
+* @description                 To check set and unset video encode decision callback with valid pointer and parameters.
+* @apicovered                  recorder_set_video_encode_decision_cb, recorder_unset_video_encode_decision_cb
+* @passcase                            If recorder_set_video_encode_decision_cb and recorder_unset_video_encode_decision_cb passes
+* @failcase                    If recorder_set_video_encode_decision_cb, recorder_unset_video_encode_decision_cb fails
+* @precondition                        The recorder state should be RECORDER_STATE_READY or RECORDER_STATE_CREATED
+* @postcondition               NA
+*/
+int ITc_recorder_set_unset_video_encode_decision_cb_p(void)
+{
+       START_TEST;
+       recorder_state_e state;
+
+       if ( CreateVideoRecorder() == false )
+       {
+               return 1;
+       }
+       if ( g_bMismatch )
+       {
+               FPRINTF("[Line : %d][%s] system_info_get_platform_bool and recorder_create_videorecorder returned different feature for Recorder so leaving test\\n", __LINE__, API_NAMESPACE);
+               return 1;
+       }
+       if ( g_bCamFeatureNotSupported || g_bVideoRecFeatureNotSupported )
+       {
+               FPRINTF("[Line : %d][%s][Not supported] system_info_get_platform_bool and recorder_create_videorecorder returned Unsupported feature capability for Recorder\\n", __LINE__, API_NAMESPACE);
+               return 0;
+       }
+
+       if ( g_bAudioRecFeatureNotSupported )
+       {
+               FPRINTF("[Line : %d][%s][Not supported] system_info_get_platform_bool and recorder_create_audiorecorder returned Unsupported feature capability for Recorder\\n", __LINE__, API_NAMESPACE);
+               return 0;
+       }
+
+       if ( ReadyRecorderHandler() != true )
+       {
+               FPRINTF( "[Line : %d][%s] Initialize condition failed\\n", __LINE__, API_NAMESPACE);
+               DestroyRecorderHandler();
+               return 1;
+       }
+
+       g_bVideoEncodeDecisionCallback = false;
+
+       int nRet = recorder_set_video_encode_decision_cb(g_pstRecorder, VideoEncodeDecisionCallback, NULL);
+       PRINT_RESULT_CLEANUP(RECORDER_ERROR_NONE, nRet, "recorder_set_video_encode_decision_cb", RecorderGetError(nRet), recorder_cancel(g_pstRecorder); recorder_unprepare(g_pstRecorder); DestroyRecorderHandler());
+
+       nRet = recorder_start(g_pstRecorder);
+       PRINT_RESULT_CLEANUP(RECORDER_ERROR_NONE, nRet, "recorder_start", RecorderGetError(nRet), recorder_cancel(g_pstRecorder); recorder_unprepare(g_pstRecorder); DestroyRecorderHandler());
+
+       RecorderWaitForAsync();
+
+       if ( !g_bVideoEncodeDecisionCallback )
+       {
+               FPRINTF("[Line : %d][%s] recorder_set_video_encode_decision_cb failed, error returned = callback not invoked\\n", __LINE__, API_NAMESPACE);
+               recorder_cancel(g_pstRecorder);
+               recorder_unprepare(g_pstRecorder);
+               DestroyRecorderHandler();
+               return 1;
+       }
+
+       nRet = recorder_cancel(g_pstRecorder);
+       PRINT_RESULT_CLEANUP(RECORDER_ERROR_NONE, nRet, "recorder_cancel", RecorderGetError(nRet), recorder_unprepare(g_pstRecorder); DestroyRecorderHandler());
+
+       nRet = recorder_unprepare(g_pstRecorder);
+       PRINT_RESULT_CLEANUP(RECORDER_ERROR_NONE, nRet, "recorder_unprepare", RecorderGetError(nRet), DestroyRecorderHandler());
+
+       nRet = recorder_unset_video_encode_decision_cb(g_pstRecorder);
+       PRINT_RESULT_CLEANUP(RECORDER_ERROR_NONE, nRet, "recorder_unset_video_encode_decision_cb", RecorderGetError(nRet), DestroyRecorderHandler());
+
+       if ( DestroyRecorderHandler() == false )
+       {
+               FPRINTF("[Line : %d][%s]DestroyRecorderHandler returns false\\n", __LINE__, API_NAMESPACE);
+       }
+
+       return 0;
+}
+
 /** @} */
 /** @} */
index 8806d59dacca36b098e6efe6e4106bc62ece6eb5..514198b03f9a71708390b14bf418f83bf6f6ae7b 100755 (executable)
@@ -51,6 +51,7 @@ extern int ITc_recorder_set_sound_stream_info_p(void);
 extern int ITc_recorder_get_device_state_p(void);
 extern int ITc_recorder_add_remove_device_state_changed_cb_p(void);
 extern int ITc_recorder_set_unset_muxed_stream_cb_p(void);
+extern int ITc_recorder_set_unset_video_encode_decision_cb_p(void);
 extern int ITc_recorder_attr_set_get_audio_channel_p(void);
 extern int ITc_recorder_attr_set_get_audio_device_p(void);
 extern int ITc_recorder_attr_set_get_audio_encoder_bitrate_p(void);
@@ -90,6 +91,7 @@ testcase tc_array[] = {
        {"ITc_recorder_get_device_state_p",ITc_recorder_get_device_state_p,ITs_recorder_startup,ITs_recorder_cleanup},
        {"ITc_recorder_add_remove_device_state_changed_cb_p",ITc_recorder_add_remove_device_state_changed_cb_p,ITs_recorder_startup,ITs_recorder_cleanup},
        {"ITc_recorder_set_unset_muxed_stream_cb_p",ITc_recorder_set_unset_muxed_stream_cb_p,ITs_recorder_startup,ITs_recorder_cleanup},
+       {"ITc_recorder_set_unset_video_encode_decision_cb_p",ITc_recorder_set_unset_video_encode_decision_cb_p,ITs_recorder_startup,ITs_recorder_cleanup},
        {"ITc_recorder_attr_set_get_audio_channel_p",ITc_recorder_attr_set_get_audio_channel_p,ITs_recorder_attr_startup,ITs_recorder_attr_cleanup},
        {"ITc_recorder_attr_set_get_audio_device_p",ITc_recorder_attr_set_get_audio_device_p,ITs_recorder_attr_startup,ITs_recorder_attr_cleanup},
        {"ITc_recorder_attr_set_get_audio_encoder_bitrate_p",ITc_recorder_attr_set_get_audio_encoder_bitrate_p,ITs_recorder_attr_startup,ITs_recorder_attr_cleanup},
index 8806d59dacca36b098e6efe6e4106bc62ece6eb5..514198b03f9a71708390b14bf418f83bf6f6ae7b 100755 (executable)
@@ -51,6 +51,7 @@ extern int ITc_recorder_set_sound_stream_info_p(void);
 extern int ITc_recorder_get_device_state_p(void);
 extern int ITc_recorder_add_remove_device_state_changed_cb_p(void);
 extern int ITc_recorder_set_unset_muxed_stream_cb_p(void);
+extern int ITc_recorder_set_unset_video_encode_decision_cb_p(void);
 extern int ITc_recorder_attr_set_get_audio_channel_p(void);
 extern int ITc_recorder_attr_set_get_audio_device_p(void);
 extern int ITc_recorder_attr_set_get_audio_encoder_bitrate_p(void);
@@ -90,6 +91,7 @@ testcase tc_array[] = {
        {"ITc_recorder_get_device_state_p",ITc_recorder_get_device_state_p,ITs_recorder_startup,ITs_recorder_cleanup},
        {"ITc_recorder_add_remove_device_state_changed_cb_p",ITc_recorder_add_remove_device_state_changed_cb_p,ITs_recorder_startup,ITs_recorder_cleanup},
        {"ITc_recorder_set_unset_muxed_stream_cb_p",ITc_recorder_set_unset_muxed_stream_cb_p,ITs_recorder_startup,ITs_recorder_cleanup},
+       {"ITc_recorder_set_unset_video_encode_decision_cb_p",ITc_recorder_set_unset_video_encode_decision_cb_p,ITs_recorder_startup,ITs_recorder_cleanup},
        {"ITc_recorder_attr_set_get_audio_channel_p",ITc_recorder_attr_set_get_audio_channel_p,ITs_recorder_attr_startup,ITs_recorder_attr_cleanup},
        {"ITc_recorder_attr_set_get_audio_device_p",ITc_recorder_attr_set_get_audio_device_p,ITs_recorder_attr_startup,ITs_recorder_attr_cleanup},
        {"ITc_recorder_attr_set_get_audio_encoder_bitrate_p",ITc_recorder_attr_set_get_audio_encoder_bitrate_p,ITs_recorder_attr_startup,ITs_recorder_attr_cleanup},
index 8806d59dacca36b098e6efe6e4106bc62ece6eb5..514198b03f9a71708390b14bf418f83bf6f6ae7b 100755 (executable)
@@ -51,6 +51,7 @@ extern int ITc_recorder_set_sound_stream_info_p(void);
 extern int ITc_recorder_get_device_state_p(void);
 extern int ITc_recorder_add_remove_device_state_changed_cb_p(void);
 extern int ITc_recorder_set_unset_muxed_stream_cb_p(void);
+extern int ITc_recorder_set_unset_video_encode_decision_cb_p(void);
 extern int ITc_recorder_attr_set_get_audio_channel_p(void);
 extern int ITc_recorder_attr_set_get_audio_device_p(void);
 extern int ITc_recorder_attr_set_get_audio_encoder_bitrate_p(void);
@@ -90,6 +91,7 @@ testcase tc_array[] = {
        {"ITc_recorder_get_device_state_p",ITc_recorder_get_device_state_p,ITs_recorder_startup,ITs_recorder_cleanup},
        {"ITc_recorder_add_remove_device_state_changed_cb_p",ITc_recorder_add_remove_device_state_changed_cb_p,ITs_recorder_startup,ITs_recorder_cleanup},
        {"ITc_recorder_set_unset_muxed_stream_cb_p",ITc_recorder_set_unset_muxed_stream_cb_p,ITs_recorder_startup,ITs_recorder_cleanup},
+       {"ITc_recorder_set_unset_video_encode_decision_cb_p",ITc_recorder_set_unset_video_encode_decision_cb_p,ITs_recorder_startup,ITs_recorder_cleanup},
        {"ITc_recorder_attr_set_get_audio_channel_p",ITc_recorder_attr_set_get_audio_channel_p,ITs_recorder_attr_startup,ITs_recorder_attr_cleanup},
        {"ITc_recorder_attr_set_get_audio_device_p",ITc_recorder_attr_set_get_audio_device_p,ITs_recorder_attr_startup,ITs_recorder_attr_cleanup},
        {"ITc_recorder_attr_set_get_audio_encoder_bitrate_p",ITc_recorder_attr_set_get_audio_encoder_bitrate_p,ITs_recorder_attr_startup,ITs_recorder_attr_cleanup},