-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFrame.cpp
More file actions
68 lines (60 loc) · 1.03 KB
/
Frame.cpp
File metadata and controls
68 lines (60 loc) · 1.03 KB
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
#include "Frame.h"
Frame::Frame(void)
{
rb=0; mem=0; len=alen=glen=0;
}
Frame::~Frame()
{
free(mem);
}
unsigned char *Frame::GetBuff(int l)
{
if(!mem || l>alen) {
free(mem); mem=0; alen=0;
mem=MALLOC(unsigned char,l+LEN_OFF);
if(mem) alen=l;
}
len=l;
if(!mem) {
isyslog("DVBAPI: ci-frame alloc failed");
return 0;
}
return mem+LEN_OFF;
}
void Frame::Put(void)
{
if(rb && mem) {
*((short *)mem)=len;
rb->Put(mem,len+LEN_OFF);
}
}
unsigned char *Frame::Get(int &l)
{
if(rb) {
int c;
unsigned char *data=rb->Get(c);
if(data) {
if(c>LEN_OFF) {
int s=*((short *)data);
if(c>=s+LEN_OFF) {
l=glen=s;
return data+LEN_OFF;
}
}
// LDUMP(L_GEN_DEBUG,data,c,"internal: ci rb frame sync got=%d avail=%d -",c,rb->Available());
rb->Clear();
}
}
return 0;
}
int Frame::Avail(void)
{
return rb ? rb->Available() : 0;
}
void Frame::Del(void)
{
if(rb && glen) {
rb->Del(glen+LEN_OFF);
glen=0;
}
}