annotate m_struct.h @ 36406:c918845d0d9a

mplayer: Fix a crash seeking with -chapter and -ass When seeking to chapter on startup the mpctx->d_sub member is not yet initialized. Do not access it in that case. The commit r31293 that introduced that code explains that it is for handling backward seeking correctly. So it should not be needed on startup forward seek situation.
author al
date Fri, 08 Nov 2013 21:06:40 +0000
parents 08a90b0e44e1
children fd1feb8ae5fd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 24966
diff changeset
19 #ifndef MPLAYER_M_STRUCT_H
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 24966
diff changeset
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
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
22 /// \defgroup OptionsStruct Options struct
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
23 /// \ingroup Options
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
24 /// An API to manipulate structs using m_option.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
25 ///@{
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
26
33882
08a90b0e44e1 doxygen: drop filename from @file directive
diego
parents: 30695
diff changeset
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
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
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
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
35 /// size of the whole struct
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
36 unsigned int size;
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
37 /// Pointer to a struct filled with the default settings
22027
0b262e00bc99 Mark m_struct_t defaults as const
reimar
parents: 19194
diff changeset
38 const void* defaults;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
39 /// Field list.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
40 /** The p field of the \ref m_option struct must contain the offset
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
41 * of the member in the struct (use M_ST_OFF macro for this).
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
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
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
48
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
49 /// Get the offset of a struct field.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
50 /** \param struct_type Struct type.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
51 * \param member Name of the field.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
52 * \return The offset of the field in bytes.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
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
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
56
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
57 /// Get a pointer to a struct field.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
58 /** \param struct_p Pointer to the struct.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
59 * \param struct_offset Offset of the field in the struct.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
60 * \return Pointer to the struct field.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
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
990bafe740df Avoid void * arithmetic
reimar
parents: 23612
diff changeset
63 ((void *)((char *)(struct_p) + (unsigned long)(struct_offset)))
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
64
23612
10a64a994a16 Some comment typo fixes
reimar
parents: 22027
diff changeset
65 /// Access a struct field at a given offset.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
66 /** \param member_type Type of the field.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
67 * \param struct_p Pointer to the struct.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
68 * \param struct_offset Offset of the field in the struct.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
69 * \return The struct field at the given offset.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
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
albeu
parents: 8169
diff changeset
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
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
76 /// Allocate the struct and set it to the defaults.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
77 /** \param st Struct definition.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
78 * \return The newly allocated object set to default.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
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
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
82
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
83 /// Set a field of the struct.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
84 /** \param st Struct definition.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
85 * \param obj Pointer to the struct to set.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
86 * \param field Name of the field to set.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
87 * \param param New value of the field.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
88 * \return 0 on error, 1 on success.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
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
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
92
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
93 /// Reset a field (or all if field == NULL) to defaults.
23612
10a64a994a16 Some comment typo fixes
reimar
parents: 22027
diff changeset
94 /** \param st Struct definition.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
95 * \param obj Pointer to the struct to set.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
96 * \param field Name of the field to reset, if NULL all fields are reseted.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
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
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
100
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
101 /// Create a copy of an existing struct.
23612
10a64a994a16 Some comment typo fixes
reimar
parents: 22027
diff changeset
102 /** \param st Struct definition.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
103 * \param obj Pointer to the struct to copy.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
104 * \return Newly allocated copy of obj.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
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
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
108
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
109 /// Free an allocated struct.
23612
10a64a994a16 Some comment typo fixes
reimar
parents: 22027
diff changeset
110 /** \param st Struct definition.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
111 * \param obj Pointer to the struct to copy.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
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
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
115
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
116 /// Get a field description.
23612
10a64a994a16 Some comment typo fixes
reimar
parents: 22027
diff changeset
117 /** \param st Struct definition.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
118 * \param f Name of the field.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
119 * \return The \ref m_option struct describing the field or NULL if not found.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
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
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
124 ///@}
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
125
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 24966
diff changeset
126 #endif /* MPLAYER_M_STRUCT_H */