diff options
Diffstat (limited to 'apps/plugins/mpegplayer/mpeg2.h')
-rw-r--r-- | apps/plugins/mpegplayer/mpeg2.h | 106 |
1 files changed, 59 insertions, 47 deletions
diff --git a/apps/plugins/mpegplayer/mpeg2.h b/apps/plugins/mpegplayer/mpeg2.h index 01b3de49eb..605a3538b0 100644 --- a/apps/plugins/mpegplayer/mpeg2.h +++ b/apps/plugins/mpegplayer/mpeg2.h | |||
@@ -27,21 +27,22 @@ | |||
27 | #define MPEG2_VERSION(a,b,c) (((a)<<16)|((b)<<8)|(c)) | 27 | #define MPEG2_VERSION(a,b,c) (((a)<<16)|((b)<<8)|(c)) |
28 | #define MPEG2_RELEASE MPEG2_VERSION (0, 4, 0) /* 0.4.0 */ | 28 | #define MPEG2_RELEASE MPEG2_VERSION (0, 4, 0) /* 0.4.0 */ |
29 | 29 | ||
30 | #define SEQ_FLAG_MPEG2 1 | 30 | #define SEQ_FLAG_MPEG2 1 |
31 | #define SEQ_FLAG_CONSTRAINED_PARAMETERS 2 | 31 | #define SEQ_FLAG_CONSTRAINED_PARAMETERS 2 |
32 | #define SEQ_FLAG_PROGRESSIVE_SEQUENCE 4 | 32 | #define SEQ_FLAG_PROGRESSIVE_SEQUENCE 4 |
33 | #define SEQ_FLAG_LOW_DELAY 8 | 33 | #define SEQ_FLAG_LOW_DELAY 8 |
34 | #define SEQ_FLAG_COLOUR_DESCRIPTION 16 | 34 | #define SEQ_FLAG_COLOUR_DESCRIPTION 16 |
35 | 35 | ||
36 | #define SEQ_MASK_VIDEO_FORMAT 0xe0 | 36 | #define SEQ_MASK_VIDEO_FORMAT 0xe0 |
37 | #define SEQ_VIDEO_FORMAT_COMPONENT 0 | 37 | #define SEQ_VIDEO_FORMAT_COMPONENT 0x00 |
38 | #define SEQ_VIDEO_FORMAT_PAL 0x20 | 38 | #define SEQ_VIDEO_FORMAT_PAL 0x20 |
39 | #define SEQ_VIDEO_FORMAT_NTSC 0x40 | 39 | #define SEQ_VIDEO_FORMAT_NTSC 0x40 |
40 | #define SEQ_VIDEO_FORMAT_SECAM 0x60 | 40 | #define SEQ_VIDEO_FORMAT_SECAM 0x60 |
41 | #define SEQ_VIDEO_FORMAT_MAC 0x80 | 41 | #define SEQ_VIDEO_FORMAT_MAC 0x80 |
42 | #define SEQ_VIDEO_FORMAT_UNSPECIFIED 0xa0 | 42 | #define SEQ_VIDEO_FORMAT_UNSPECIFIED 0xa0 |
43 | 43 | ||
44 | typedef struct mpeg2_sequence_s { | 44 | typedef struct mpeg2_sequence_s |
45 | { | ||
45 | unsigned int width, height; | 46 | unsigned int width, height; |
46 | unsigned int chroma_width, chroma_height; | 47 | unsigned int chroma_width, chroma_height; |
47 | unsigned int byte_rate; | 48 | unsigned int byte_rate; |
@@ -59,11 +60,12 @@ typedef struct mpeg2_sequence_s { | |||
59 | uint8_t matrix_coefficients; | 60 | uint8_t matrix_coefficients; |
60 | } mpeg2_sequence_t; | 61 | } mpeg2_sequence_t; |
61 | 62 | ||
62 | #define GOP_FLAG_DROP_FRAME 1 | 63 | #define GOP_FLAG_DROP_FRAME 1 |
63 | #define GOP_FLAG_BROKEN_LINK 2 | 64 | #define GOP_FLAG_BROKEN_LINK 2 |
64 | #define GOP_FLAG_CLOSED_GOP 4 | 65 | #define GOP_FLAG_CLOSED_GOP 4 |
65 | 66 | ||
66 | typedef struct mpeg2_gop_s { | 67 | typedef struct mpeg2_gop_s |
68 | { | ||
67 | uint8_t hours; | 69 | uint8_t hours; |
68 | uint8_t minutes; | 70 | uint8_t minutes; |
69 | uint8_t seconds; | 71 | uint8_t seconds; |
@@ -71,35 +73,39 @@ typedef struct mpeg2_gop_s { | |||
71 | uint32_t flags; | 73 | uint32_t flags; |
72 | } mpeg2_gop_t; | 74 | } mpeg2_gop_t; |
73 | 75 | ||
74 | #define PIC_MASK_CODING_TYPE 7 | 76 | #define PIC_MASK_CODING_TYPE 7 |
75 | #define PIC_FLAG_CODING_TYPE_I 1 | 77 | #define PIC_FLAG_CODING_TYPE_I 1 |
76 | #define PIC_FLAG_CODING_TYPE_P 2 | 78 | #define PIC_FLAG_CODING_TYPE_P 2 |
77 | #define PIC_FLAG_CODING_TYPE_B 3 | 79 | #define PIC_FLAG_CODING_TYPE_B 3 |
78 | #define PIC_FLAG_CODING_TYPE_D 4 | 80 | #define PIC_FLAG_CODING_TYPE_D 4 |
79 | 81 | ||
80 | #define PIC_FLAG_TOP_FIELD_FIRST 8 | 82 | #define PIC_FLAG_TOP_FIELD_FIRST 8 |
81 | #define PIC_FLAG_PROGRESSIVE_FRAME 16 | 83 | #define PIC_FLAG_PROGRESSIVE_FRAME 16 |
82 | #define PIC_FLAG_COMPOSITE_DISPLAY 32 | 84 | #define PIC_FLAG_COMPOSITE_DISPLAY 32 |
83 | #define PIC_FLAG_SKIP 64 | 85 | #define PIC_FLAG_SKIP 64 |
84 | #define PIC_FLAG_TAGS 128 | 86 | #define PIC_FLAG_TAGS 128 |
85 | #define PIC_MASK_COMPOSITE_DISPLAY 0xfffff000 | 87 | #define PIC_MASK_COMPOSITE_DISPLAY 0xfffff000 |
86 | 88 | ||
87 | typedef struct mpeg2_picture_s { | 89 | typedef struct mpeg2_picture_s |
90 | { | ||
88 | unsigned int temporal_reference; | 91 | unsigned int temporal_reference; |
89 | unsigned int nb_fields; | 92 | unsigned int nb_fields; |
90 | uint32_t tag, tag2; | 93 | uint32_t tag, tag2; |
91 | uint32_t flags; | 94 | uint32_t flags; |
92 | struct { | 95 | struct |
93 | int x, y; | 96 | { |
97 | int x, y; | ||
94 | } display_offset[3]; | 98 | } display_offset[3]; |
95 | } mpeg2_picture_t; | 99 | } mpeg2_picture_t; |
96 | 100 | ||
97 | typedef struct mpeg2_fbuf_s { | 101 | typedef struct mpeg2_fbuf_s |
102 | { | ||
98 | uint8_t * buf[3]; | 103 | uint8_t * buf[3]; |
99 | void * id; | 104 | void * id; |
100 | } mpeg2_fbuf_t; | 105 | } mpeg2_fbuf_t; |
101 | 106 | ||
102 | typedef struct mpeg2_info_s { | 107 | typedef struct mpeg2_info_s |
108 | { | ||
103 | const mpeg2_sequence_t * sequence; | 109 | const mpeg2_sequence_t * sequence; |
104 | const mpeg2_gop_t * gop; | 110 | const mpeg2_gop_t * gop; |
105 | const mpeg2_picture_t * current_picture; | 111 | const mpeg2_picture_t * current_picture; |
@@ -116,32 +122,37 @@ typedef struct mpeg2_info_s { | |||
116 | typedef struct mpeg2dec_s mpeg2dec_t; | 122 | typedef struct mpeg2dec_s mpeg2dec_t; |
117 | typedef struct mpeg2_decoder_s mpeg2_decoder_t; | 123 | typedef struct mpeg2_decoder_s mpeg2_decoder_t; |
118 | 124 | ||
119 | typedef enum { | 125 | typedef enum |
120 | STATE_BUFFER = 0, | 126 | { |
121 | STATE_SEQUENCE = 1, | 127 | STATE_BUFFER = 0, |
128 | STATE_SEQUENCE = 1, | ||
122 | STATE_SEQUENCE_REPEATED = 2, | 129 | STATE_SEQUENCE_REPEATED = 2, |
123 | STATE_GOP = 3, | 130 | STATE_GOP = 3, |
124 | STATE_PICTURE = 4, | 131 | STATE_PICTURE = 4, |
125 | STATE_SLICE_1ST = 5, | 132 | STATE_SLICE_1ST = 5, |
126 | STATE_PICTURE_2ND = 6, | 133 | STATE_PICTURE_2ND = 6, |
127 | STATE_SLICE = 7, | 134 | STATE_SLICE = 7, |
128 | STATE_END = 8, | 135 | STATE_END = 8, |
129 | STATE_INVALID = 9, | 136 | STATE_INVALID = 9, |
130 | STATE_INVALID_END = 10 | 137 | STATE_INVALID_END = 10 |
131 | } mpeg2_state_t; | 138 | } mpeg2_state_t; |
132 | 139 | ||
133 | typedef struct mpeg2_convert_init_s { | 140 | typedef struct mpeg2_convert_init_s |
141 | { | ||
134 | unsigned int id_size; | 142 | unsigned int id_size; |
135 | unsigned int buf_size[3]; | 143 | unsigned int buf_size[3]; |
136 | void (* start) (void * id, const mpeg2_fbuf_t * fbuf, | 144 | void (* start)(void * id, const mpeg2_fbuf_t * fbuf, |
137 | const mpeg2_picture_t * picture, const mpeg2_gop_t * gop); | 145 | const mpeg2_picture_t * picture, const mpeg2_gop_t * gop); |
138 | void (* copy) (void * id, uint8_t * const * src, unsigned int v_offset); | 146 | void (* copy)(void * id, uint8_t * const * src, unsigned int v_offset); |
139 | } mpeg2_convert_init_t; | 147 | } mpeg2_convert_init_t; |
140 | typedef enum { | 148 | |
141 | MPEG2_CONVERT_SET = 0, | 149 | typedef enum |
150 | { | ||
151 | MPEG2_CONVERT_SET = 0, | ||
142 | MPEG2_CONVERT_STRIDE = 1, | 152 | MPEG2_CONVERT_STRIDE = 1, |
143 | MPEG2_CONVERT_START = 2 | 153 | MPEG2_CONVERT_START = 2 |
144 | } mpeg2_convert_stage_t; | 154 | } mpeg2_convert_stage_t; |
155 | |||
145 | typedef int mpeg2_convert_t (int stage, void * id, | 156 | typedef int mpeg2_convert_t (int stage, void * id, |
146 | const mpeg2_sequence_t * sequence, int stride, | 157 | const mpeg2_sequence_t * sequence, int stride, |
147 | void * arg, mpeg2_convert_init_t * result); | 158 | void * arg, mpeg2_convert_init_t * result); |
@@ -168,12 +179,13 @@ void mpeg2_init_fbuf (mpeg2_decoder_t * decoder, uint8_t * current_fbuf[3], | |||
168 | uint8_t * forward_fbuf[3], uint8_t * backward_fbuf[3]); | 179 | uint8_t * forward_fbuf[3], uint8_t * backward_fbuf[3]); |
169 | void mpeg2_slice (mpeg2_decoder_t * decoder, int code, const uint8_t * buffer); | 180 | void mpeg2_slice (mpeg2_decoder_t * decoder, int code, const uint8_t * buffer); |
170 | 181 | ||
171 | typedef enum { | 182 | typedef enum |
172 | MPEG2_ALLOC_MPEG2DEC = 0, | 183 | { |
173 | MPEG2_ALLOC_CHUNK = 1, | 184 | MPEG2_ALLOC_MPEG2DEC = 0, |
174 | MPEG2_ALLOC_YUV = 2, | 185 | MPEG2_ALLOC_CHUNK = 1, |
186 | MPEG2_ALLOC_YUV = 2, | ||
175 | MPEG2_ALLOC_CONVERT_ID = 3, | 187 | MPEG2_ALLOC_CONVERT_ID = 3, |
176 | MPEG2_ALLOC_CONVERTED = 4 | 188 | MPEG2_ALLOC_CONVERTED = 4 |
177 | } mpeg2_alloc_t; | 189 | } mpeg2_alloc_t; |
178 | 190 | ||
179 | void * mpeg2_malloc (unsigned size, mpeg2_alloc_t reason); | 191 | void * mpeg2_malloc (unsigned size, mpeg2_alloc_t reason); |