4 * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Seungbae Shin <seungbae.shin@samsung.com>
8 * This library is free software; you can redistribute it and/or modify it under
9 * the terms of the GNU Lesser General Public License as published by the
10 * Free Software Foundation; either version 2.1 of the License, or (at your option)
13 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
14 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16 * License for more details.
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this library; if not, write to the Free Software Foundation, Inc., 51
20 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 #include <drm_trusted_client.h>
27 gboolean drm_util_open (DRM_DECRYPT_HANDLE *phandle, char* file_path, int file_type)
29 drm_trusted_result_e drm_trusted_result;
30 drm_trusted_open_decrypt_info_s open_decrypt_info;
31 drm_trusted_open_decrypt_resp_data_s open_decrypt_resp;
32 drm_trusted_set_consumption_state_info_s decrypt_state_data = { DRM_CONSUMPTION_STARTED };
34 if (phandle == NULL || file_path == NULL) {
35 GST_ERROR ("Invalid parameter, phandle=%p, file_path=%p", phandle, file_path);
39 /* Fill parameter structure for opening decrypt session */
40 memset (&open_decrypt_info, 0, sizeof (drm_trusted_open_decrypt_info_s));
41 memset (&open_decrypt_resp, 0, sizeof (drm_trusted_open_decrypt_resp_data_s));
43 strncpy (open_decrypt_info.filePath, file_path, sizeof (open_decrypt_info.filePath)-1);
44 open_decrypt_info.file_type = file_type;
45 open_decrypt_info.permission = DRM_TRUSTED_PERMISSION_TYPE_PLAY;
47 /* Open decrypt session */
48 drm_trusted_result = drm_trusted_open_decrypt_session(&open_decrypt_info, &open_decrypt_resp, phandle);
49 if (drm_trusted_result != DRM_TRUSTED_RETURN_SUCCESS || *phandle == NULL) {
50 GST_ERROR ("Error in drm_trusted_open_decrypt_session(), error=%x, *phandle=%p,", drm_trusted_result, *phandle);
53 GST_DEBUG ("drm_trusted_open_decrypt_session () success!!, ret=%x, *phandle=%p", drm_trusted_result, *phandle);
55 /* Set decryption state to STARTED */
56 drm_trusted_result = drm_trusted_set_decrypt_state(*phandle, &decrypt_state_data);
57 if (drm_trusted_result != DRM_TRUSTED_RETURN_SUCCESS) {
58 GST_ERROR ("Error in drm_trusted_set_decrypt_state(), error=%x", drm_trusted_result);
59 drm_trusted_close_decrypt_session (phandle);
63 GST_DEBUG ("drm_trusted_set_decrypt_state () success!!, ret=%x, *phandle=%p", drm_trusted_result, *phandle);
68 gboolean drm_util_read (DRM_DECRYPT_HANDLE handle, unsigned char* buf, unsigned int buf_length, unsigned int *read_size)
70 drm_trusted_result_e drm_trusted_result;
71 drm_trusted_payload_info_s payload_info;
72 drm_trusted_read_decrypt_resp_data_s decrypt_resp;
74 if (handle == NULL || buf == NULL) {
75 GST_ERROR ("Invalid parameter, handle=%p, buf=%p", handle, buf);
79 GST_DEBUG ("Enter [%s] buf=%p, length=%d, read_size=%p", __func__, buf, buf_length, read_size);
81 /* fill input/output data */
82 memset (&payload_info, 0, sizeof (drm_trusted_payload_info_s));
83 memset (&decrypt_resp, 0, sizeof (drm_trusted_read_decrypt_resp_data_s));
85 payload_info.payload_data = buf;
86 payload_info.payload_data_len = buf_length;
87 payload_info.payload_data_output = buf;
89 drm_trusted_result = drm_trusted_read_decrypt_session (handle, &payload_info, &decrypt_resp);
90 if(drm_trusted_result != DRM_TRUSTED_RETURN_SUCCESS) {
91 GST_ERROR ("Error in drm_trusted_read_decrypt_session() [%x]", drm_trusted_result);
95 GST_DEBUG ("Leave [%s], drm_trusted_read_decrypt_session() success, requested=%d, read_size=%d", __func__, buf_length, decrypt_resp.read_size);
97 *read_size = decrypt_resp.read_size;
102 gboolean drm_util_seek (DRM_DECRYPT_HANDLE handle, int offset, int mode)
104 drm_trusted_result_e drm_trusted_result;
105 drm_trusted_seek_decrypt_info_s seek_decrypt_info;
106 memset (&seek_decrypt_info, 0, sizeof(drm_trusted_seek_decrypt_info_s));
108 GST_DEBUG ("Enter [%s] offset=%d, mode=%d", __func__, offset, mode);
110 seek_decrypt_info.offset = offset;
111 seek_decrypt_info.seek_mode = mode;
113 drm_trusted_result = drm_trusted_seek_decrypt_session(handle, &seek_decrypt_info);
114 if (drm_trusted_result != DRM_TRUSTED_RETURN_SUCCESS) {
115 GST_ERROR ("Error in drm_trusted_seek_decrypt_session(), error=%x", drm_trusted_result);
119 GST_DEBUG ("Leave [%s], drm_trusted_seek_decrypt_session () success!!", __func__);
123 gboolean drm_util_tell (DRM_DECRYPT_HANDLE handle, unsigned int *offset)
125 drm_trusted_result_e drm_trusted_result;
126 drm_trusted_tell_decrypt_resp_data_s tell_decrypt_resp_data;
128 if (handle == NULL || offset == NULL) {
129 GST_ERROR ("Invalid parameter, handle=%p, offset=%p", handle, offset);
133 GST_DEBUG ("Enter [%s] offset=%p", __func__, offset);
135 memset (&tell_decrypt_resp_data, 0, sizeof(drm_trusted_tell_decrypt_resp_data_s));
137 drm_trusted_result = drm_trusted_tell_decrypt_session(handle, &tell_decrypt_resp_data);
138 if (drm_trusted_result != DRM_TRUSTED_RETURN_SUCCESS) {
139 GST_ERROR ("Error in drm_trusted_tell_decrypt_session(), error=%x", drm_trusted_result);
144 *offset = tell_decrypt_resp_data.offset;
146 GST_DEBUG ("Leave [%s], drm_trusted_tell_decrypt_session () success!!", __func__);
151 gboolean drm_util_close (DRM_DECRYPT_HANDLE *phandle)
153 drm_trusted_result_e drm_trusted_result;
154 drm_trusted_set_consumption_state_info_s decrypt_state_data = { DRM_CONSUMPTION_STOPPED };
156 if (phandle == NULL) {
157 GST_ERROR ("Invalid parameter, phandle=%p", phandle);
161 /* Set decryption state to STOPPED */
162 drm_trusted_result = drm_trusted_set_decrypt_state(*phandle, &decrypt_state_data);
163 if (drm_trusted_result != DRM_TRUSTED_RETURN_SUCCESS) {
164 GST_ERROR ("Error in drm_trusted_set_decrypt_state(), error=%x", drm_trusted_result);
166 GST_DEBUG ("drm_trusted_set_decrypt_state () success!!");
169 /* Close decrypt session */
170 drm_trusted_result = drm_trusted_close_decrypt_session(phandle);
171 if(drm_trusted_result != DRM_TRUSTED_RETURN_SUCCESS) {
172 GST_ERROR ("Error in drm_trusted_close_decrypt_session() error=%x", drm_trusted_result);
175 GST_DEBUG ("drm_trusted_close_decrypt_session() success!!!");