Mercurial > mplayer.hg
annotate m_struct.h @ 33915:82b5070214cc
Do not believe a mp4v codec tag, go based on codec id instead in that case.
author | reimar |
---|---|
date | Fri, 19 Aug 2011 18:36:14 +0000 |
parents | 08a90b0e44e1 |
children | fd1feb8ae5fd |
rev | line source |
---|---|
30429
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
1 /* |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
2 * This file is part of MPlayer. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
3 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
7 * (at your option) any later version. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
8 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
12 * GNU General Public License for more details. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
13 * |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
17 */ |
c1a3f1bbba26
Add license header to all top-level files missing them.
diego
parents:
26029
diff
changeset
|
18 |
26029 | 19 #ifndef MPLAYER_M_STRUCT_H |
20 #define MPLAYER_M_STRUCT_H | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
21 |
18258 | 22 /// \defgroup OptionsStruct Options struct |
23 /// \ingroup Options | |
24 /// An API to manipulate structs using m_option. | |
25 ///@{ | |
26 | |
33882 | 27 /// \file |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
28 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
29 struct m_option; |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
30 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
31 /// Struct definition |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
32 typedef struct m_struct_st { |
18283 | 33 /// For error messages and debugging |
19194
5949a654e2d4
marks some read-only char* inside structs as const, patch by Stefan Huehner, stefan At huehner-org
reynaldo
parents:
19104
diff
changeset
|
34 const char* name; |
18258 | 35 /// size of the whole struct |
36 unsigned int size; | |
37 /// Pointer to a struct filled with the default settings | |
22027 | 38 const void* defaults; |
18258 | 39 /// Field list. |
40 /** The p field of the \ref m_option struct must contain the offset | |
41 * of the member in the struct (use M_ST_OFF macro for this). | |
42 */ | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
43 const struct m_option* fields; |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
44 } m_struct_t; |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
45 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
46 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
47 // From glib.h (modified ;-) |
18258 | 48 |
49 /// Get the offset of a struct field. | |
50 /** \param struct_type Struct type. | |
51 * \param member Name of the field. | |
52 * \return The offset of the field in bytes. | |
53 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
54 #define M_ST_OFF(struct_type, member) \ |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
55 ((void*) &((struct_type*) 0)->member) |
18258 | 56 |
57 /// Get a pointer to a struct field. | |
58 /** \param struct_p Pointer to the struct. | |
59 * \param struct_offset Offset of the field in the struct. | |
60 * \return Pointer to the struct field. | |
61 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
62 #define M_ST_MB_P(struct_p, struct_offset) \ |
23613 | 63 ((void *)((char *)(struct_p) + (unsigned long)(struct_offset))) |
18258 | 64 |
23612 | 65 /// Access a struct field at a given offset. |
18258 | 66 /** \param member_type Type of the field. |
67 * \param struct_p Pointer to the struct. | |
68 * \param struct_offset Offset of the field in the struct. | |
69 * \return The struct field at the given offset. | |
70 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
71 #define M_ST_MB(member_type, struct_p, struct_offset) \ |
9586 | 72 (*(member_type*) M_ST_MB_P ((struct_p), (struct_offset))) |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
73 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
74 |
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
75 |
18258 | 76 /// Allocate the struct and set it to the defaults. |
77 /** \param st Struct definition. | |
78 * \return The newly allocated object set to default. | |
79 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
80 void* |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
81 m_struct_alloc(const m_struct_t* st); |
18258 | 82 |
83 /// Set a field of the struct. | |
84 /** \param st Struct definition. | |
85 * \param obj Pointer to the struct to set. | |
86 * \param field Name of the field to set. | |
87 * \param param New value of the field. | |
88 * \return 0 on error, 1 on success. | |
89 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
90 int |
30695
a26f6577d338
Make more option-parsing related function arguments const.
reimar
parents:
30429
diff
changeset
|
91 m_struct_set(const m_struct_t* st, void* obj, const char* field, const char* param); |
18258 | 92 |
93 /// Reset a field (or all if field == NULL) to defaults. | |
23612 | 94 /** \param st Struct definition. |
18258 | 95 * \param obj Pointer to the struct to set. |
96 * \param field Name of the field to reset, if NULL all fields are reseted. | |
97 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
98 void |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
99 m_struct_reset(const m_struct_t* st, void* obj, const char* field); |
18258 | 100 |
101 /// Create a copy of an existing struct. | |
23612 | 102 /** \param st Struct definition. |
18258 | 103 * \param obj Pointer to the struct to copy. |
104 * \return Newly allocated copy of obj. | |
105 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
106 void* |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
107 m_struct_copy(const m_struct_t* st, void* obj); |
18258 | 108 |
109 /// Free an allocated struct. | |
23612 | 110 /** \param st Struct definition. |
18258 | 111 * \param obj Pointer to the struct to copy. |
112 */ | |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
113 void |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
114 m_struct_free(const m_struct_t* st, void* obj); |
18258 | 115 |
116 /// Get a field description. | |
23612 | 117 /** \param st Struct definition. |
18258 | 118 * \param f Name of the field. |
119 * \return The \ref m_option struct describing the field or NULL if not found. | |
120 */ | |
24966
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
121 const struct m_option* |
cc170348a763
correct const usage in the option handling code so that tables can be
rfelker
parents:
23689
diff
changeset
|
122 m_struct_get_field(const m_struct_t* st,const char* f); |
8169
7c9253521f9c
A struct setter. It allow you to setup struct from some user
albeu
parents:
diff
changeset
|
123 |
18258 | 124 ///@} |
125 | |
26029 | 126 #endif /* MPLAYER_M_STRUCT_H */ |