-
Notifications
You must be signed in to change notification settings - Fork 50
Expand file tree
/
Copy pathFrame.cpp
More file actions
98 lines (81 loc) · 1.81 KB
/
Copy pathFrame.cpp
File metadata and controls
98 lines (81 loc) · 1.81 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
91
92
93
94
95
96
97
98
#include "Frame.hpp"
#include <cstring>
namespace avtranscoder
{
Frame::Frame()
{
initAVPacket();
}
Frame::Frame( const size_t dataSize )
{
av_new_packet( &_packet, dataSize );
}
Frame::Frame( const AVPacket& avPacket )
{
copyAVPacket( avPacket );
}
Frame::Frame( const Frame& other )
{
copyAVPacket( other.getAVPacket() );
}
Frame& Frame::operator=( const Frame& other )
{
copyAVPacket( other.getAVPacket() );
return *this;
}
Frame::~Frame()
{
av_free_packet( &_packet );
}
void Frame::resize( const size_t newSize )
{
if( (int) newSize < _packet.size )
av_shrink_packet( &_packet, newSize );
else if( (int) newSize > _packet.size )
av_grow_packet( &_packet, newSize - _packet.size );
}
void Frame::refData( unsigned char* buffer, const size_t size )
{
_packet.data = buffer;
_packet.size = size;
}
void Frame::copyData( unsigned char* buffer, const size_t size )
{
resize( size );
if ( size != 0 )
memcpy( _packet.data, buffer, _packet.size );
}
void Frame::refData( Frame& frame )
{
_packet.data = frame.getData();
_packet.size = frame.getSize();
}
void Frame::clear()
{
av_free_packet( &_packet );
initAVPacket();
}
void Frame::assign( const size_t size, const int value )
{
resize( size );
memset( _packet.data, value, size );
}
void Frame::initAVPacket()
{
av_init_packet( &_packet );
_packet.data = NULL;
_packet.size = 0;
}
void Frame::copyAVPacket( const AVPacket& avPacket )
{
#if AVTRANSCODER_FFMPEG_DEPENDENCY && LIBAVCODEC_VERSION_INT > AV_VERSION_INT(55, 56, 108)
av_copy_packet( &_packet, &avPacket );
#elif AVTRANSCODER_FFMPEG_DEPENDENCY && LIBAVCODEC_VERSION_INT > AV_VERSION_INT(54, 56, 0)
av_copy_packet( &_packet, const_cast<AVPacket*>( &avPacket ) );
#else
// we just care about data, not side properties of AVPacket
initAVPacket();
copyData( avPacket.data, avPacket.size );
#endif
}
}