Merge "Support TPOS (Part of a Set)" into tizen
[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 #include "mm_file.h"
30
31 #define MAXSTREAMS              20
32 #define MMFILE_VIDEO_STREAM     0
33 #define MMFILE_AUDIO_STREAM     1
34
35 #define MMFILE_FORMAT_SUCCESS   1
36 #define MMFILE_FORMAT_FAIL      0
37
38
39 #define MM_FILE_SET_MEDIA_FILE_SRC(Media, Filename)             do { \
40                 (Media).type = MM_FILE_SRC_TYPE_FILE; \
41                 (Media).file.path = ((strstr(Filename, "file://") != NULL) ? Filename+7 : Filename); \
42         } while (0);
43
44 #define MM_FILE_SET_MEDIA_MEM_SRC(Media, Memory, Size, Format)          do { \
45                 (Media).type = MM_FILE_SRC_TYPE_MEMORY; \
46                 (Media).memory.ptr = (Memory); \
47                 (Media).memory.size = (Size); \
48                 (Media).memory.format = (Format); \
49         } while (0);
50
51
52
53 enum {
54         MM_FILE_SRC_TYPE_FILE,
55         MM_FILE_SRC_TYPE_MEMORY,
56 };
57
58 typedef struct _mm_file_source {
59         int             type;
60         union {
61                 struct {
62                         const char *path;
63                 } file;
64                 struct {
65                         const void *ptr;
66                         unsigned int size;
67                         int format;     /* _mmfileformats */
68                 } memory;
69         };
70 } MMFileSourceType;
71
72
73 typedef struct _mmfilesteam {
74         int     streamType;
75         int     codecId;
76         int     version;
77         int     bitRate;
78         int     framePerSec;
79         int     width;
80         int     height;
81         int     nbChannel;
82         int     samplePerSec;
83         int     bitPerSample;
84         bool is_uhqa;
85 } MMFileFormatStream;
86
87 typedef struct _mmfileformatframe {
88         unsigned char   bCompressed;
89         unsigned int    frameSize;
90         unsigned int    frameWidth;
91         unsigned int    frameHeight;
92         unsigned int    configLenth;
93         unsigned char   *frameData;
94         void                    *configData;
95         unsigned int    timestamp;
96         unsigned int    frameNumber;
97 } MMFileFormatFrame;
98
99
100 typedef struct _MMFileFormatContext MMFileFormatContext;
101
102 struct _MMFileFormatContext {
103         int notsupport;
104         int formatType;
105         int commandType;        /* TAG or CONTENTS */
106         int pre_checked;        /*filefomat already detected.*/
107
108         MMFileSourceType *filesrc;      /*ref only*/
109         char *uriFileName;
110
111         /* contents information */
112         int duration;   /* milliseconds */
113         int isseekable;
114         int videoTotalTrackNum;
115         int audioTotalTrackNum;
116         int nbStreams;
117         int audioStreamId;
118         int videoStreamId;
119         MMFileFormatStream *streams[MAXSTREAMS];
120
121         /* thumbnail info */
122         MMFileFormatFrame *thumbNail;
123
124         /* tag info */
125         char *title;
126         char *artist;
127         char *author;
128         char *composer;
129         char *album;
130         char *album_artist;
131         char *copyright;
132         char *description;
133         char *comment;
134         char *genre;
135         char *classification;
136         char *year;
137         char *recDate;
138         char *part_of_set;
139         char *tagTrackNum;
140         char *rating;
141         int artworkSize;
142         char *artworkMime;
143         unsigned char *artwork;
144         float  longitude;
145         float  latitude;
146         float  altitude;
147
148         char *conductor;
149         char *unsyncLyrics;
150         char *rotate;
151         GList *syncLyrics;
152         int syncLyricsNum;
153         int cdis;
154         int smta;
155         int isSpherical;
156         int isStitched;
157         char *stitchingSoftware;
158         char *projectionType;
159         char *stereoMode;
160         int sourceCount;
161         int initViewHeading;
162         int initViewPitch;
163         int initViewRoll;
164         int timestamp;
165         int fullPanoWidth;
166         int fullPanoHeight;
167         int croppedAreaImageWidth;
168         int croppedAreaImageHeight;
169         int croppedAreaLeft;
170         int croppedAreaTop;
171         MMFILE_AMBISONIC_TYPE ambisonicType;
172         MMFILE_AMBISONIC_FORMAT ambisonicFormat;
173         MMFILE_AMBISONIC_ORDER ambisonicOrder;
174         unsigned stereoModeV2;
175         char *metadataSourceV2;
176         unsigned projTypeV2;
177         unsigned poseYawV2;
178         unsigned posePitchV2;
179         unsigned poseRollV2;
180         unsigned cbmpLayoutV2;
181         unsigned cbmpPaddingV2;
182         unsigned equiBoundsTopV2;
183         unsigned equiBoundsBottomV2;
184         unsigned equiBoundsLeftV2;
185         unsigned equiBoundsRightV2;
186
187         /* private data */
188         void *privateFormatData;
189         void *privateCodecData;
190
191         /* function pointer */
192         int (*ReadStream)(MMFileFormatContext *);
193         int (*ReadFrame)(MMFileFormatContext *, unsigned int, MMFileFormatFrame *);
194         int (*ReadTag)(MMFileFormatContext *);
195         int (*Close)(MMFileFormatContext *);
196 };
197
198 #ifndef __MMFILE_DYN_LOADING__
199 int mmfile_format_open(MMFileFormatContext **formatContext, MMFileSourceType *fileSrc);
200 int mmfile_format_read_stream(MMFileFormatContext *formatContext);
201 int mmfile_format_read_frame(MMFileFormatContext *formatContext, unsigned int timestamp, MMFileFormatFrame *frame);
202 int mmfile_format_read_tag(MMFileFormatContext *formatContext);
203 int mmfile_format_close(MMFileFormatContext *formatContext);
204 #endif
205
206 #ifdef __cplusplus
207 }
208 #endif
209
210 #endif /* _MMFILE_FORMATS_H_ */
211