sync tizen_2.4.
[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 typedef struct _mm_file_source {
58         int             type;
59         union {
60                 struct {
61                         const char *path;
62                 } file;
63                 struct {
64                         const void *ptr;
65                         unsigned int size;
66                         int format;     /* _mmfileformats */
67                 } memory;
68         };
69 } MMFileSourceType;
70
71
72 typedef struct _mmfilesteam {
73         int     streamType;
74         int     codecId;
75         int     version;
76         int     bitRate;
77         int     framePerSec;
78         int     width;
79         int     height;
80         int     nbChannel;
81         int     samplePerSec;
82         int     bitPerSample;
83         bool is_uhqa;
84 } MMFileFormatStream;
85
86 typedef struct _mmfileformatframe {
87         unsigned char   bCompressed;
88         unsigned int    frameSize;
89         unsigned int    frameWidth;
90         unsigned int    frameHeight;
91         unsigned int    configLenth;
92         unsigned char   *frameData;
93         void                    *configData;
94         unsigned int    timestamp;
95         unsigned int    frameNumber;
96 } MMFileFormatFrame;
97
98
99 typedef struct _MMFileFormatContext MMFileFormatContext;
100
101 struct _MMFileFormatContext {
102         int notsupport;
103         int formatType;
104         int commandType;        /* TAG or CONTENTS */
105         int pre_checked;        /*filefomat already detected.*/
106
107         MMFileSourceType *filesrc;      /*ref only*/
108         char *uriFileName;
109
110         /* contents information */
111         int duration;   /* milliseconds */
112         int isseekable;
113         int videoTotalTrackNum;
114         int audioTotalTrackNum;
115         int nbStreams;
116         int audioStreamId;
117         int videoStreamId;
118         MMFileFormatStream *streams[MAXSTREAMS];
119
120         /* thumbnail info */
121         MMFileFormatFrame *thumbNail;
122
123         /* tag info */
124         char *title;
125         char *artist;
126         char *author;
127         char *composer;
128         char *album;
129         char *album_artist;
130         char *copyright;
131         char *description;
132         char *comment;
133         char *genre;
134         char *classification;
135         char *year;
136         char *recDate;
137         char *tagTrackNum;
138         char *rating;
139         int artworkSize;
140         char *artworkMime;
141         unsigned char *artwork;
142         float  longitude;
143         float  latitude;
144         float  altitude;
145
146         char *conductor;
147         char *unsyncLyrics;
148         char *rotate;
149         GList *syncLyrics;
150         int syncLyricsNum;
151         int cdis;
152         int smta;
153
154         /* private data */
155         void *privateFormatData;
156         void *privateCodecData;
157
158         /* function pointer */
159         int (*ReadStream)(MMFileFormatContext *);
160         int (*ReadFrame)(MMFileFormatContext *, unsigned int, MMFileFormatFrame *);
161         int (*ReadTag)(MMFileFormatContext *);
162         int (*Close)(MMFileFormatContext *);
163 };
164
165 #ifndef __MMFILE_DYN_LOADING__
166 int mmfile_format_open(MMFileFormatContext **formatContext, MMFileSourceType *fileSrc);
167 int mmfile_format_read_stream(MMFileFormatContext *formatContext);
168 int mmfile_format_read_frame(MMFileFormatContext *formatContext, unsigned int timestamp, MMFileFormatFrame *frame);
169 int mmfile_format_read_tag(MMFileFormatContext *formatContext);
170 int mmfile_format_close(MMFileFormatContext *formatContext);
171 #endif
172
173 #ifdef __cplusplus
174 }
175 #endif
176
177 #endif /* _MMFILE_FORMATS_H_ */
178