Skip to content

Commit 153fa06

Browse files
Merge branch 'dev_audioTranscoder' of github.com:MarcAntoine-Arnaud/avTranscoder into dev_audioTranscoder
2 parents 0c12ba6 + 1c558ed commit 153fa06

File tree

5 files changed

+83
-35
lines changed

5 files changed

+83
-35
lines changed

app/audioRewrapper/audioRewrapper.cpp

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
#include <AvTranscoder/OutputFile.hpp>
99

10-
void transcodeAudio( const char* inputfilename, const char* outputFilename )
10+
void rewrapAudio( const char* inputfilename, const char* outputFilename )
1111
{
1212
using namespace avtranscoder;
1313

@@ -19,47 +19,87 @@ void transcodeAudio( const char* inputfilename, const char* outputFilename )
1919

2020

2121
// init audio decoders
22-
//InputStreamAudio inputStreamAudio( inputFile.getStream( 0 ) );
22+
InputStreamAudio inputStreamAudio( inputFile.getStream( 0 ) );
2323

2424
OutputFile outputFile( outputFilename );
2525

2626
outputFile.setup();
2727

2828
outputFile.addAudioStream( inputFile.getStream( 0 ).getAudioDesc() );
2929

30-
AudioFrameDesc audioFrameDesc;
31-
AudioFrame sourceAudio( audioFrameDesc );
32-
3330
DataStreamDesc dataDesc;
3431
DataStream data( dataDesc );
3532

3633
// Encodage/transcodage
37-
std::cout << "start transcoding" << std::endl;
34+
std::cout << "start re-wrapping" << std::endl;
3835

3936
size_t frame = 0;
4037

4138
while( inputFile.getStream( 0 ).readNextPacket( data ) )
4239
{
43-
std::cout << "\rprocess frame " << frame << std::flush;
40+
std::cout << "\rprocess frame " << (int)frame - 1 << std::flush;
4441

4542
outputFile.wrap( data, 0 );
4643

4744
++frame;
4845
}
4946
std::cout << std::endl;
47+
}
48+
49+
void transcodeAudio( const char* inputfilename, const char* outputFilename )
50+
{
51+
using namespace avtranscoder;
52+
53+
av_log_set_level( AV_LOG_FATAL );
54+
av_log_set_level( AV_LOG_DEBUG );
55+
56+
InputFile inputFile( inputfilename );
57+
inputFile.analyse();
58+
59+
// init audio decoders
60+
InputStreamAudio inputStreamAudio( inputFile.getStream( 0 ) );
61+
62+
OutputFile outputFile( outputFilename );
63+
64+
outputFile.setup();
65+
66+
outputFile.addAudioStream( inputFile.getStream( 0 ).getAudioDesc() );
67+
68+
DataStreamDesc dataDesc;
69+
DataStream data( dataDesc );
70+
71+
// Transcoding
72+
std::cout << "start transcoding" << std::endl;
5073

74+
size_t frame = 0;
75+
AudioFrameDesc audioFrameDesc;
76+
77+
AudioFrame audioFrame( audioFrameDesc );
78+
79+
80+
while( inputStreamAudio.readNextFrame( audioFrame ) )
81+
{
82+
std::cout << "\rprocess frame " << (int)frame - 1 << std::flush;
83+
84+
// outputFile.wrap( data, 0 );
85+
86+
++frame;
87+
}
88+
std::cout << std::endl;
5189
}
5290

