blob: 13ebcc2db213324061c6ee32ec5c97036b94fd24 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
/*
* pes2audioes.h: A plugin for the Video Disk Recorder
*
* See the README file for copyright information and how to reach the author.
*
* $Id$
*/
#ifndef __pes2audioes_h_
#define __pes2audioes_h_
#ifndef uchar
typedef unsigned char uchar;
#endif
#include <inttypes.h>
#include <stdlib.h>
#include <string.h>
class cMarkAdPES2AudioES
{
private:
struct PESHDR
{
uchar Sync1;
uchar Sync2;
uchar Sync3;
uchar StreamID;
uchar LenH;
uchar LenL;
};
#pragma pack(1)
struct PESHDROPT
{
unsigned OOC:
1;
unsigned CY:
1;
unsigned DAI:
1;
unsigned PESP:
1;
unsigned PESSC:
2;
unsigned MarkerBits:
2;
unsigned EXT:
1;
unsigned CRC:
1;
unsigned ACI:
1;
unsigned TM:
1;
unsigned RATE:
1;
unsigned ESCR:
1;
unsigned TSF:
2;
unsigned Length:
8;
};
#pragma pack()
struct MP2HDR
{
unsigned Sync1:
8;
unsigned Protection:
1;
unsigned Layer:
2;
unsigned MpegID:
2;
unsigned Sync2:
3;
unsigned Private:
1;
unsigned Padding:
1;
unsigned SampleRateIndex:
2;
unsigned BitRateIndex:
4;
unsigned Emphasis:
2;
unsigned Original:
1;
unsigned Copyright:
1;
unsigned ModeExt:
2;
unsigned Mode:
2;
};
#pragma pack(1)
struct AC3HDR
{
unsigned Sync1:
8;
unsigned Sync2:
8;
unsigned CRC1:
8;
unsigned CRC2:
8;
unsigned FrameSizeIndex:
6;
unsigned SampleRateIndex:
2;
};
#pragma pack()
uchar *esdatalast;
uchar *esdata;
int essize;
bool data_left;
int FindAudioHeader(uchar *PESData, int PESSize);
bool IsValidAudioHeader(uchar *Data, int *FrameSize);
void Reset();
public:
cMarkAdPES2AudioES();
~cMarkAdPES2AudioES();
int Process(uchar *PESData, int PESSize, uchar **ESData, int *ESSize);
};
#endif
|