@@ -20,122 +20,71 @@ void transcodeVideo( const char* inputfilename, const char* outputFilename )
20
20
{
21
21
using namespace avtranscoder ;
22
22
23
- av_log_set_level ( AV_LOG_FATAL );
24
- // av_log_set_level( AV_LOG_DEBUG );
23
+ // av_log_set_level( AV_LOG_DEBUG );
25
24
26
- InputFile inputFile ( inputfilename );
27
- inputFile .analyse ();
25
+ InputFile input ( inputfilename );
26
+ input .analyse ();
28
27
29
- // init video decoders
30
- InputStreamVideo inputStreamVideo ( inputFile.getStream ( 0 ) );
28
+ input.readStream ( input.getProperties ().videoStreams .at ( 0 ).streamId );
31
29
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 ( inputStreamVideo. getVideoDesc (). getImageDesc ( ) );
35
33
36
- // init video & audio encoders
34
+ // init video encoder
37
35
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
- throw std::runtime_error ( " error during initialising video output stream" );
74
- }
75
-
76
- Image imageToEncode ( sourceImage );
36
+ outputStreamVideo.setProfile ( " xdcamhd422" );
37
+ Image imageToEncode ( outputStreamVideo.getVideoDesc ().getImageDesc () );
38
+
77
39
DataStream codedImage;
78
40
79
-
80
- // OutputStreamAudio osAudioLeft ( ); // "AudioStreamEncoder" / "AudioOutputStream" ?
81
- // OutputStreamAudio osAudioRight( );
82
- // OutputStreamAudio osAudioLfe ( );
83
-
84
41
// setup wrapper
85
- OutputFile of ( outputFilename ); // "Format" ? to keep libav naming
42
+ // mxftkwrapper::MxftkOutputFile of( outputFilename );
43
+ OutputFile of ( outputFilename );
86
44
87
45
88
46
if ( ! of.setup ( ) )
89
47
{
90
- throw std::runtime_error ( " error during setup output file" );
48
+ std::cout << " error during setup output file" << std::endl;
49
+ exit ( -1 );
91
50
}
92
51
93
- of.addVideoStream ( inputFile.getStream ( 0 ).getVideoDesc () );
94
- /* of.addAudioStream();
95
- of.addAudioStream();
96
- of.addAudioStream();
97
- of.addAudioStream();*/
98
-
99
-
100
- /* eVideoLeft = wrapper.createVideoEncoder( );
101
- eVideoRight = wrapper.createVideoEncoder( dVideo );
102
-
103
- eAudioLeft = wrapper.createAudioEncoder( 2 );
104
-
105
-
106
- wrapper.createAudioEncoder( eAudioLeft, 2 );*/
107
-
108
- // AudioFrameDesc audioFrameDesc;
109
- // AudioFrame sourceAudio( audioFrameDesc );
110
-
52
+ of.addVideoStream ( outputStreamVideo.getVideoDesc () );
111
53
54
+ of.beginWrap ();
112
55
113
56
ColorTransform ct;
114
57
115
58
116
59
// Encodage/transcodage
117
60
std::cout << " start transcoding" << std::endl;
118
61
119
- size_t frame = 0 ;
62
+ size_t frame = 1 ;
120
63
121
64
while ( inputStreamVideo.readNextFrame ( sourceImage ) )
122
65
{
123
66
std::cout << " \r process frame " << frame << std::flush;
124
-
67
+
125
68
ct.convert ( sourceImage, imageToEncode );
126
69
127
- outputStreamVideo.encodeFrame ( imageToEncode, codedImage );
128
-
129
- of.wrap ( codedImage, 0 );
70
+ if ( outputStreamVideo.encodeFrame ( imageToEncode, codedImage ) )
71
+ of.wrap ( codedImage, 0 );
130
72
131
73
++frame;
132
74
}
75
+
76
+ while ( outputStreamVideo.encodeFrame ( codedImage ) )
77
+ {
78
+ of.wrap ( codedImage, 0 );
79
+ }
80
+
81
+ of.endWrap ();
133
82
std::cout << std::endl;
134
83
}
135
84
136
85
int main ( int argc, char ** argv )
137
86
{
138
- if ( argc != 2 )
87
+ if ( argc != 3 )
139
88
{
140
89
std::cout << " av++ require a media filename" << std::endl;
141
90
return ( -1 );
@@ -145,8 +94,7 @@ int main( int argc, char** argv )
145
94
146
95
try
147
96
{
148
- // example of video Transcoding
149
- transcodeVideo ( argv[1 ], " transcodedVideo.avi" );
97
+ transcodeVideo ( argv[1 ], argv[2 ] );
150
98
}
151
99
catch ( std::exception &e )
152
100
{
0 commit comments