5391
int main( int argc, char** argv )
5492
{
5593
if( argc <= 2 )
5694
{
5795
std::cout << "audiorewrapper require medias filename" << std::endl;
96+
std::cout << "example: audioWrap inputfile.ext outputfile.ext" << std::endl;
5897
return( -1 );
5998
}
6099

61100
std::cout << "start ..." << std::endl;
62101

102+
rewrapAudio( argv[1], argv[2] );
63103
transcodeAudio( argv[1], argv[2] );
64104

65105
std::cout << "end ..." << std::endl;

app/avTranscoder/avTranscoder.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ void transcodeVideo( const char* inputfilename, const char* outputFilename )
2929
InputStreamVideo inputStreamVideo( inputFile.getStream( 0 ) );
3030

3131
// init audio decoders
32-
InputStreamAudio inputStreamAudio( inputFile.getStream( 1 ) );
32+
//InputStreamAudio inputStreamAudio( inputFile.getStream( 1 ) );
3333
//InputStreamAudio inputStreamAudioRight( inputFile.getStream( 2 ) );
3434

3535
// init video & audio encoders
@@ -79,9 +79,9 @@ void transcodeVideo( const char* inputfilename, const char* outputFilename )
7979
DataStream codedImage( dataStreamDesc );
8080

8181

82-
OutputStreamAudio osAudioLeft ( ); // "AudioStreamEncoder" / "AudioOutputStream" ?
83-
OutputStreamAudio osAudioRight( );
84-
OutputStreamAudio osAudioLfe ( );
82+
// OutputStreamAudio osAudioLeft ( ); // "AudioStreamEncoder" / "AudioOutputStream" ?
83+
// OutputStreamAudio osAudioRight( );
84+
// OutputStreamAudio osAudioLfe ( );
8585

8686
// setup wrapper
8787
OutputFile of( outputFilename ); // "Format" ? to keep libav naming
@@ -108,8 +108,8 @@ void transcodeVideo( const char* inputfilename, const char* outputFilename )
108108
109109
wrapper.createAudioEncoder( eAudioLeft, 2 );*/
110110

111-
AudioFrameDesc audioFrameDesc;
112-
AudioFrame sourceAudio( audioFrameDesc );
111+
// AudioFrameDesc audioFrameDesc;
112+
// AudioFrame sourceAudio( audioFrameDesc );
113113

114114

115115

@@ -121,7 +121,7 @@ void transcodeVideo( const char* inputfilename, const char* outputFilename )
121121

122122
size_t frame = 0;
123123

124-
while( inputStreamVideo.readNextFrame( sourceImage ) && inputStreamAudio.readNextFrame( sourceAudio ) )
124+
while( inputStreamVideo.readNextFrame( sourceImage ) )
125125
{
126126
std::cout << "\rprocess frame " << frame << std::flush;
127127

src/AvTranscoder/InputStreamAudio.cpp

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,11 @@ InputStreamAudio::InputStreamAudio( const InputStream& inputStream )
3838
throw std::runtime_error( "unable to find context for codec" );
3939
}
4040

41-
avcodec_open2( m_codecContext, m_codec, NULL );
42-
if( m_codecContext == NULL || m_codec == NULL )
41+
int ret = avcodec_open2( m_codecContext, m_codec, NULL );
42+
43+
if( ret < 0 || m_codecContext == NULL || m_codec == NULL )
4344
{
44-
throw std::runtime_error( "unable open codec" );
45+
throw std::runtime_error( "unable open audio codec" );
4546
}
4647

4748
#if LIBAVCODEC_VERSION_MAJOR > 54
@@ -66,12 +67,12 @@ InputStreamAudio::~InputStreamAudio()
6667
if( m_frame != NULL )
6768
{
6869
#if LIBAVCODEC_VERSION_MAJOR > 54
69-
av_frame_free( &m_frame );
70+
av_frame_free( &m_frame );
7071
#else
7172
#if LIBAVCODEC_VERSION_MAJOR > 53
72-
avcodec_free_frame( &m_frame );
73+
avcodec_free_frame( &m_frame );
7374
#else
74-
av_free( m_frame );
75+
av_free( m_frame );
7576
#endif
7677
#endif
7778
m_frame = NULL;
@@ -80,7 +81,7 @@ InputStreamAudio::~InputStreamAudio()
8081

8182
bool InputStreamAudio::readNextFrame( AudioFrame& audioFrameBuffer )
8283
{
83-
/* int got_frame = 0;
84+
int got_frame = 0;
8485

8586
while( ! got_frame )
8687
{
@@ -93,18 +94,25 @@ bool InputStreamAudio::readNextFrame( AudioFrame& audioFrameBuffer )
9394
return false;
9495
}
9596

96-
//avcodec_decode_audio2( m_codecContext, m_frame, &got_frame, &packet );
97+
int ret = avcodec_decode_audio4( m_codecContext, m_frame, &got_frame, &packet );
98+
99+
if( ret < 0 )
100+
{
101+
throw std::runtime_error( "an error occured during audio decoding" );
102+
}
97103

98104
av_free_packet( &packet );
99105
}
100106

101-
size_t decodedSize = avpicture_get_size( (AVPixelFormat)m_frame->format, m_frame->width, m_frame->height );
102-
if( frameBuffer.getBuffer().size() != decodedSize )
103-
frameBuffer.getBuffer().resize( avpicture_get_size( (AVPixelFormat)m_frame->format, m_frame->width, m_frame->height ) );
107+
//size_t unpadded_linesize = m_frame->nb_samples * av_get_bytes_per_sample( m_frame->format );
108+
109+
// size_t decodedSize = avpicture_get_size( (AVPixelFormat)m_frame->format, m_frame->width, m_frame->height );
110+
// if( frameBuffer.getBuffer().size() != decodedSize )
111+
// frameBuffer.getBuffer().resize( avpicture_get_size( (AVPixelFormat)m_frame->format, m_frame->width, m_frame->height ) );
112+
113+
// // Copy pixel data from an AVPicture into one contiguous buffer.
114+
// avpicture_layout( (AVPicture*)m_frame, (AVPixelFormat)m_frame->format, m_frame->width, m_frame->height, &frameBuffer.getBuffer()[0], frameBuffer.getBuffer().size() );
104115

105-
// Copy pixel data from an AVPicture into one contiguous buffer.
106-
avpicture_layout( (AVPicture*)m_frame, (AVPixelFormat)m_frame->format, m_frame->width, m_frame->height, &frameBuffer.getBuffer()[0], frameBuffer.getBuffer().size() );
107-
*/
108116
return true;
109117
}
110118

src/AvTranscoder/InputStreamVideo.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,11 @@ InputStreamVideo::InputStreamVideo( const InputStream& inputStream )
4141
// if( codec->capabilities & CODEC_CAP_TRUNCATED )
4242
// codecContext->flags |= CODEC_FLAG_TRUNCATED;
4343

44-
avcodec_open2( m_codecContext, m_codec, NULL );
45-
if( m_codecContext == NULL || m_codec == NULL )
44+
int ret = avcodec_open2( m_codecContext, m_codec, NULL );
45+
46+
if( ret < 0 || m_codecContext == NULL || m_codec == NULL )
4647
{
47-
throw std::runtime_error( "unable open codec" );
48+
throw std::runtime_error( "unable open video codec" );
4849
}
4950

5051
#if LIBAVCODEC_VERSION_MAJOR > 54
@@ -69,12 +70,12 @@ InputStreamVideo::~InputStreamVideo()
6970
if( m_frame != NULL )
7071
{
7172
#if LIBAVCODEC_VERSION_MAJOR > 54
72-
av_frame_free( &m_frame );
73+
av_frame_free( &m_frame );
7374
#else
7475
#if LIBAVCODEC_VERSION_MAJOR > 53
75-
avcodec_free_frame( &m_frame );
76+
avcodec_free_frame( &m_frame );
7677
#else
77-
av_free( m_frame );
78+
av_free( m_frame );
7879
#endif
7980
#endif
8081
m_frame = NULL;

src/AvTranscoder/OutputFile.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ void OutputFile::addAudioStream( const AudioDesc& audioDesc )
9797

9898
stream->codec->sample_rate = audioDesc.getCodecContext()->sample_rate;
9999
stream->codec->channels = audioDesc.getCodecContext()->channels;
100-
stream->codec->bit_rate = audioDesc.getCodecContext()->bit_rate;
101100
stream->codec->sample_fmt = audioDesc.getCodecContext()->sample_fmt;
102101

103102
// to move in endSetup

0 commit comments

Comments
 (0)