annotate m_struct.h @ 27518:e54c9b7eb0d8

Revert bad changes to SSA/ASS subtitle packet format The following commits are reverted partially or completely: "a valid ASS line contains 9 ',' before actual text" "demux_mkv: output correctly formated ASS packets" "libass: add a new ass_process_data() to process demuxed subtitle packets" These commits converted the internal representation of SSA/ASS subtitle packets from the format used by Matroska to a custom format where each packet has contents exactly matching one line in complete SSA script files. AFAIK no files natively use such a format for muxed subtitles. The stated reason for this change was to use a format that could in principle be muxed into a maximal number of containers. SSA subtitles do not have an implicit duration so both start time and duration or end time need to be specified explicitly; the new format moved timing information inside the codec packet data so it could be muxed without modification into containers that can represent only start time at the container level. However such a change is wrong from the viewpoint of program architecture. Timing information belongs to the demuxer level, but these commits moved not only the duration but also the authoritative value of the start time to inside the codec data. Additionally the new format lost the value of the Matroska ReadOrder field which is used by MPlayer. This commit changes the internal packet format back to that used by Matroska and makes the internal Matroska demuxer output that format again. Libavformat still outputs the "new" format; it could be converted back to the Matroska format in demux_lavf.c, but I'm not adding that code at least yet. The current lavf code has similar problems as the reverted code in MPlayer, and it also currently fails to provide any way to access the value of the ReadOrder field. I hope that the lavf side will be improved; if it isn't conversion can be added later. For now I'll make MPlayer default to the internal Matroska demuxer instead of the lavf one in a separate commit.
author uau
date Mon, 08 Sep 2008 21:26:22 +0000
parents 4129c8cfa742
children c1a3f1bbba26
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 24966
diff changeset
1 #ifndef MPLAYER_M_STRUCT_H
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 24966
diff changeset
2 #define MPLAYER_M_STRUCT_H
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
3
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
4 /// \defgroup OptionsStruct Options struct
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
5 /// \ingroup Options
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
6 /// An API to manipulate structs using m_option.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
7 ///@{
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
8
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
9 /// \file m_struct.h
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
10
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
11 struct m_option;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
12
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
13 /// Struct definition
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
14 typedef struct m_struct_st {
18283
67d35fe89c8d Fix most of the mistakes pointed out by Diego.
albeu
parents: 18258
diff changeset
15 /// 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
16 const char* name;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
17 /// size of the whole struct
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
18 unsigned int size;
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
19 /// Pointer to a struct filled with the default settings
22027
0b262e00bc99 Mark m_struct_t defaults as const
reimar
parents: 19194
diff changeset
20 const void* defaults;
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
21 /// Field list.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
22 /** The p field of the \ref m_option struct must contain the offset
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
23 * of the member in the struct (use M_ST_OFF macro for this).
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
24 */
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
25 const struct m_option* fields;
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
26 } m_struct_t;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
27
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 // From glib.h (modified ;-)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
30
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
31 /// Get the offset of a struct field.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
32 /** \param struct_type Struct type.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
33 * \param member Name of the field.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
34 * \return The offset of the field in bytes.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
35 */
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
36 #define M_ST_OFF(struct_type, member) \
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
37 ((void*) &((struct_type*) 0)->member)
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
38
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
39 /// Get a pointer to a struct field.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
40 /** \param struct_p Pointer to the struct.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
41 * \param struct_offset Offset of the field in the struct.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
42 * \return Pointer to the struct field.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
43 */
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
44 #define M_ST_MB_P(struct_p, struct_offset) \
23613
990bafe740df Avoid void * arithmetic
reimar
parents: 23612
diff changeset
45 ((void *)((char *)(struct_p) + (unsigned long)(struct_offset)))
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
46
23612
10a64a994a16 Some comment typo fixes
reimar
parents: 22027
diff changeset
47 /// Access a struct field at a given offset.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
48 /** \param member_type Type of the field.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
49 * \param struct_p Pointer to the struct.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
50 * \param struct_offset Offset of the field in the struct.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
51 * \return The struct field at the given offset.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
52 */
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
53 #define M_ST_MB(member_type, struct_p, struct_offset) \
9586
albeu
parents: 8169
diff changeset
54 (*(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
55
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
56
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
57
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
58 /// Allocate the struct and set it to the defaults.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
59 /** \param st Struct definition.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
60 * \return The newly allocated object set to default.
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 void*
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
63 m_struct_alloc(const m_struct_t* st);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
64
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
65 /// Set a field of the struct.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
66 /** \param st Struct definition.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
67 * \param obj Pointer to the struct to set.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
68 * \param field Name of the field to set.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
69 * \param param New value of the field.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
70 * \return 0 on error, 1 on success.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
71 */
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
72 int
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
73 m_struct_set(const m_struct_t* st, void* obj, char* field, char* param);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
74
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
75 /// Reset a field (or all if field == NULL) to defaults.
23612
10a64a994a16 Some comment typo fixes
reimar
parents: 22027
diff changeset
76 /** \param st Struct definition.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
77 * \param obj Pointer to the struct to set.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
78 * \param field Name of the field to reset, if NULL all fields are reseted.
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_reset(const m_struct_t* st, void* obj, const char* field);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
82
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
83 /// Create a copy of an existing struct.
23612
10a64a994a16 Some comment typo fixes
reimar
parents: 22027
diff changeset
84 /** \param st Struct definition.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
85 * \param obj Pointer to the struct to copy.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
86 * \return Newly allocated copy of obj.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
87 */
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
88 void*
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
89 m_struct_copy(const m_struct_t* st, void* obj);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
90
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
91 /// Free an allocated struct.
23612
10a64a994a16 Some comment typo fixes
reimar
parents: 22027
diff changeset
92 /** \param st Struct definition.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
93 * \param obj Pointer to the struct to copy.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
94 */
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
95 void
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
96 m_struct_free(const m_struct_t* st, void* obj);
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
97
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
98 /// Get a field description.
23612
10a64a994a16 Some comment typo fixes
reimar
parents: 22027
diff changeset
99 /** \param st Struct definition.
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
100 * \param f Name of the field.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
101 * \return The \ref m_option struct describing the field or NULL if not found.
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
102 */
24966
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
103 const struct m_option*
cc170348a763 correct const usage in the option handling code so that tables can be
rfelker
parents: 23689
diff changeset
104 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
105
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
106 ///@}
96568be4bfdc Doxygen attack!
albeu
parents: 10594
diff changeset
107
26029
4129c8cfa742 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 24966
diff changeset
108 #endif /* MPLAYER_M_STRUCT_H */