Skip to content

Commit 3a719d0

Browse files
author
Clement Champetier
committed
OutputStreamAudio: overlay encodeFrame
* This new function gets delayed encoded frames. * Rewrapper: call this new function.
1 parent 72fc695 commit 3a719d0

File tree

3 files changed

+44
-2
lines changed

3 files changed

+44
-2
lines changed

app/audioRewrapper/audioRewrapper.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ void transcodeAudio( const char* inputfilename, const char* outputFilename )
100100
}
101101
std::cout << std::endl;
102102

103+
outputStreamAudio.encodeFrame( codedFrame );
104+
103105
outputFile.endWrap();
104106
}
105107

src/AvTranscoder/OutputStreamAudio.cpp

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,12 @@ bool OutputStreamAudio::encodeFrame( const AudioFrame& decodedFrame, DataStream&
101101
memcpy( codedFrame.getPtr(), packet.data, packet.size );
102102
}
103103
#else
104-
// throw...
104+
int ret = avcodec_encode_audio( codecContext, packet.data, packet.size, frame );
105+
if( ret > 0 )
106+
{
107+
codedFrame.getBuffer().resize( packet.size );
108+
memcpy( codedFrame.getPtr(), packet.data, packet.size );
109+
}
105110
#endif
106111

107112
av_free_packet( &packet );
@@ -120,4 +125,39 @@ bool OutputStreamAudio::encodeFrame( const AudioFrame& decodedFrame, DataStream&
120125
return ret == 0;
121126
}
122127

128+
bool OutputStreamAudio::encodeFrame( DataStream& codedFrame )
129+
{
130+
AVCodecContext* codecContext = m_audioDesc.getCodecContext();
131+
132+
AVPacket packet;
133+
av_init_packet( &packet );
134+
135+
packet.size = 0;
136+
packet.data = NULL;
137+
packet.stream_index = 0;
138+
139+
#if LIBAVCODEC_VERSION_MAJOR > 53
140+
int gotPacket = 0;
141+
int ret = avcodec_encode_audio2( codecContext, &packet, NULL, &gotPacket );
142+
if( ret == 0 && gotPacket == 1 )
143+
{
144+
codedFrame.getBuffer().resize( packet.size );
145+
memcpy( codedFrame.getPtr(), packet.data, packet.size );
146+
}
147+
av_free_packet( &packet );
148+
return ret == 0 && gotPacket == 1;
149+
150+
#else
151+
int ret = avcodec_encode_audio( codecContext, packet.data, packet.size, NULL );
152+
if( ret > 0 )
153+
{
154+
codedFrame.getBuffer().resize( packet.size );
155+
memcpy( codedFrame.getPtr(), packet.data, packet.size );
156+
}
157+
av_free_packet( &packet );
158+
return ret == 0;
159+
160+
#endif
161+
}
162+
123163
}

src/AvTranscoder/OutputStreamAudio.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class OutputStreamAudio : public OutputStream
2424
/**
2525
* get delayed encoded frames
2626
*/
27-
//bool encodeFrame( DataStream& codedFrame );
27+
bool encodeFrame( DataStream& codedFrame );
2828

2929
AudioDesc& getAudioDesc() { return m_audioDesc; }
3030

0 commit comments

Comments
 (0)