Skip to content

Commit f15f289

Browse files
committed
Merge pull request #1 from MarcAntoine-Arnaud/master
Update fork
2 parents f703b30 + 5f2a237 commit f15f289

20 files changed

+619
-212
lines changed

app/SConscript

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
import platform
23

34
Import( 'AvTranscoder' )
45
Import( 'sAvTranscoder' )
@@ -18,6 +19,7 @@ avinfo = env.Program(
1819
'avformat',
1920
'avcodec',
2021
'swscale',
22+
'swresample',
2123
]
2224
)
2325

@@ -30,6 +32,7 @@ avmeta = env.Program(
3032
'avformat',
3133
'avcodec',
3234
'swscale',
35+
'swresample',
3336
]
3437
)
3538

@@ -42,6 +45,7 @@ avtransform = env.Program(
4245
'avformat',
4346
'avcodec',
4447
'swscale',
48+
'swresample',
4549
]
4650
)
4751

@@ -54,6 +58,7 @@ avprocessor = env.Program(
5458
'avformat',
5559
'avcodec',
5660
'swscale',
61+
'swresample',
5762
],
5863
CXXFLAGS = [
5964
'-std=c++0x'
@@ -69,37 +74,41 @@ audioRewrapper = env.Program(
6974
'avformat',
7075
'avcodec',
7176
'swscale',
77+
'swresample',
78+
'swresample',
7279
]
7380
)
7481

