summaryrefslogtreecommitdiff
path: root/apps/plugins/mpegplayer/mpeg2.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/mpegplayer/mpeg2.h')
-rw-r--r--apps/plugins/mpegplayer/mpeg2.h106
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
44typedef struct mpeg2_sequence_s { 44typedef 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
66typedef struct mpeg2_gop_s { 67typedef 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
87typedef struct mpeg2_picture_s { 89typedef 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
97typedef struct mpeg2_fbuf_s { 101typedef 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
102typedef struct mpeg2_info_s { 107typedef 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 {
116typedef struct mpeg2dec_s mpeg2dec_t; 122typedef struct mpeg2dec_s mpeg2dec_t;
117typedef struct mpeg2_decoder_s mpeg2_decoder_t; 123typedef struct mpeg2_decoder_s mpeg2_decoder_t;
118 124
119typedef enum { 125typedef 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
133typedef struct mpeg2_convert_init_s { 140typedef 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;
140typedef enum { 148
141 MPEG2_CONVERT_SET = 0, 149typedef 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
145typedef int mpeg2_convert_t (int stage, void * id, 156typedef 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]);
169void mpeg2_slice (mpeg2_decoder_t * decoder, int code, const uint8_t * buffer); 180void mpeg2_slice (mpeg2_decoder_t * decoder, int code, const uint8_t * buffer);
170 181
171typedef enum { 182typedef 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
179void * mpeg2_malloc (unsigned size, mpeg2_alloc_t reason); 191void * mpeg2_malloc (unsigned size, mpeg2_alloc_t reason);