modify build option and update code by Tizen coding convention.
[platform/core/multimedia/libmm-fileinfo.git] / include / mm_file_formats.h
1 /*
2  * libmm-fileinfo
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Haejeong Kim <backto.kim@samsung.com>
7  *
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
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
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.
19  *
20  */
21
22 #ifndef _MMFILE_FORMATS_H_
23 #define _MMFILE_FORMATS_H_
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 #include <glib.h>
29
30 #define MAXSTREAMS              20
31 #define MMFILE_VIDEO_STREAM     0
32 #define MMFILE_AUDIO_STREAM     1
33
34 #define MMFILE_FORMAT_SUCCESS   1
35 #define MMFILE_FORMAT_FAIL      0
36
37
38 #define MM_FILE_SET_MEDIA_FILE_SRC(Media, Filename)             do { \
39                 (Media).type = MM_FILE_SRC_TYPE_FILE; \
40                 (Media).file.path = ((strstr(Filename, "file://")!=NULL) ? Filename+7:Filename); \
41         } while (0);
42
43 #define MM_FILE_SET_MEDIA_MEM_SRC(Media, Memory, Size, Format)          do { \
44                 (Media).type = MM_FILE_SRC_TYPE_MEMORY; \
45                 (Media).memory.ptr = (Memory); \
46                 (Media).memory.size = (Size); \
47                 (Media).memory.format = (Format); \
48         } while (0);
49
50
51
52 enum {
53         MM_FILE_SRC_TYPE_FILE,
54         MM_FILE_SRC_TYPE_MEMORY,
55 };
56
57 enum {
58         MM_FILE_DRM_NONE = 0,           /*not drm file*/
59         MM_FILE_DRM_OMA,                        /*oma drm*/
60         MM_FILE_DRM_DIVX,                       /*divx drm*/
61         MM_FILE_DRM_PROTECTED,  /*This is drm file but not oma or divx*/
62 };
63
64
65 typedef struct _mm_file_source {
66         int             type;
67         union {
68                 struct {
69                         const char *path;
70                 } file;
71                 struct {
72                         const void *ptr;
73                         unsigned int size;
74                         int format;     /* _mmfileformats */
75                 } memory;
76         };
77 } MMFileSourceType;
78
79
80 typedef struct _mmfilesteam {
81         int     streamType;
82         int     codecId;
83         int     version;
84         int     bitRate;
85         int     framePerSec;
86         int     width;
87         int     height;
88         int     nbChannel;
89         int     samplePerSec;
90         int     bitPerSample;
91         bool is_uhqa;
92 } MMFileFormatStream;
93
94 typedef struct _mmfileformatframe {
95         unsigned char   bCompressed;
96         unsigned int    frameSize;
97         unsigned int    frameWidth;
98         unsigned int    frameHeight;
99         unsigned int    configLenth;
100         unsigned char   *frameData;
101         void                    *configData;
102         unsigned int    timestamp;
103         unsigned int    frameNumber;
104 } MMFileFormatFrame;
105
106
107 typedef struct _MMFileFormatContext MMFileFormatContext;
108
109 struct _MMFileFormatContext {
110         int notsupport;
111         int formatType;
112         int commandType;        /* TAG or CONTENTS */
113         int pre_checked;        /*filefomat already detected.*/
114
115         MMFileSourceType *filesrc;      /*ref only*/
116         char *uriFileName;
117
118         /* contents information */
119         int duration;   /* milliseconds */
120         int isseekable;
121         int isdrm;              /*drm type. see MM_FILE_DRM_XXX*/
122         int videoTotalTrackNum;
123         int audioTotalTrackNum;
124         int nbStreams;
125         int audioStreamId;
126         int videoStreamId;
127         MMFileFormatStream *streams[MAXSTREAMS];
128
129         /* thumbnail info */
130         MMFileFormatFrame *thumbNail;
131
132         /* tag info */
133         char *title;
134         char *artist;
135         char *author;
136         char *composer;
137         char *album;
138         char *album_artist;
139         char *copyright;
140         char *description;
141         char *comment;
142         char *genre;
143         char *classification;
144         char *year;
145         char *recDate;
146         char *tagTrackNum;
147         char *rating;
148         int artworkSize;
149         char *artworkMime;
150         unsigned char *artwork;
151         float  longitude;
152         float  latitude;
153         float  altitude;
154
155         char *conductor;
156         char *unsyncLyrics;
157         char *rotate;
158         GList *syncLyrics;
159         int syncLyricsNum;
160         int cdis;
161         int smta;
162
163         /* private data */
164         void *privateFormatData;
165         void *privateCodecData;
166
167         /* function pointer */
168         int (*ReadStream)(MMFileFormatContext *);
169         int (*ReadFrame)(MMFileFormatContext *, unsigned int, MMFileFormatFrame *);
170         int (*ReadTag)(MMFileFormatContext *);
171         int (*Close)(MMFileFormatContext *);
172 };
173
174 #ifndef __MMFILE_DYN_LOADING__
175 int mmfile_format_open(MMFileFormatContext **formatContext, MMFileSourceType *fileSrc);
176 int mmfile_format_read_stream(MMFileFormatContext *formatContext);
177 int mmfile_format_read_frame(MMFileFormatContext *formatContext, unsigned int timestamp, MMFileFormatFrame *frame);
178 int mmfile_format_read_tag(MMFileFormatContext *formatContext);
179 int mmfile_format_close(MMFileFormatContext *formatContext);
180 #endif
181
182 #ifdef __cplusplus
183 }
184 #endif
185
186 #endif /* _MMFILE_FORMATS_H_ */
187