Skip to content

Commit 7da461e

Browse files
author
Clement Champetier
committed
Frame: override copy constructor in order to copy AVPacket data
Add copyAVPacket private function.
1 parent 3b852a2 commit 7da461e

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

src/AvTranscoder/frame/Frame.cpp

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,12 @@ Frame::Frame( const size_t dataSize )
1515

1616
Frame::Frame(AVPacket& avPacket)
1717
{
18-
#if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(54, 56, 0)
19-
av_copy_packet( &_packet, &avPacket );
20-
#else
21-
// we just care about data, not side properties of AVPacket
22-
initAVPacket();
23-
copyData( avPacket.data, avPacket.size );
24-
#endif
18+
copyAVPacket( avPacket );
19+
}
20+
21+
Frame::Frame( const Frame& other )
22+
{
23+
copyAVPacket( other.getAVPacket() );
2524
}
2625

2726
Frame::~Frame()
@@ -75,4 +74,17 @@ void Frame::initAVPacket()
7574
_packet.size = 0;
7675
}
7776

77+
void Frame::copyAVPacket( const AVPacket& avPacket )
78+
{
79+
#if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(55, 56, 108)
80+
av_copy_packet( &_packet, &avPacket );
81+
#elif LIBAVCODEC_VERSION_INT > AV_VERSION_INT(54, 56, 0)
82+
av_copy_packet( &_packet, const_cast<AVPacket*>( &avPacket ) );
83+
#else
84+
// we just care about data, not side properties of AVPacket
85+
initAVPacket();
86+
copyData( avPacket.data, avPacket.size );
87+
#endif
88+
}
89+
7890
}

src/AvTranscoder/frame/Frame.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ class AvExport Frame
2222
/// Create a frame from the given AVPAcket (copy data of given packet)
2323
Frame( AVPacket& avPacket );
2424

25+
/// Override copy constructor in order to copy AVPacket data
26+
Frame( const Frame& other );
27+
2528
/// Free buffer of data
2629
~Frame();
2730

@@ -57,6 +60,7 @@ class AvExport Frame
5760

5861
private:
5962
void initAVPacket();
63+
void copyAVPacket( const AVPacket& avPacket );
6064

6165
private:
6266
AVPacket _packet;

0 commit comments

Comments
 (0)