Skip to content

Commit 9a6c425

Browse files
author
Clement Champetier
committed
frame: split Frame in hpp/cpp
Rename copyData to refData. Rename getPtr to getData.
1 parent c2228ef commit 9a6c425

File tree

15 files changed

+135
-85
lines changed

15 files changed

+135
-85
lines changed

app/avPlay/AvReader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ const char* AvReader::readNextFrame()
6262
++_currentFrame;
6363
_inputVideo->decodeNextFrame( *_sourceImage );
6464
_videoTransform.convert( *_sourceImage, *_imageToDisplay );
65-
return (const char*)_imageToDisplay->getPtr();
65+
return (const char*)_imageToDisplay->getData();
6666
}
6767

6868
const char* AvReader::readPrevFrame()

src/AvTranscoder/decoder/AudioDecoder.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ bool AudioDecoder::decodeNextFrame( Frame& frameBuffer )
7676

7777
// @todo manage cases with data of frame not only on data[0] (use _frame.linesize)
7878
unsigned char* const src = _frame->data[0];
79-
unsigned char* dst = audioBuffer.getPtr();
79+
unsigned char* dst = audioBuffer.getData();
8080

8181
av_samples_copy( &dst, &src, 0, 0, _frame->nb_samples, avCodecContext.channels, avCodecContext.sample_fmt );
8282
}
@@ -112,7 +112,7 @@ bool AudioDecoder::decodeNextFrame( Frame& frameBuffer, const size_t subStreamIn
112112

113113
// @todo manage cases with data of frame not only on data[0] (use _frame.linesize)
114114
unsigned char* src = _frame->data[0];
115-
unsigned char* dst = audioBuffer.getPtr();
115+
unsigned char* dst = audioBuffer.getData();
116116

117117
// offset
118118
src += subStreamIndex * bytePerSample;

src/AvTranscoder/decoder/AudioGenerator.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,25 @@ bool AudioGenerator::decodeNextFrame( Frame& frameBuffer )
3232
{
3333
int fillChar = 0;
3434

35+
// input of convert
3536
AudioFrame intermediateBuffer( _frameDesc );
36-
intermediateBuffer.resize( _frameDesc.getDataSize() );
37-
memset( intermediateBuffer.getPtr(), fillChar, _frameDesc.getDataSize() );
38-
39-
AudioTransform audioTransform;
40-
audioTransform.convert( intermediateBuffer, frameBuffer );
37+
intermediateBuffer.assign( _frameDesc.getDataSize(), fillChar );
4138

39+
// output of convert
4240
AudioFrame& audioBuffer = static_cast<AudioFrame&>( frameBuffer );
4341
audioBuffer.setNbSamples( 1.0 * _frameDesc.getSampleRate() / _frameDesc.getFps() );
4442
_silent = new AudioFrame( audioBuffer.desc() );
45-
_silent->copyData( audioBuffer.getPtr(), audioBuffer.getSize() );
43+
44+
// convert and store the silence
45+
AudioTransform audioTransform;
46+
audioTransform.convert( intermediateBuffer, *_silent );
4647
}
47-
frameBuffer = *_silent;
48+
frameBuffer.refData( *_silent );
4849
}
4950
// Take audio frame from _inputFrame
5051
else
5152
{
52-
frameBuffer.copyData( _inputFrame->getPtr(), _inputFrame->getSize() );
53+
frameBuffer.refData( _inputFrame->getData(), _inputFrame->getSize() );
5354
}
5455
return true;
5556
}

src/AvTranscoder/decoder/VideoDecoder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ bool VideoDecoder::decodeNextFrame( Frame& frameBuffer )
6969
imageBuffer.resize( decodedSize );
7070

7171
// Copy pixel data from an AVPicture into one contiguous buffer.
72-
avpicture_layout( (AVPicture*)_frame, (AVPixelFormat)_frame->format, _frame->width, _frame->height, imageBuffer.getPtr(), frameBuffer.getSize() );
72+
avpicture_layout( (AVPicture*)_frame, (AVPixelFormat)_frame->format, _frame->width, _frame->height, imageBuffer.getData(), frameBuffer.getSize() );
7373

7474
return true;
7575
}

src/AvTranscoder/decoder/VideoGenerator.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,26 +33,27 @@ bool VideoGenerator::decodeNextFrame( Frame& frameBuffer )
3333
// @todo support PAL (0 to 255) and NTFS (16 to 235)
3434
char fillChar = 0;
3535

36+
// input of convert
3637
VideoFrameDesc desc( _frameDesc );
3738
desc.setPixelFormat( "rgb24" );
3839

3940
VideoFrame intermediateBuffer( desc );
40-
intermediateBuffer.resize( _frameDesc.getDataSize() );
41-
memset( intermediateBuffer.getPtr(), fillChar, _frameDesc.getDataSize() );
42-
43-
VideoTransform videoTransform;
44-
videoTransform.convert( intermediateBuffer, frameBuffer );
41+
intermediateBuffer.assign( _frameDesc.getDataSize(), fillChar );
4542

43+
// output of convert
4644
VideoFrame& imageBuffer = static_cast<VideoFrame&>( frameBuffer );
4745
_blackImage = new VideoFrame( imageBuffer.desc() );
48-
_blackImage->copyData( imageBuffer.getPtr(), imageBuffer.getSize() );
46+
47+
// convert and store the black image
48+
VideoTransform videoTransform;
49+
videoTransform.convert( intermediateBuffer, *_blackImage );
4950
}
50-
frameBuffer = *_blackImage;
51+
frameBuffer.refData( *_blackImage );
5152
}
5253
// Take image from _inputFrame
5354
else
5455
{
55-
frameBuffer.copyData( _inputFrame->getPtr(), _inputFrame->getSize() );
56+
frameBuffer.refData( _inputFrame->getData(), _inputFrame->getSize() );
5657
}
5758
return true;
5859
}

src/AvTranscoder/encoder/AudioEncoder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ bool AudioEncoder::encodeFrame( const Frame& sourceFrame, Frame& codedFrame )
5454
throw std::runtime_error( "EncodeFrame error: buffer size < 0 - " + std::string(err) );
5555
}
5656

