-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFrame.cpp
More file actions
91 lines (71 loc) · 1.71 KB
/
Frame.cpp
File metadata and controls
91 lines (71 loc) · 1.71 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//
// Created by shved@mail.ru on 10.08.2020.
//
#include <QDebug>
#include "Frame.h"
#include "Queue.h"
Frame::Frame(Queue *pool) : mPool(pool) {}
Frame::~Frame() = default;
void Frame::recycle() {
mPool->add(this);
}
Frame::Bytes &Frame::Bytes::operator()(int size) {
if (mCapacity < size) {
mCapacity = size;
delete[] mData;
mData = new unsigned char[size];
}
mLength = size;
return *this;
}
Frame::Bytes::~Bytes() {
delete[] mData;
}
QDataStream &operator>>(QDataStream &stream, Frame::Bytes &bytes) {
stream.readRawData(reinterpret_cast<char *>(bytes.mData), bytes.mLength);
return stream;
}
QDataStream &operator<<(QDataStream &stream, const Frame::Bytes &bytes) {
stream.writeRawData(reinterpret_cast<const char *>(bytes.mData), bytes.mLength);
return stream;
}
QDataStream &operator<<(QDataStream &stream, const Frame &frame) {
switch (frame.mType) {
case Frame::Audio:
stream << frame.mType;
stream << frame.mId;
stream << frame.mBytes.mLength;
stream << frame.mBytes;
break;
}
return stream;
}
void Frame::to(Queue *pool) {
if (pool)
pool->add(this);
else
recycle();
}
Frame::Re::Re(Frame *frame) {
mFrame = frame;
}
Frame::Re::~Re() {
mFrame->recycle();
}
Frame::Refer::Refer(Frame *frame) : mFrame(frame) {}
Frame::Refer::Refer(const Frame::Refer ©) {
mFrame = copy.mFrame;
copy.unref();
}
Frame::Refer::~Refer() {
delete mFrame;
}
void Frame::Refer::unref() const {
mFrame = nullptr;
}
Frame *Frame::Refer::operator->() const {
return mFrame;
}
Frame const &Frame::Refer::operator*() const {
return *mFrame;
}