4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Hyunjun Ko <zzoon.ko@samsung.com>, Haejeong Kim <backto.kim@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
22 #include "minfo-meta.h"
23 #include "visual-svc.h"
24 #include "minfo-bookmark.h"
25 #include "media-svc-api.h"
26 #include "visual-svc-util.h"
27 #include "visual-svc-debug.h"
28 #include "visual-svc-error.h"
31 static void _minfo_mmeta_init(Mmeta *mmeta);
33 int minfo_mmeta_load(MediaSvcHandle *mb_svc_handle, Mmeta *mmeta, mb_svc_media_record_s *p_md_record)
36 mb_svc_media_record_s media_record = {"",};
37 mb_svc_image_meta_record_s image_meta_record = {0,};
38 mb_svc_video_meta_record_s video_meta_record = {0,};
40 if (p_md_record == NULL) {
42 mb_svc_get_media_record_by_id(mb_svc_handle, mmeta->media_uuid,
46 ("minfo_get_meta_info:get media record by id failed\n");
50 media_record = *p_md_record;
53 if (media_record.content_type == MINFO_ITEM_IMAGE) {
55 mb_svc_get_image_record_by_media_id(mb_svc_handle, mmeta->media_uuid,
61 mmeta->longitude = image_meta_record.longitude;
62 mmeta->latitude = image_meta_record.latitude;
63 mmeta->type = media_record.content_type;
64 mmeta->description = NULL;
66 mmeta->width = image_meta_record.width;
67 mmeta->height = image_meta_record.height;
68 mmeta->datetaken = image_meta_record.datetaken;
70 mmeta->image_info = minfo_mimage_new(mb_svc_handle, NULL);
71 if (mmeta->image_info == NULL) {
72 return MB_SVC_ERROR_INTERNAL;
74 mmeta->image_info->orientation = image_meta_record.orientation;
77 else if (media_record.content_type == MINFO_ITEM_VIDEO) {
79 mb_svc_get_video_record_by_media_id(mb_svc_handle, mmeta->media_uuid,
85 mmeta->type = media_record.content_type;
86 mmeta->description = NULL;
87 mmeta->longitude = video_meta_record.longitude;
88 mmeta->latitude = video_meta_record.latitude;
90 mmeta->width = video_meta_record.width;
91 mmeta->height = video_meta_record.height;
92 mmeta->datetaken = video_meta_record.datetaken;
94 mmeta->video_info = minfo_mvideo_new(mb_svc_handle, mmeta->media_uuid);
96 if (mmeta->video_info == NULL) {
97 return MB_SVC_ERROR_INTERNAL;
104 static void _minfo_mmeta_init(Mmeta *mmeta)
106 mmeta->gtype = MINFO_TYPE_MMETA;
108 mmeta->media_uuid = NULL;
110 mmeta->description = NULL;
111 mmeta->image_info = NULL;
112 mmeta->video_info = NULL;
113 mmeta->_reserved = NULL;
114 mmeta->longitude = 0.0f;
115 mmeta->latitude = 0.0f;
118 Mmeta *minfo_mmeta_new(MediaSvcHandle *mb_svc_handle, const char *media_uuid, mb_svc_media_record_s *p_md_record)
123 mmeta = (Mmeta *) malloc(sizeof(Mmeta));
128 _minfo_mmeta_init(mmeta);
130 mmeta->media_uuid = (char *)malloc(MB_SVC_UUID_LEN_MAX + 1);
133 strncpy(mmeta->media_uuid, p_md_record->media_uuid, MB_SVC_UUID_LEN_MAX + 1);
134 ret = minfo_mmeta_load(mb_svc_handle, mmeta, p_md_record);
135 } else if (media_uuid != NULL) {
136 strncpy(mmeta->media_uuid, media_uuid, MB_SVC_UUID_LEN_MAX + 1);
138 ret = minfo_mmeta_load(mb_svc_handle, mmeta, NULL);
151 void minfo_mmeta_destroy(Mmeta *mmeta)
153 if (mmeta != NULL && IS_MINFO_MMETA(mmeta)) {
154 if (mmeta->type == MINFO_ITEM_IMAGE && mmeta->image_info) {
155 minfo_mimage_destroy(mmeta->image_info);
157 if (mmeta->type == MINFO_ITEM_VIDEO && mmeta->video_info) {
158 minfo_mvideo_destroy(mmeta->video_info);
160 if (mmeta->media_uuid) {
161 free(mmeta->media_uuid);
163 if (mmeta->description) {
164 free(mmeta->description);
171 /*--------------------------mvideo-----------------------------*/
172 static void _minfo_mvideo_init(Mvideo *mvideo);
174 static int _minfo_bm_ite_fn(Mbookmark *bookmark, void *user_data)
176 GList **list = (GList **) user_data;
177 *list = g_list_append(*list, bookmark);
182 int minfo_mvideo_load(MediaSvcHandle *mb_svc_handle, const char *media_id, Mvideo *mvideo)
186 mb_svc_video_meta_record_s video_meta_record = { 0 };
188 ret = mb_svc_get_video_record_by_media_id(mb_svc_handle, media_id, &video_meta_record);
193 length = strlen(video_meta_record.album) + 1;
194 mvideo->album_name = (char *)malloc(length);
195 if (mvideo->album_name == NULL) {
196 return MB_SVC_ERROR_OUT_OF_MEMORY;
198 memset(mvideo->album_name, 0x00, length);
199 strncpy(mvideo->album_name, video_meta_record.album, length);
201 length = strlen(video_meta_record.artist) + 1;
202 mvideo->artist_name = (char *)malloc(length);
203 if (mvideo->artist_name == NULL) {
204 return MB_SVC_ERROR_OUT_OF_MEMORY;
206 memset(mvideo->artist_name, 0x00, length);
207 strncpy(mvideo->artist_name, video_meta_record.artist, length);
209 length = strlen(video_meta_record.title) + 1;
210 mvideo->title = (char *)malloc(length);
211 if (mvideo->title == NULL) {
212 return MB_SVC_ERROR_OUT_OF_MEMORY;
214 memset(mvideo->title, 0x00, length);
215 strncpy(mvideo->title, video_meta_record.title, length);
217 length = strlen(video_meta_record.genre) + 1;
218 mvideo->genre = (char *)malloc(length);
219 if (mvideo->genre == NULL) {
220 return MB_SVC_ERROR_OUT_OF_MEMORY;
222 memset(mvideo->genre, 0x00, length);
223 strncpy(mvideo->genre, video_meta_record.genre, length);
225 mvideo->last_played_pos = video_meta_record.last_played_time;
226 mvideo->duration = video_meta_record.duration;
228 length = strlen(video_meta_record.youtube_category) + 1;
229 mvideo->web_category = (char *)malloc(length);
230 if (mvideo->web_category == NULL) {
231 return MB_SVC_ERROR_OUT_OF_MEMORY;
233 memset(mvideo->web_category, 0x00, length);
235 strncpy(mvideo->web_category, video_meta_record.youtube_category, length);
237 GList *tmp_list = NULL;
238 minfo_get_bookmark_list(mb_svc_handle, media_id, _minfo_bm_ite_fn, &tmp_list);
239 mvideo->bookmarks = tmp_list;
241 mvideo->_reserved = NULL;
246 static void _minfo_mvideo_init(Mvideo *mvideo)
248 mvideo->gtype = MINFO_TYPE_MVIDEO;
250 mvideo->album_name = NULL;
251 mvideo->artist_name = NULL;
252 mvideo->title = NULL;
253 mvideo->genre = NULL;
254 mvideo->last_played_pos = 0;
255 mvideo->duration = 0;
256 mvideo->web_category = NULL;
257 mvideo->bookmarks = NULL;
258 mvideo->_reserved = NULL;
261 Mvideo *minfo_mvideo_new(MediaSvcHandle *mb_svc_handle, const char *id)
263 Mvideo *mvideo = NULL;
266 mvideo = (Mvideo *) malloc(sizeof(Mvideo));
267 if (mvideo == NULL) {
272 _minfo_mvideo_init(mvideo);
274 ret = minfo_mvideo_load(mb_svc_handle, id, mvideo);
276 minfo_mvideo_destroy(mvideo);
284 void minfo_mvideo_destroy(Mvideo *mvideo)
288 if (mvideo != NULL && IS_MINFO_MVIDEO(mvideo)) {
289 if (mvideo->album_name) {
290 free(mvideo->album_name);
292 if (mvideo->artist_name) {
293 free(mvideo->artist_name);
301 if (mvideo->web_category) {
302 free(mvideo->web_category);
304 if (mvideo->bookmarks) {
306 i < g_list_length((GList *) mvideo->bookmarks);
309 (Mbookmark *) g_list_nth_data((GList *)mvideo->bookmarks, i);
311 minfo_mbookmark_destroy(bookmark);
313 g_list_free(mvideo->bookmarks);
320 /*-------------------------mimage--------------------------*/
321 static void _minfo_mimage_init(Mimage *mimage);
323 int minfo_mimage_load(MediaSvcHandle *mb_svc_handle, const char *media_id, Mimage *mimage)
325 mb_svc_image_meta_record_s image_meta_record = { 0 };
328 ret = mb_svc_get_image_record_by_media_id(mb_svc_handle, media_id, &image_meta_record);
333 mimage->orientation = image_meta_record.orientation;
334 mimage->_reserved = NULL;
339 Mimage *minfo_mimage_new(MediaSvcHandle *mb_svc_handle, const char *id)
341 Mimage *mimage = NULL;
344 mimage = (Mimage *) malloc(sizeof(Mimage));
345 if (mimage == NULL) {
350 _minfo_mimage_init(mimage);
352 ret = minfo_mimage_load(mb_svc_handle, id, mimage);
362 void minfo_mimage_destroy(Mimage *mimage)
364 if (mimage != NULL && IS_MINFO_MIMAGE(mimage)) {
370 static void _minfo_mimage_init(Mimage *mimage)
372 mimage->gtype = MINFO_TYPE_MIMAGE;
374 mimage->orientation = 0;
375 mimage->_reserved = NULL;