Skip to content

Commit 7cad048

Browse files
Merge pull request #26 from MarcAntoine-Arnaud/master
Update API
2 parents 8ea9d8e + cdfe549 commit 7cad048

36 files changed

+434
-167
lines changed

SConstruct

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,11 @@ resampleLibraryName = 'avresample'
128128
if not conf.CheckLibWithHeader('avutil', 'libavutil/avutil.h', 'c'):
129129
sys.exit( 0 )
130130

131+
if not conf.CheckLibWithHeader('avresample', 'libavresample/avresample.h', 'c'):
132+
if conf.CheckLibWithHeader('swresample', 'libswresample/swresample.h', 'c'):
133+
resampleLibraryFlag = '-DFF_RESAMPLE_LIBRARY'
134+
resampleLibraryName = 'swresample'
135+
131136
if not conf.CheckLibWithHeader('avcodec', 'libavcodec/avcodec.h', 'c'):
132137
sys.exit( 0 )
133138

@@ -137,10 +142,6 @@ if not conf.CheckLibWithHeader('avformat', 'libavformat/avformat.h', 'c'):
137142
if not conf.CheckLibWithHeader('swscale', 'libswscale/swscale.h', 'c'):
138143
sys.exit( 0 )
139144

140-
if not conf.CheckLibWithHeader('avresample', 'libavresample/avresample.h', 'c'):
141-
if conf.CheckLibWithHeader('swresample', 'libswresample/swresample.h', 'c'):
142-
resampleLibraryFlag = '-DFF_RESAMPLE_LIBRARY'
143-
resampleLibraryName = 'swresample'
144145

145146
env.Append(
146147
CXXFLAGS = resampleLibraryFlag

app/genericProcessor/genericProcessor.cpp

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
#include <sstream>
99
#include <cstdlib>
1010

11-
bool verbose = false;
11+
// bool verbose = false;
12+
bool verbose = true;
1213

1314
void parseConfigFile( const std::string& configFilename, avtranscoder::Transcoder& transcoder, avtranscoder::Profile& profile )
1415
{
@@ -26,9 +27,29 @@ void parseConfigFile( const std::string& configFilename, avtranscoder::Transcode
2627
{
2728
std::string transcodeProfile;
2829
std::getline( is_line, transcodeProfile );
30+
31+
std::stringstream ss( streamId );
32+
size_t streamIndex = 0;
33+
char separator;
34+
int subStreamIndex = -1;
35+
ss >> streamIndex;
36+
ss >> separator;
37+
if( separator == '.' )
38+
ss >> subStreamIndex;
39+
2940
if( verbose )
30-
std::cout << filename << " ( " << streamId << " ) : " << transcodeProfile << std::endl;
31-
transcoder.add( filename, atoi( streamId.c_str() ), transcodeProfile );
41+
{
42+
std::cout << ( filename.length() ? filename : "dummy stream" );
43+
std::cout << " ( " << streamIndex;
44+
if( subStreamIndex > -1 )
45+
std::cout << " | " << subStreamIndex << " ";
46+
std::cout << " ) : ";
47+
std::cout << ( transcodeProfile.length() ? transcodeProfile : "rewrap" );
48+
std::cout << std::endl;
49+
}
50+
51+
transcoder.add( filename, streamIndex, subStreamIndex, transcodeProfile );
52+
3253
}
3354
}
3455
}

src/AvTranscoder/CodedStream/AvInputStream.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,16 @@ AvInputStream::AvInputStream( InputFile& inputFile, const size_t streamIndex )
3636
, _streamIndex( streamIndex )
3737
, _bufferized( false )
3838
{
39-
if( _inputFile->getFormatContext().streams[_streamIndex]->codec->codec_type == AVMEDIA_TYPE_AUDIO )
40-
_inputFile->getFormatContext().streams[_streamIndex]->codec->block_align = 5760;
39+
AVCodecContext* context = _inputFile->getFormatContext().streams[_streamIndex]->codec;
40+
if( context->codec_type == AVMEDIA_TYPE_AUDIO )
41+
{
42+
double outputFps = 25;
43+
size_t bytePerSample = av_get_bytes_per_sample( context->sample_fmt );
44+
45+
context->block_align = 1.0 * context->sample_rate * context->channels * bytePerSample / outputFps;
46+
// std::cout << "channels " << context->channel_layout << std::endl;
47+
// std::cout << "audio buffer read size " << context->block_align << std::endl;
48+
}
4149
}
4250

4351
AvInputStream::~AvInputStream( )

src/AvTranscoder/DatasStructures/AudioDesc.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ void AudioDesc::set( const std::string& key, const std::string& value )
188188
std::string AudioDesc::getAudioCodec() const
189189
{
190190
assert( m_codecContext != NULL );
191-
return m_codecContext->codec_name;
191+
return avcodec_descriptor_get( m_codecContext->codec_id )->name;
192192
}
193193

194194
AVCodecID AudioDesc::getAudioCodecId() const
@@ -197,7 +197,6 @@ AVCodecID AudioDesc::getAudioCodecId() const
197197
return m_codecContext->codec_id;
198198
}
199199