57-
int retvalue = avcodec_fill_audio_frame( frame, avCodecContext.channels, avCodecContext.sample_fmt, sourceAudioFrame.getPtr(), buffer_size, 0 );
57+
int retvalue = avcodec_fill_audio_frame( frame, avCodecContext.channels, avCodecContext.sample_fmt, sourceAudioFrame.getData(), buffer_size, 0 );
5858
if( retvalue < 0 )
5959
{
6060
char err[AV_ERROR_MAX_STRING_SIZE];

src/AvTranscoder/encoder/VideoEncoder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ bool VideoEncoder::encodeFrame( const Frame& sourceFrame, Frame& codedFrame )
4646
frame->width = avCodecContext.width;
4747
frame->height = avCodecContext.height;
4848
frame->format = avCodecContext.pix_fmt;
49-
avpicture_fill( (AVPicture*)frame, const_cast< unsigned char * >( sourceImageFrame.getPtr() ), avCodecContext.pix_fmt, avCodecContext.width, avCodecContext.height );
49+
avpicture_fill( (AVPicture*)frame, const_cast< unsigned char * >( sourceImageFrame.getData() ), avCodecContext.pix_fmt, avCodecContext.width, avCodecContext.height );
5050

5151
AVPacket& packet = codedFrame.getAVPacket();
5252
packet.stream_index = 0;

src/AvTranscoder/file/OutputFile.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,11 @@ IOutputStream::EWrappingStatus OutputFile::wrap( const CodedData& data, const si
9999
AVPacket packet;
100100
av_init_packet( &packet );
101101

102-
//av_packet_from_data( &packet, (uint8_t*)data.getPtr(), data.getSize() );
102+
//av_packet_from_data( &packet, (uint8_t*)data.getData(), data.getSize() );
103103

104104
packet.stream_index = streamId;
105105

106-
packet.data = (uint8_t*)data.getPtr();
106+
packet.data = (uint8_t*)data.getData();
107107
packet.size = data.getSize();
108108
// packet.dts = _frameCount.at( streamId );
109109
// packet.pts = ;

src/AvTranscoder/frame/AudioFrame.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class AvExport AudioFrame : public Frame
8181
{
8282
public:
8383
AudioFrame( const AudioFrameDesc& ref )
84-
: Frame( ref.getDataSize() )
84+
: Frame( ref.getDataSize(), 0 )
8585
, _audioFrameDesc( ref )
8686
, _nbSamples( 0 )
8787
{}

src/AvTranscoder/frame/Frame.cpp

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#include "Frame.hpp"
2+
3+
namespace avtranscoder
4+
{
5+
6+
Frame::Frame()
7+
{
8+
initAVPacket();
9+
}
10+
11+
Frame::Frame( const size_t dataSize, const int value )
12+
{
13+
av_new_packet( &_packet, dataSize );
14+
assign( dataSize, value );
15+
}
16+
17+
Frame::Frame(AVPacket& avPacket)
18+
{
19+
av_copy_packet( &_packet, &avPacket );
20+
}
21+
22+
Frame::~Frame()
23+
{
24+
av_free_packet( &_packet );
25+
}
26+
27+
void Frame::resize( const size_t newSize )
28+
{
29+
if( (int) newSize < _packet.size )
30+
av_shrink_packet( &_packet, newSize );
31+
else if( (int) newSize > _packet.size )
32+
av_grow_packet( &_packet, newSize );
33+
memset( _packet.data, 0, _packet.size );
34+
}
35+
36+
void Frame::refData( unsigned char* buffer, const size_t size )
37+
{
38+
_packet.data = buffer;
39+
_packet.size = size;
40+
}
41+
42+
void Frame::refData( Frame& frame )
43+
{
44+
_packet.data = frame.getData();
45+
_packet.size = frame.getSize();
46+
}
47+
48+
void Frame::clear()
49+
{
50+
av_free_packet( &_packet );
51+
initAVPacket();
52+
}
53+
54+
void Frame::assign( const size_t size, const int value )
55+
{
56+
resize( size );
57+
memset( _packet.data, value, size );
58+
}
59+
60+
void Frame::initAVPacket()
61+
{
62+
av_init_packet( &_packet );
63+
_packet.data = NULL;
64+
_packet.size = 0;
65+
}
66+
67+
}

src/AvTranscoder/frame/Frame.hpp

Lines changed: 35 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -13,68 +13,49 @@ namespace avtranscoder
1313
class AvExport Frame
1414
{
1515
public:
16-
Frame()
17-
{
18-
av_init_packet( &_packet );
19-
_packet.data = NULL;
20-
_packet.size = 0;
21-
}
22-
23-
Frame( const size_t dataSize )
24-
{
25-
av_new_packet( &_packet, dataSize );
26-
}
27-
28-
Frame(AVPacket& avPacket)
29-
{
30-
av_copy_packet( &_packet, &avPacket );
31-
}
32-
33-
~Frame()
34-
{
35-
av_free_packet( &_packet );
36-
}
37-
38-
void resize( const size_t newSize )
39-
{
40-
if( (int) newSize < _packet.size )
41-
av_shrink_packet( &_packet, newSize );
42-
else if( (int) newSize > _packet.size )
43-
av_grow_packet( &_packet, newSize );
44-
}
45-
46-
void copyData(unsigned char* buffer, const size_t size)
47-
{
48-
_packet.data = buffer;
49-
_packet.size = size;
50-
}
51-
52-
void clear()
53-
{
54-
av_free_packet( &_packet );
55-
56-
av_init_packet( &_packet );
57-
_packet.data = NULL;
58-
_packet.size = 0;
59-
}
60-
61-
/// Use this function in pyTest to check if we can modify the buffer
62-
void assign( const size_t size, const int value )
63-
{
64-
resize( size );
65-
memset( _packet.data, value, size );
66-
}
16+
/// Create a frame with empty buffer data
17+
Frame();
18+
19+
/// Create a frame with a the given buffer size
20+
Frame( const size_t dataSize, const int value );
21+
22+
/// Create a frame from the given AVPAcket (copy data)
23+
Frame( AVPacket& avPacket );
24+
25+
/// Free buffer of data
26+
~Frame();
27+
28+
/// Resize data buffer
29+
void resize( const size_t newSize );
30+
31+
///@{
32+
/// Ref to external data buffer
33+
void refData( Frame& frame );
34+
void refData( unsigned char* buffer, const size_t size );
35+
///@}
36+
37+
/**
38+
* @brief Resize the buffer with the given size, and copy the given value
39+
* @note Use this function to check if we can modify the buffer
40+
*/
41+
void assign( const size_t size, const int value );
42+
43+
/// Clear existing data and set size to 0
44+
void clear();
6745

6846
AVPacket& getAVPacket() { return _packet; }
69-
unsigned char* getPtr() { return _packet.data; }
47+
unsigned char* getData() { return _packet.data; }
7048
size_t getSize() const { return _packet.size; }
7149

7250
#ifndef SWIG
7351
const AVPacket& getAVPacket() const { return _packet; }
74-
const unsigned char* getPtr() const { return _packet.data; }
52+
const unsigned char* getData() const { return _packet.data; }
7553
#endif
7654

77-
protected:
55+
private:
56+
void initAVPacket();
57+
58+
private:
7859
AVPacket _packet;
7960
};
8061

src/AvTranscoder/frame/VideoFrame.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ class AvExport VideoFrame : public Frame
9090
{
9191
public:
9292
VideoFrame( const VideoFrameDesc& ref )
93-
: Frame( ref.getDataSize() )
93+
: Frame( ref.getDataSize(), 0 )
9494
, _videoFrameDesc( ref )
9595
{}
9696

src/AvTranscoder/stream/InputStream.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ bool InputStream::readNextPacket( CodedData& data )
6868
// if packet is already cached
6969
if( ! _streamCache.empty() )
7070
{
71-
data.copyData( _streamCache.front().getPtr(), _streamCache.front().getSize() );
71+
data.refData( _streamCache.front().getData(), _streamCache.front().getSize() );
7272
_streamCache.pop();
7373
}
7474
// else read next packet

src/AvTranscoder/transform/AudioTransform.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ void AudioTransform::convert( const Frame& srcFrame, Frame& dstFrame )
8484
if( srcFrame.getSize() != _previousProcessedAudioFrameSize )
8585
initFrames( srcFrame, dstFrame );
8686

87-
const unsigned char* srcData = srcFrame.getPtr();
88-
unsigned char* dstData = dstFrame.getPtr();
87+
const unsigned char* srcData = srcFrame.getData();
88+
unsigned char* dstData = dstFrame.getData();
8989

9090
int nbOutputSamplesPerChannel;
9191
#ifdef AV_RESAMPLE_LIBRARY

src/AvTranscoder/transform/VideoTransform.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@ void VideoTransform::convert( const Frame& srcFrame, Frame& dstFrame )
100100
const AVPixelFormat dstPixelFormat = dst.desc().getPixelFormat();
101101

102102
// Fill plane data pointers
103-
av_image_fill_pointers(&_srcData[0], srcPixelFormat, src.desc().getHeight(), (uint8_t*) src.getPtr(), &_srcLineSize[0]);
104-
av_image_fill_pointers(&_dstData[0], dstPixelFormat, dst.desc().getHeight(), (uint8_t*) dst.getPtr(), &_dstLineSize[0]);
103+
av_image_fill_pointers(&_srcData[0], srcPixelFormat, src.desc().getHeight(), (uint8_t*) src.getData(), &_srcLineSize[0]);
104+
av_image_fill_pointers(&_dstData[0], dstPixelFormat, dst.desc().getHeight(), (uint8_t*) dst.getData(), &_dstLineSize[0]);
105105

106106
if( ! _imageConvertContext )
107107
{

0 commit comments

Comments
 (0)