75-
avplayer = env.Program(
76-
'avplayer',
77-
Glob( 'avplay/*.cpp' ),
78-
LIBS = [
79-
sAvTranscoder,
80-
'avutil',
81-
'avformat',
82-
'avcodec',
83-
'swscale',
84-
'GL',
85-
'glut',
86-
]
87-
)
88-
89-
90-
avprofiles = env.Program(
91-
'avprofiles',
92-
Glob( 'presetChecker/*.cpp' ),
93-
LIBS = [
94-
sAvTranscoder,
95-
'avutil',
96-
'avformat',
97-
'avcodec',
98-
'swscale'
99-
],
100-
CXXFLAGS = [
101-
'-std=c++0x'
102-
],
82+
if platform.system() != 'Windows':
83+
avplayer = env.Program(
84+
'avplayer',
85+
Glob( 'avplay/*.cpp' ),
86+
LIBS = [
87+
sAvTranscoder,
88+
'avutil',
89+
'avformat',
90+
'avcodec',
91+
'swscale',
92+
'swresample',
93+
'GL',
94+
'glut',
95+
]
96+
)
97+
98+
avprofiles = env.Program(
99+
'avprofiles',
100+
Glob( 'presetChecker/*.cpp' ),
101+
LIBS = [
102+
sAvTranscoder,
103+
'avutil',
104+
'avformat',
105+
'avcodec',
106+
'swscale',
107+
'swresample',
108+
],
109+
CXXFLAGS = [
110+
'-std=c++0x'
111+
],
103112
)
104113

105114
env.Depends( avmeta, sAvTranscoder )

app/audioRewrapper/audioRewrapper.cpp

Lines changed: 55 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,15 @@
22
#include <iomanip>
33

44
#include <AvTranscoder/InputFile.hpp>
5+
#include <AvTranscoder/OutputFile.hpp>
6+
57
#include <AvTranscoder/AvInputStream.hpp>
68
#include <AvTranscoder/InputStreamAudio.hpp>
9+
#include <AvTranscoder/OutputStreamAudio.hpp>
10+
11+
#include <AvTranscoder/AudioTransform.hpp>
12+
713

8-
#include <AvTranscoder/OutputFile.hpp>
914

1015
void rewrapAudio( const char* inputfilename, const char* outputFilename )
1116
{
@@ -51,35 +56,66 @@ void transcodeAudio( const char* inputfilename, const char* outputFilename )
5156
InputFile inputFile( inputfilename );
5257
inputFile.analyse();
5358

54-
// init audio decoders
55-
InputStreamAudio inputStreamAudio( inputFile.getStream( 0 ) );
56-
5759
OutputFile outputFile( outputFilename );
58-
5960
outputFile.setup();
60-
61-
outputFile.addAudioStream( inputFile.getStream( 0 ).getAudioDesc() );
62-
63-
DataStream data;
64-
65-
// Transcoding
61+
62+
// init audio decoders
63+
InputStreamAudio inputStreamAudio( inputFile.getStream( 0 ) );
64+
inputFile.getStream( 0 ).setBufferred( true );
65+
66+
// init audio encoders
67+
OutputStreamAudio outputStreamAudio;
68+
AudioDesc& audioOutputDesc = outputStreamAudio.getAudioDesc();
69+
audioOutputDesc.setAudioCodec( "pcm_s24le" );
70+
audioOutputDesc.setAudioParameters(
71+
inputFile.getStream( 0 ).getAudioDesc().getSampleRate(),
72+
inputFile.getStream( 0 ).getAudioDesc().getChannels(),
73+
AV_SAMPLE_FMT_S32//,inputFile.getStream( 0 ).getAudioDesc().getSampleFormat()
74+
);
75+
76+
if( ! outputStreamAudio.setup( ) )
77+
{
78+
throw std::runtime_error( "error during initialising audio output stream" );
79+
}
80+
81+
outputFile.addAudioStream( audioOutputDesc );
82+
outputFile.beginWrap();
83+
84+
// init convert
85+
AudioTransform audioTransform;
86+
87+
DataStream codedFrame;
88+
89+
// start transcoding process
6690
std::cout << "start transcoding" << std::endl;
67-
91+
92+
AudioFrame audioFrameSource( inputFile.getStream( 0 ).getAudioDesc().getFrameDesc() );
93+
AudioFrame audioFrameToEncode( audioOutputDesc.getFrameDesc() );
94+
6895
size_t frame = 0;
69-
AudioFrameDesc audioFrameDesc;
70-
71-
AudioFrame audioFrame( audioFrameDesc );
72-
73-
74-
while( inputStreamAudio.readNextFrame( audioFrame ) )
96+
while( inputStreamAudio.readNextFrame( audioFrameSource ) )
7597
{
7698
std::cout << "\rprocess frame " << (int)frame - 1 << std::flush;
7799

78-
// outputFile.wrap( data, 0 );
100+
audioTransform.convert( audioFrameSource, audioFrameToEncode );
101+
102+
outputStreamAudio.encodeFrame( audioFrameToEncode, codedFrame );
103+
104+
outputFile.wrap( codedFrame, 0 );
79105

80106
++frame;
107+
// if you want to stop the transcoding process (after 10s at 48,1 KHz)
108+
// if(frame == 10*48100)
109+
// break;
81110
}
82111
std::cout << std::endl;
112+
113+
outputStreamAudio.encodeFrame( codedFrame );
114+
outputFile.wrap( codedFrame, 0 );
115+
116+
// end of transcoding process
117+
118+
outputFile.endWrap();
83119
}
84120

85121
int main( int argc, char** argv )

app/avTranscoder/avTranscoder.cpp

Lines changed: 36 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -20,70 +20,27 @@ void transcodeVideo( const char* inputfilename, const char* outputFilename )
2020
{
2121
using namespace avtranscoder;
2222

23-
av_log_set_level( AV_LOG_FATAL );
24-
//av_log_set_level( AV_LOG_DEBUG );
23+
// av_log_set_level( AV_LOG_DEBUG );
2524

26-
InputFile inputFile( inputfilename );
27-
inputFile.analyse();
25+
InputFile input( inputfilename );
26+
input.analyse();
2827

29-
// init video decoders
30-
InputStreamVideo inputStreamVideo( inputFile.getStream( 0 ) );
28+
input.readStream( input.getProperties().videoStreams.at( 0 ).streamId );
3129

32-
// init audio decoders
33-
//InputStreamAudio inputStreamAudio( inputFile.getStream( 1 ) );
34-
//InputStreamAudio inputStreamAudioRight( inputFile.getStream( 2 ) );
30+
// init video decoders
31+
InputStreamVideo inputStreamVideo( input.getStream( 0 ) );
32+
Image sourceImage( input.getStream( 0 ).getVideoDesc().getImageDesc() );
3533

36-
// init video & audio encoders
34+
// init video encoder
3735
OutputStreamVideo outputStreamVideo;
38-
39-
VideoDesc& videoDesc = outputStreamVideo.getVideoDesc();
40-
41-
Pixel oPixel;
42-
43-
oPixel.setSubsampling( eSubsampling422 );
44-
oPixel.setBitsPerPixel( 16 );
45-
46-
ImageDesc imageDesc;
47-
imageDesc.setWidth ( inputFile.getProperties().videoStreams.at(0).width );
48-
imageDesc.setHeight( inputFile.getProperties().videoStreams.at(0).height );
49-
imageDesc.setPixel ( oPixel );
50-
51-
Image sourceImage( imageDesc );
52-
53-
videoDesc.setVideoCodec( "mpeg2video" );
54-
videoDesc.set( "b", 5000 );
55-
56-
try
57-
{
58-
videoDesc.set( "unknownParameter", 120000000 );
59-
}
60-
catch( const std::exception& e )
61-
{
62-
std::cout << "[ERROR] " << e.what() << std::endl;
63-
}
64-
65-
videoDesc.setTimeBase( 1, 25 ); // 25 fps
66-
67-
videoDesc.setImageParameters( sourceImage.desc() );
68-
69-
//videoDesc.initCodecContext();
70-
71-
if( !outputStreamVideo.setup( ) )
72-
{
73-
std::cout << "error during initialising video output stream" << std::endl;
74-
exit( -1 );
75-
}
76-
77-
Image imageToEncode( sourceImage );
36+
outputStreamVideo.setProfile( "xdcamhd422" );
37+
Image imageToEncode( outputStreamVideo.getVideoDesc().getImageDesc() );
38+
7839
DataStream codedImage;
7940

80-
81-
// OutputStreamAudio osAudioLeft ( ); // "AudioStreamEncoder" / "AudioOutputStream" ?
82-
// OutputStreamAudio osAudioRight( );
83-
// OutputStreamAudio osAudioLfe ( );
84-
8541
// setup wrapper
86-
OutputFile of( outputFilename ); // "Format" ? to keep libav naming
42+
//mxftkwrapper::MxftkOutputFile of( outputFilename );
43+
OutputFile of( outputFilename );
8744

8845

8946
if( ! of.setup( ) )
@@ -92,61 +49,58 @@ void transcodeVideo( const char* inputfilename, const char* outputFilename )
9249
exit( -1 );
9350
}
9451

95-
of.addVideoStream( inputFile.getStream( 0 ).getVideoDesc() );
96-
/*of.addAudioStream();
97-
of.addAudioStream();
98-
of.addAudioStream();
99-
of.addAudioStream();*/
100-
101-
102-
/*eVideoLeft = wrapper.createVideoEncoder( );
103-
eVideoRight = wrapper.createVideoEncoder( dVideo );
104-
105-
eAudioLeft = wrapper.createAudioEncoder( 2 );
106-
107-
108-
wrapper.createAudioEncoder( eAudioLeft, 2 );*/
109-
110-
// AudioFrameDesc audioFrameDesc;
111-
// AudioFrame sourceAudio( audioFrameDesc );
112-
52+
of.addVideoStream( outputStreamVideo.getVideoDesc() );
11353

54+
of.beginWrap();
11455

11556
ColorTransform ct;
11657

11758

11859
// Encodage/transcodage
11960
std::cout << "start transcoding" << std::endl;
12061

121-
size_t frame = 0;
62+
size_t frame = 1;
12263

12364
while( inputStreamVideo.readNextFrame( sourceImage ) )
12465
{
12566
std::cout << "\rprocess frame " << frame << std::flush;
126-
67+
12768
ct.convert( sourceImage, imageToEncode );
12869

129-
outputStreamVideo.encodeFrame( imageToEncode, codedImage );
130-
131-
of.wrap( codedImage, 0 );
70+
if( outputStreamVideo.encodeFrame( imageToEncode, codedImage ) )
71+
of.wrap( codedImage, 0 );
13272

13373
++frame;
13474
}
75+
76+
while( outputStreamVideo.encodeFrame( codedImage ) )
77+
{
78+
of.wrap( codedImage, 0 );
79+
}
80+
81+
of.endWrap();
13582
std::cout << std::endl;
13683
}
13784

13885
int main( int argc, char** argv )
13986
{
140-
if( argc != 2 )
87+
if( argc != 3 )
14188
{
14289
std::cout << "av++ require a media filename" << std::endl;
14390
return( -1 );
14491
}
14592

14693
std::cout << "start ..." << std::endl;
14794

148-
// example of video Transcoding
149-
transcodeVideo( argv[1], "transcodedVideo.avi" );
95+
try
96+
{
97+
transcodeVideo( argv[1], argv[2] );
98+
}
99+
catch( std::exception &e )
100+
{
101+
std::cout << "[ERROR] " << e.what() << std::endl;
102+
}
103+
150104

151105
std::cout << "end ..." << std::endl;
152106
}

0 commit comments

Comments
 (0)