Add API - espp_client_set_display_visible()
authorSangchul Lee <sc11.lee@samsung.com>
Fri, 12 May 2023 08:04:12 +0000 (17:04 +0900)
committer이상철/Tizen Platform Lab(SR)/삼성전자 <sc11.lee@samsung.com>
Fri, 12 May 2023 09:31:43 +0000 (18:31 +0900)
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
src/client/espp_service_client.c
src/client/espp_service_client.h
src/client/espp_service_client_priv.h
src/client/espp_service_client_socket.c
src/common/espp_service_ipc.c
src/common/espp_service_ipc.h
src/daemon/espp_service_handler.c

index 18496b5606481639d96db244310b010177e3c2b2..9b7ca431944b71000413474855c29bfcb36329be 100644 (file)
@@ -466,6 +466,23 @@ int espp_client_set_display_roi(espp_h espp, int x, int y, int w, int h)
        return ESPP_CLIENT_ERROR_NONE;
 }
 
+int espp_client_set_display_visible(espp_h espp, bool visible)
+{
+       espp_s *_espp = (espp_s *)espp;
+       g_autoptr(GMutexLocker) locker = NULL;
+
+       RET_VAL_IF(!espp, ESPP_CLIENT_ERROR_INVALID_PARAMETER, "espp is NULL");
+
+       locker = g_mutex_locker_new(&_espp->mutex);
+
+       if (espp_service_client_socket_request_set_display_visible(_espp, visible) != 0)
+               return ESPP_CLIENT_ERROR_INVALID_OPERATION;
+
+       LOG_INFO("espp[%p] visible[%d]", espp, visible);
+
+       return ESPP_CLIENT_ERROR_NONE;
+}
+
 int espp_client_set_audio_mute(espp_h espp, bool mute)
 {
        espp_s *_espp = (espp_s *)espp;
index 45c033d7cfdeacef97575cec5d76748aa6e51d78..3ba70a4fcfcff2bf075a3e981a7fdb658792e247 100644 (file)
@@ -533,6 +533,7 @@ int espp_client_set_video_stream_info(espp_h espp, espp_video_stream_info_s *inf
  * @retval #ESPP_CLIENT_ERROR_INVALID_OPERATION Invalid operation
  * @see espp_client_set_display_mode()
  * @see espp_client_set_display_roi()
+ * @see espp_client_set_display_visible()
  */
 int espp_client_set_display_surface_id(espp_h espp, espp_display_type_e type, unsigned int surface_id, int x, int y, int w, int h);
 
@@ -570,6 +571,19 @@ int espp_client_set_display_mode(espp_h espp, espp_display_mode_e mode);
  */
 int espp_client_set_display_roi(espp_h espp, int x, int y, int w, int h);
 
+/**
+ * @brief Sets the video display visibility.
+ * @param[in] espp       ESPP service client handle
+ * @param[in] visible    The visibility of the display (@c true = visible, @c false = invisible)
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #ESPP_CLIENT_ERROR_NONE Successful
+ * @retval #ESPP_CLIENT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #ESPP_CLIENT_ERROR_INVALID_OPERATION Invalid operation
+ * @see espp_client_set_display_surface_id()
+ */
+int espp_client_set_display_visible(espp_h espp, bool visible);
+
 /**
  * @brief Sets mute of the audio stream.
  * @param[in] espp    ESPP service client handle
index 473aee2085799ef28553d81427a6da4a85a7bd02..0fc13aa21e51d40523d53fdc56f880172d27a0a6 100644 (file)
@@ -85,6 +85,7 @@ int espp_service_client_socket_request_set_video_stream_info(espp_s *espp, espp_
 int espp_service_client_socket_request_set_display_surface_id(espp_s *espp, espp_display_type_e type, unsigned int surface_id, int x, int y, int w, int h);
 int espp_service_client_socket_request_set_display_mode(espp_s *espp, espp_display_mode_e mode);
 int espp_service_client_socket_request_set_display_roi(espp_s *espp, int x, int y, int w, int h);
+int espp_service_client_socket_request_set_display_visible(espp_s *espp, bool visible);
 int espp_service_client_socket_request_set_audio_mute(espp_s *espp, bool mute);
 int espp_service_client_socket_request_set_callback(espp_s *espp, espp_service_event_e type, void *callback, void *user_data);
 int espp_service_client_socket_request_submit_packet(espp_s *espp, espp_packet_s *packet, espp_submit_error_e *error);
index ec6aefbfbaa33195f59ee4f36f2b43c0150b271e..5eaedd1c4ec23bb07e1e80b0f8a0a0f2c96823b6 100644 (file)
@@ -608,6 +608,26 @@ int espp_service_client_socket_request_set_display_roi(espp_s *espp, int x, int
        return 0;
 }
 
+int espp_service_client_socket_request_set_display_visible(espp_s *espp, bool visible)
+{
+       espp_service_data_from_client_s data;
+       espp_service_data_from_server_s result;
+
+       ASSERT(espp);
+       RET_VAL_IF(espp->fd == -1, -1, "fd is -1");
+
+       FILL_SOCKET_MSG_REQUEST(data, ESPP_SERVICE_REQUEST_SET_DISPLAY_VISIBLE);
+       FILL_SOCKET_MSG_PARAMS(data, ESPP_SERVICE_REQUEST_SET_DISPLAY_VISIBLE, "visible", visible);
+       if (send_data(espp->fd, &data, &result) != 0)
+               return -1;
+
+       RET_VAL_IF_SERVER_RESULT_ERROR(result, -1);
+
+       LOG_DEBUG("espp[%p], fd[%d]", espp, espp->fd);
+
+       return 0;
+}
+
 int espp_service_client_socket_request_set_audio_mute(espp_s *espp, bool mute)
 {
        espp_service_data_from_client_s data;
index 8be34fae1720f8138446191f1a7dcf2172231651..928f69b553f44d2623feb272868499a5b14e7aa5 100644 (file)
@@ -35,6 +35,7 @@ espp_service_ipc_data_s requests[] = {
        [ESPP_SERVICE_REQUEST_SET_DISPLAY_SURFACE_ID] = { "SetDisplaySurfaceId", "iuiiii" },
        [ESPP_SERVICE_REQUEST_SET_DISPLAY_MODE] = { "SetDisplayMode", "i" },
        [ESPP_SERVICE_REQUEST_SET_DISPLAY_ROI] = { "SetDisplayRoi", "iiii" },
+       [ESPP_SERVICE_REQUEST_SET_DISPLAY_VISIBLE] = { "SetDisplayVisible", "b" },
        [ESPP_SERVICE_REQUEST_SET_AUDIO_MUTE] = { "SetAudioMute", "b" },
        [ESPP_SERVICE_REQUEST_SUBMIT_PACKET] = { "SubmitPacket", "iukku" },
        [ESPP_SERVICE_REQUEST_SET_CALLBACK] = { "SetCallback", "i" },
index 37ec40e5b8fc671efca2b0868bc6d76f5f64b559..315d258417b56b8843d963f56aaaa671567f18f6 100644 (file)
@@ -44,6 +44,7 @@ typedef enum {
        ESPP_SERVICE_REQUEST_SET_DISPLAY_SURFACE_ID,
        ESPP_SERVICE_REQUEST_SET_DISPLAY_MODE,
        ESPP_SERVICE_REQUEST_SET_DISPLAY_ROI,
+       ESPP_SERVICE_REQUEST_SET_DISPLAY_VISIBLE,
        ESPP_SERVICE_REQUEST_SET_AUDIO_MUTE,
        ESPP_SERVICE_REQUEST_SUBMIT_PACKET,
        ESPP_SERVICE_REQUEST_SET_CALLBACK,
index 56554178974218fb56b0f23e02ca863e075ee3c4..0600a4872f75da26f3f17473f440d162badeef57 100644 (file)
@@ -472,6 +472,34 @@ static void __handle_set_display_roi(handler_userdata_s *hdata, espp_service_dat
        result->ret = 0;
 }
 
+static void __handle_set_display_visible(handler_userdata_s *hdata, espp_service_data_from_client_s *data, espp_service_data_from_server_s *result)
+{
+       int ret;
+       bool visible;
+
+       ASSERT(hdata);
+       ASSERT(data);
+       ASSERT(result);
+       ASSERT(hdata->svc);
+       ASSERT(hdata->fd >= 0);
+
+       result->ret = -1;
+
+       RET_IF(!g_hash_table_lookup(hdata->svc->fd_table, hdata->key), "failed to g_hash_table_lookup(), key[%s]", hdata->key);
+
+       ret = espp_service_msg_parse_params(data->params, data->request, &visible);
+       if (ret != 0)
+               return;
+
+       ret = esplusplayer_set_display_visible((esplusplayer_handle)hdata->espp, visible);
+       RET_IF(ret != ESPLUSPLAYER_ERROR_TYPE_NONE, "failed to esplusplayer_set_display_visible(), ESPP[%p], visible[%d]",
+               hdata->espp, visible);
+
+       LOG_INFO("fd[%d], ESPP[%p]: esplusplayer_set_display_visible() success, visible[%d]", hdata->fd, hdata->espp, visible);
+
+       result->ret = 0;
+}
+
 static void __handle_set_audio_mute(handler_userdata_s *hdata, espp_service_data_from_client_s *data, espp_service_data_from_server_s *result)
 {
        int ret;
@@ -717,6 +745,7 @@ static func_handler handlers[] = {
        [ESPP_SERVICE_REQUEST_SET_DISPLAY_SURFACE_ID] = __handle_set_display_surface_id,
        [ESPP_SERVICE_REQUEST_SET_DISPLAY_MODE] = __handle_set_display_mode,
        [ESPP_SERVICE_REQUEST_SET_DISPLAY_ROI] = __handle_set_display_roi,
+       [ESPP_SERVICE_REQUEST_SET_DISPLAY_VISIBLE] = __handle_set_display_visible,
        [ESPP_SERVICE_REQUEST_SET_AUDIO_MUTE] = __handle_set_audio_mute,
        [ESPP_SERVICE_REQUEST_SUBMIT_PACKET] = __handle_submit_packet,
        [ESPP_SERVICE_REQUEST_SET_CALLBACK] = __handle_set_callback,