2 * Copyright (c) [2012] Samsung Electronics Co., Ltd.
4 * Licensed under the Flora License, Version 1.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <vconf-keys.h>
20 #include <Ecore_Evas.h>
21 #include <Elementary.h>
24 #include "mp-video-log.h"
25 #include "video-player.h"
26 #include "mp-video-service-ctrl.h"
27 #include "mp-video-subtitle-ctrl.h"
29 #define MP_VIDEO_SUBTITLE_MENU_NUM 2
31 #define MP_SUBTITLE_FONT_SMALL 22
32 #define MP_SUBTITLE_FONT_MEDIUM 35
33 #define MP_SUBTITLE_FONT_LARGE 48
34 #define MP_SUBTITLE_MIN_VALUE 3
37 /* subtitle edc layout */
38 static Evas_Object *pSubTitleEdj = NULL;
40 static bool bExistSubtitleFile = FALSE;
41 static char *szSubtitleFileUri = NULL;
42 static char szSubTitleExtWildkey[MP_SUBTITLE_TYPE_MAX][5] = { ".srt", ".sub", ".smi" };
44 static MpSubTitleSizeType nSubtitleSize = MP_SUBTITLE_SIZE_SMALL;
46 static bool bShowStatus = TRUE;
53 static void MpVideoSubtitleCtrlClear(void)
57 bExistSubtitleFile = FALSE;
61 free(szSubtitleFileUri);
62 szSubtitleFileUri = NULL;
66 evas_object_del(pSubTitleEdj);
76 bool MpVideoSubtitleCtrlCheckSubtitleFile(char *szMediaUriPath)
78 if (!szMediaUriPath) {
79 VideoLogInfo("No Exist szMediaUri.");
83 if (strlen(szMediaUriPath) < 1) {
84 VideoLogInfo("No Exist szMediaUri.");
94 bExistSubtitleFile = FALSE;
96 if(szSubtitleFileUri == NULL)
98 szSubtitleFileUri = calloc(1, sizeof(char) * STR_LEN_MAX);
103 szExt = strrchr(szMediaUriPath, '.');
106 nStrLength = strlen(szMediaUriPath) - strlen(szExt);
109 nStrLength = strlen(szMediaUriPath);
112 for (nCount = 0; nCount < MP_SUBTITLE_TYPE_MAX; nCount++)
114 memset(szSubtitleFileUri, 0, STR_LEN_MAX);
115 strncpy(szSubtitleFileUri, szMediaUriPath, nStrLength);
116 strcat(szSubtitleFileUri, szSubTitleExtWildkey[nCount]);
117 VideoLogInfo("%s",szSubtitleFileUri);
119 if (!stat(szSubtitleFileUri, &buf)) {
120 VideoLogInfo("Success finding subtitle file. - %d", nCount);
121 bExistSubtitleFile = TRUE;
124 memset(szSubtitleFileUri, 0, STR_LEN_MAX);
128 if (!bExistSubtitleFile) {
129 VideoLogInfo("Fail finding subtitle file.");
132 return bExistSubtitleFile;
135 void *MpVideoSubtitleCtrlInit(void *pUserData, void *pParent)
137 if (pUserData == NULL) {
138 VideoLogInfo("[ERR]No have pUserData");
142 if (pParent == NULL) {
143 VideoLogInfo("[ERR]No have pParent");
149 VideoAppData *pAppData = (VideoAppData *)pUserData;
151 MpVideoSubtitleCtrlClear();
153 if(!MpVideoSubtitleCtrlCheckSubtitleFile(pAppData->szMediaUri)) {
154 VideoLogInfo("Sub tiltle file is not exist.");
157 pSubTitleEdj = elm_layout_add(pParent);
158 elm_layout_file_set(pSubTitleEdj, VIDEO_PLAYER_SUBTITLE_EDJ, SUBTITLE_EDJ_GROUP);
160 return (void *)pSubTitleEdj;
163 void MpVideoSubtitleCtrlDestroy(void)
167 MpVideoSubtitleCtrlClear();
170 void MpVideoSubtitleCtrlUpdate(char *szTxt)
172 VideoLogInfo("%d",strlen(szTxt));
174 if (!MpVideoSubtitleCtrlIsExistSubtitle()) {
178 if(pSubTitleEdj == NULL) {
179 VideoLogInfo("Subtitle handle is NULL");
183 edje_object_part_text_set(_EDJ(pSubTitleEdj), "subtitle.label.txt",szTxt);
187 bool MpVideoSubtitleCtrlIsExistSubtitle(void)
191 return bExistSubtitleFile;
194 bool MpVideoSubtitleCtrlGetSubtitleUri(char *szSubtitleUri)
198 if (!MpVideoSubtitleCtrlIsExistSubtitle()) {
202 if (strlen(szSubtitleFileUri) < 1) {
203 VideoLogInfo("[ERR]No have szSubtitleFileUri");
207 strncpy(szSubtitleUri, szSubtitleFileUri, STR_LEN_MAX -1);
212 void MpVideoSubtitleCtrlSetLayoutShow(bool bShow)
216 if (!MpVideoSubtitleCtrlIsExistSubtitle()) {
220 if(pSubTitleEdj == NULL) {
221 VideoLogInfo("Subtitle handle is NULL");
225 edje_object_signal_emit(_EDJ(pSubTitleEdj), SIGNAL_SUBTITLE_LAYOUT_SHOW, "*");
228 edje_object_signal_emit(_EDJ(pSubTitleEdj), SIGNAL_SUBTITLE_LAYOUT_HIDE, "*");
233 void MpVideoSubtitleCtrlSetSizeMode(int nSizeMode)
237 if (!MpVideoSubtitleCtrlIsExistSubtitle()) {
241 if(pSubTitleEdj == NULL) {
242 VideoLogInfo("Subtitle handle is NULL");
246 MpSubTitleSizeType type = nSizeMode;
248 if(type == MP_SUBTITLE_SIZE_LARGE) {
249 edje_object_signal_emit(_EDJ(pSubTitleEdj), SIGNAL_SUBTITLE_SIZE_LARGE, "*");
251 else if(type == MP_SUBTITLE_SIZE_MEDIUM) {
252 edje_object_signal_emit(_EDJ(pSubTitleEdj), SIGNAL_SUBTITLE_SIZE_MEDIUM, "*");
254 else if(type == MP_SUBTITLE_SIZE_SMALL) {
255 edje_object_signal_emit(_EDJ(pSubTitleEdj), SIGNAL_SUBTITLE_SIZE_SMALL, "*");
258 nSubtitleSize = type;
262 int MpVideoSubtitleCtrlGetSizeMode()
266 if (!MpVideoSubtitleCtrlIsExistSubtitle()) {
270 if(pSubTitleEdj == NULL) {
271 VideoLogInfo("Subtitle handle is NULL");
275 return nSubtitleSize;
280 void MpVideoSubtitleCtrlSetRotate(int nRotateStatus)
283 if (!MpVideoSubtitleCtrlIsExistSubtitle()) {
287 if(pSubTitleEdj == NULL) {
288 VideoLogInfo("Subtitle handle is NULL");
292 if(nRotateStatus == VIDEO_ROTATE_PORTRAIT_NORMAL ||
293 nRotateStatus == VIDEO_ROTATE_PORTRAIT_REVERSE) {
294 edje_object_signal_emit(_EDJ(pSubTitleEdj), SIGNAL_SUBTITLE_PORTRATE_MODE, "*");
297 else if(nRotateStatus == VIDEO_ROTATE_LANDSCAPE_NORMAL ||
298 nRotateStatus == VIDEO_ROTATE_LANDSCAPE_REVERSE) {
299 edje_object_signal_emit(_EDJ(pSubTitleEdj), SIGNAL_SUBTITLE_LANDSCAPE_MODE, "*");
303 void MpVideoSubtitleCtrlSetShowStatus(bool bShow)
307 if(pSubTitleEdj == NULL) {
308 VideoLogInfo("Subtitle handle is NULL");
311 if(bShowStatus != bShow) {
314 edje_object_signal_emit(_EDJ(pSubTitleEdj), SIGNAL_SUBTITLE_TXT_SHOW, "*");
318 edje_object_signal_emit(_EDJ(pSubTitleEdj), SIGNAL_SUBTITLE_TXT_HIDE, "*");
323 bool MpVideoSubtitleCtrlGetShowStatus()
327 if(pSubTitleEdj == NULL) {
328 VideoLogInfo("Subtitle handle is NULL");
335 void MpVideoSubtitleCtrlSetLockScreen(bool bShow)
339 if(pSubTitleEdj == NULL) {
340 VideoLogInfo("Subtitle handle is NULL");
345 edje_object_signal_emit(_EDJ(pSubTitleEdj), SIGNAL_LOCKSCREEN_SHOW, "*");
348 edje_object_signal_emit(_EDJ(pSubTitleEdj), SIGNAL_LOCKSCREEN_HIDE, "*");