diff --git a/src/AvTranscoder/common.hpp b/src/AvTranscoder/common.hpp index 16ebde48..7f8c11f0 100644 --- a/src/AvTranscoder/common.hpp +++ b/src/AvTranscoder/common.hpp @@ -3,7 +3,7 @@ #define AVTRANSCODER_VERSION_MAJOR 0 #define AVTRANSCODER_VERSION_MINOR 9 -#define AVTRANSCODER_VERSION_MICRO 1 +#define AVTRANSCODER_VERSION_MICRO 2 #include diff --git a/src/AvTranscoder/data/decoded/AudioFrame.cpp b/src/AvTranscoder/data/decoded/AudioFrame.cpp index 4da72ccd..00f9aaaf 100644 --- a/src/AvTranscoder/data/decoded/AudioFrame.cpp +++ b/src/AvTranscoder/data/decoded/AudioFrame.cpp @@ -74,9 +74,9 @@ size_t AudioFrame::getSize() const void AudioFrame::allocateAVSample(const AudioFrameDesc& desc) { // Set Frame properties - _frame->sample_rate = desc._sampleRate; - _frame->channels = desc._nbChannels; - _frame->channel_layout = av_get_default_channel_layout(desc._nbChannels); + av_frame_set_sample_rate(_frame, desc._sampleRate); + av_frame_set_channels(_frame, desc._nbChannels); + av_frame_set_channel_layout(_frame, av_get_default_channel_layout(desc._nbChannels)); _frame->format = desc._sampleFormat; _frame->nb_samples = desc._sampleRate / 25.; // cannot be known before calling avcodec_decode_audio4 diff --git a/src/AvTranscoder/decoder/AudioGenerator.cpp b/src/AvTranscoder/decoder/AudioGenerator.cpp index c67831e9..a50611bb 100644 --- a/src/AvTranscoder/decoder/AudioGenerator.cpp +++ b/src/AvTranscoder/decoder/AudioGenerator.cpp @@ -38,6 +38,15 @@ void AudioGenerator::setNextFrame(Frame& inputFrame) bool AudioGenerator::decodeNextFrame(Frame& frameBuffer) { + // Check channel layout of the given frame to be able to copy audio data to it. + // @see Frame.copyData method + if(frameBuffer.getAVFrame().channel_layout == 0) + { + const size_t channelLayout = av_get_default_channel_layout(frameBuffer.getAVFrame().channels); + LOG_WARN("Channel layout en the audio frame is not set. Set it to '" << channelLayout << "' to be able to copy silence data.") + av_frame_set_channel_layout(&frameBuffer.getAVFrame(), channelLayout); + } + // Generate silent if(!_inputFrame) { diff --git a/src/AvTranscoder/properties/util.cpp b/src/AvTranscoder/properties/util.cpp index b236bd6b..d6201b33 100644 --- a/src/AvTranscoder/properties/util.cpp +++ b/src/AvTranscoder/properties/util.cpp @@ -27,7 +27,7 @@ template <> void add(PropertyVector& propertyVector, const std::string& key, const float& value) { std::stringstream ss; - if(value <= AV_NOPTS_VALUE || value >= AV_NOPTS_VALUE) + if(value <= AV_NOPTS_VALUE || value >= -(float)AV_NOPTS_VALUE) ss << "N/A"; else ss << value;