From b323cc4c1af110d3c29d79ca9dd57d5113c2424c Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Mon, 2 Jun 2014 11:55:21 +0200 Subject: [PATCH 1/2] InputStreamAudio: fix channels error when decode stream * InputStreamAudio: update constructor to indicate number of channels of the CodecContext. * AudioDesc: add getters for channels, sample rate and sample format. --- src/AvTranscoder/DatasStructures/AudioDesc.cpp | 17 +++++++++++++++++ src/AvTranscoder/DatasStructures/AudioDesc.hpp | 4 ++++ src/AvTranscoder/InputStreamAudio.cpp | 2 ++ 3 files changed, 23 insertions(+) diff --git a/src/AvTranscoder/DatasStructures/AudioDesc.cpp b/src/AvTranscoder/DatasStructures/AudioDesc.cpp index 8cc5e63c..139b4673 100644 --- a/src/AvTranscoder/DatasStructures/AudioDesc.cpp +++ b/src/AvTranscoder/DatasStructures/AudioDesc.cpp @@ -193,4 +193,21 @@ AVCodecID AudioDesc::getAudioCodecId() const return m_codecContext->codec_id; } + +const size_t AudioDesc::getSampleRate() const +{ + return m_codecContext->sample_rate; +} + +const size_t AudioDesc::getChannels() const +{ + return m_codecContext->channels; +} + +const AVSampleFormat AudioDesc::getSampleFormat() const +{ + return m_codecContext->sample_fmt; +} + + } diff --git a/src/AvTranscoder/DatasStructures/AudioDesc.hpp b/src/AvTranscoder/DatasStructures/AudioDesc.hpp index 98a04041..d3e960f9 100644 --- a/src/AvTranscoder/DatasStructures/AudioDesc.hpp +++ b/src/AvTranscoder/DatasStructures/AudioDesc.hpp @@ -38,6 +38,10 @@ class AvExport AudioDesc std::string getAudioCodec() const; AVCodecID getAudioCodecId() const; + + const size_t getSampleRate() const; + const size_t getChannels() const; + const AVSampleFormat getSampleFormat() const; #ifndef SWIG AVCodec* getCodec() const { return m_codec; } diff --git a/src/AvTranscoder/InputStreamAudio.cpp b/src/AvTranscoder/InputStreamAudio.cpp index 3e27d4b5..5919a8ce 100644 --- a/src/AvTranscoder/InputStreamAudio.cpp +++ b/src/AvTranscoder/InputStreamAudio.cpp @@ -39,6 +39,8 @@ InputStreamAudio::InputStreamAudio( const InputStream& inputStream ) { throw std::runtime_error( "unable to find context for codec" ); } + + m_codecContext->channels = m_inputStream->getAudioDesc().getChannels(); std::cout << "Audio codec Id : " << m_codecContext->codec_id << std::endl; std::cout << "Audio codec Id : " << m_codec->long_name << std::endl; From 67cddbfc5226dc7ab83dd1039315a8bcaf9648db Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Mon, 2 Jun 2014 11:56:33 +0200 Subject: [PATCH 2/2] AudioDesc: refactoring * SetAudioParameters: use copy instead of reference for AVSampleFormat (enum). --- src/AvTranscoder/DatasStructures/AudioDesc.cpp | 2 +- src/AvTranscoder/DatasStructures/AudioDesc.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AvTranscoder/DatasStructures/AudioDesc.cpp b/src/AvTranscoder/DatasStructures/AudioDesc.cpp index 139b4673..59199ea5 100644 --- a/src/AvTranscoder/DatasStructures/AudioDesc.cpp +++ b/src/AvTranscoder/DatasStructures/AudioDesc.cpp @@ -49,7 +49,7 @@ void AudioDesc::setAudioCodec( const AVCodecID codecId ) initCodecContext(); } -void AudioDesc::setAudioParameters( const size_t sampleRate, const size_t channels, const AVSampleFormat& sampleFormat ) +void AudioDesc::setAudioParameters( const size_t sampleRate, const size_t channels, const AVSampleFormat sampleFormat ) { m_codecContext->sample_rate = sampleRate; m_codecContext->channels = channels; diff --git a/src/AvTranscoder/DatasStructures/AudioDesc.hpp b/src/AvTranscoder/DatasStructures/AudioDesc.hpp index d3e960f9..d06f25cc 100644 --- a/src/AvTranscoder/DatasStructures/AudioDesc.hpp +++ b/src/AvTranscoder/DatasStructures/AudioDesc.hpp @@ -27,7 +27,7 @@ class AvExport AudioDesc void setAudioCodec( const std::string& codecName ); void setAudioCodec( const AVCodecID codecId ); - void setAudioParameters( const size_t sampleRate, const size_t channels, const AVSampleFormat& sampleFormat ); + void setAudioParameters( const size_t sampleRate, const size_t channels, const AVSampleFormat sampleFormat ); void set( const std::string& key, const std::string& flag, const bool enable ); void set( const std::string& key, const bool value );