200-
201200
const size_t AudioDesc::getSampleRate() const
202201
{
203202
assert( m_codecContext != NULL );
@@ -224,6 +223,7 @@ AudioFrameDesc AudioDesc::getFrameDesc() const
224223
audioFrameDesc.setChannels( m_codecContext->channels );
225224
audioFrameDesc.setSampleRate( m_codecContext->sample_rate );
226225
audioFrameDesc.setSampleFormat( m_codecContext->sample_fmt );
226+
// audioFrameDesc.setFps( 25 );
227227

228228
return audioFrameDesc;
229229
}

src/AvTranscoder/DatasStructures/Frame.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
namespace avtranscoder
1010
{
1111

12-
typedef std::vector< unsigned char> DataBuffer;
12+
typedef std::vector< unsigned char > DataBuffer;
1313

1414
class AvExport Frame
1515
{

src/AvTranscoder/DatasStructures/Pixel.cpp

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ extern "C" {
1414
namespace avtranscoder
1515
{
1616

17-
Pixel::Pixel( const AVPixelFormat avpixelFormat )
17+
Pixel::Pixel( const std::string& avPixelFormat )
18+
{
19+
init( av_get_pix_fmt( avPixelFormat.c_str() ) );
20+
}
21+
22+
Pixel::Pixel( const AVPixelFormat avPixelFormat )
1823
: m_pixelSize ( 24 )
1924
, m_components ( 3 )
2025
, m_componentType ( eComponentYuv )
@@ -23,33 +28,7 @@ Pixel::Pixel( const AVPixelFormat avpixelFormat )
2328
, m_withAlpha ( false )
2429
, m_planar ( true )
2530
{
26-
const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get( avpixelFormat );
27-
setBitsPerPixel ( av_get_bits_per_pixel( pix_desc ) );
28-
setBigEndian ( pix_desc->flags & PIX_FMT_BE );
29-
setComponents ( pix_desc->nb_components );
30-
setAlpha ( pix_desc->flags & PIX_FMT_ALPHA );
31-
setPlanar ( ( pix_desc->flags & PIX_FMT_PLANAR ) != 0 );
32-
33-
if( pix_desc->nb_components == 1 )
34-
setColorComponents( eComponentGray );
35-
36-
if( pix_desc->flags & PIX_FMT_RGB )
37-
setColorComponents( eComponentRgb );
38-
else
39-
setColorComponents( eComponentYuv );
40-
41-
setSubsampling( eSubsamplingNone );
42-
43-
if( ( pix_desc->log2_chroma_w == true ) &&
44-
( pix_desc->log2_chroma_h == false ) )
45-
{
46-
setSubsampling( eSubsampling422 );
47-
}
48-
if( ( pix_desc->log2_chroma_w == true ) &&
49-
( pix_desc->log2_chroma_h == true ) )
50-
{
51-
setSubsampling( eSubsampling420 );
52-
}
31+
init( avPixelFormat );
5332
}
5433

5534
AVPixelFormat Pixel::findPixel() const
@@ -85,6 +64,37 @@ AVPixelFormat Pixel::findPixel() const
8564
return AV_PIX_FMT_NONE;
8665
}
8766

67+
void Pixel::init( const AVPixelFormat avPixelFormat )
68+
{
69+
const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get( avPixelFormat );
70+
setBitsPerPixel ( av_get_bits_per_pixel( pix_desc ) );
71+
setBigEndian ( pix_desc->flags & PIX_FMT_BE );
72+
setComponents ( pix_desc->nb_components );
73+
setAlpha ( pix_desc->flags & PIX_FMT_ALPHA );
74+
setPlanar ( ( pix_desc->flags & PIX_FMT_PLANAR ) != 0 );
75+
76+
if( pix_desc->nb_components == 1 )
77+
setColorComponents( eComponentGray );
78+
79+
if( pix_desc->flags & PIX_FMT_RGB )
80+
setColorComponents( eComponentRgb );
81+
else
82+
setColorComponents( eComponentYuv );
83+
84+
setSubsampling( eSubsamplingNone );
85+
86+
if( ( pix_desc->log2_chroma_w == true ) &&
87+
( pix_desc->log2_chroma_h == false ) )
88+
{
89+
setSubsampling( eSubsampling422 );
90+
}
91+
if( ( pix_desc->log2_chroma_w == true ) &&
92+
( pix_desc->log2_chroma_h == true ) )
93+
{
94+
setSubsampling( eSubsampling420 );
95+
}
96+
}
97+
8898
bool Pixel::asCorrectColorComponents( const AVPixFmtDescriptor* pix_desc, const EComponentType componentType ) const
8999
{
90100
if( componentType == eComponentRgb && pix_desc->flags & PIX_FMT_RGB )

src/AvTranscoder/DatasStructures/Pixel.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ class Pixel
4444
, m_planar ( true )
4545
{ }
4646

47-
Pixel( const AVPixelFormat avpixelFormat );
47+
Pixel( const std::string& avPixelFormat );
48+
49+
Pixel( const AVPixelFormat avPixelFormat );
4850

4951
void setBitsPerPixel ( const size_t pixelSize ) { m_pixelSize = pixelSize; }
5052
void setBigEndian ( const bool endianess ) { m_endianess = endianess; }
@@ -65,6 +67,8 @@ class Pixel
6567
AVPixelFormat findPixel() const;
6668

6769
private:
70+
void init( const AVPixelFormat avPixelFormat );
71+
6872
bool asCorrectColorComponents( const AVPixFmtDescriptor* pix_desc, const EComponentType componentType ) const;
6973
bool asCorrectSubsampling( const AVPixFmtDescriptor* pix_desc, const ESubsamplingType subsamplingType ) const;
7074

src/AvTranscoder/DatasStructures/VideoDesc.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ void VideoDesc::setTimeBase( const size_t num, const size_t den, const size_t ti
7878
std::string VideoDesc::getVideoCodec() const
7979
{
8080
assert( m_codecContext != NULL );
81-
return m_codecContext->codec_name;
81+
return avcodec_descriptor_get( m_codecContext->codec_id )->name;
8282
}
8383

8484
AVCodecID VideoDesc::getVideoCodecId() const

src/AvTranscoder/EssenceStream/DummyAudio.cpp

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ DummyAudio::~DummyAudio( )
1515
{
1616
}
1717

18-
void DummyAudio::setAudioDesc( AudioDesc& audioDesc )
18+
void DummyAudio::setAudioDesc( const AudioDesc& audioDesc )
1919
{
2020
_audioDesc = audioDesc;
21+
2122
_frameDesc.setSampleRate ( _audioDesc.getCodecContext()->sample_rate );
2223
_frameDesc.setChannels ( _audioDesc.getCodecContext()->channels );
2324
_frameDesc.setFps ( 25.0 );
@@ -47,28 +48,9 @@ bool DummyAudio::readNextFrame( Frame& frameBuffer )
4748
return true;
4849
}
4950

50-
bool DummyAudio::readNextFrame( std::vector<Frame>& frameBuffer )
51+
bool DummyAudio::readNextFrame( Frame& frameBuffer, const size_t subStreamIndex )
5152
{
52-
if( frameBuffer.size() != _frameDesc.getChannels() )
53-
{
54-
frameBuffer.resize( _frameDesc.getChannels() );
55-
}
56-
57-
size_t dataSizeOneChannel = _frameDesc.getDataSize() / _frameDesc.getChannels();
58-
int fill_char = (
59-
_frameDesc.getSampleFormat() == AV_SAMPLE_FMT_U8 ||
60-
_frameDesc.getSampleFormat() == AV_SAMPLE_FMT_U8P
61-
) ? 0x80 : 0x00;
62-
63-
for( size_t channel = 0; channel < _frameDesc.getChannels(); ++channel )
64-
{
65-
AudioFrame& audioFrameBuffer = static_cast<AudioFrame&>( frameBuffer.at( channel ) );
66-
audioFrameBuffer.setNbSamples( 1.0 * _frameDesc.getSampleRate() / _frameDesc.getFps() );
67-
frameBuffer.at( channel).getBuffer().resize( dataSizeOneChannel );
68-
memset( frameBuffer.at( channel).getPtr(), fill_char, frameBuffer.at( channel).getSize() );
69-
}
70-
71-
return true;
53+
return false;
7254
}
7355

7456
}

src/AvTranscoder/EssenceStream/DummyAudio.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@ class AvExport DummyAudio : public InputEssence
1717
~DummyAudio( );
1818

1919
// Stream properties
20-
void setAudioDesc( AudioDesc& audioDesc );
20+
void setAudioDesc( const AudioDesc& audioDesc );
2121

2222
AudioDesc getAudioDesc() const;
2323

2424
void setup() {}
2525

2626
bool readNextFrame( Frame& frameBuffer );
27-
bool readNextFrame( std::vector<Frame>& frameBuffer );
27+
bool readNextFrame( Frame& frameBuffer, const size_t subStreamIndex );
2828

2929
private:
30-
AudioDesc _audioDesc;
30+
AudioDesc _audioDesc;
3131
AudioFrameDesc _frameDesc;
3232
};
3333

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy