diff --git a/src/AvTranscoder/CodedStructures/AudioDesc.hpp b/src/AvTranscoder/CodedStructures/AudioDesc.hpp index 280bfbdf..2a7c5b74 100644 --- a/src/AvTranscoder/CodedStructures/AudioDesc.hpp +++ b/src/AvTranscoder/CodedStructures/AudioDesc.hpp @@ -1,12 +1,11 @@ #ifndef _AV_TRANSCODER_DATA_AUDIO_DESC_HPP_ #define _AV_TRANSCODER_DATA_AUDIO_DESC_HPP_ -#include - -#include #include - #include "CodedDesc.hpp" +#include + +#include class AVCodec; diff --git a/src/AvTranscoder/CodedStructures/VideoDesc.cpp b/src/AvTranscoder/CodedStructures/VideoDesc.cpp index 1335b9d4..96c83433 100644 --- a/src/AvTranscoder/CodedStructures/VideoDesc.cpp +++ b/src/AvTranscoder/CodedStructures/VideoDesc.cpp @@ -44,9 +44,9 @@ std::pair< size_t, size_t > VideoDesc::getTimeBase() const return timeBase; } -void VideoDesc::setImageParameters( const VideoFrameDesc& VideoFrameDesc ) +void VideoDesc::setImageParameters( const VideoFrameDesc& videoFrameDesc ) { - setImageParameters( VideoFrameDesc.getWidth(), VideoFrameDesc.getHeight(), VideoFrameDesc.getPixelDesc() ); + setImageParameters( videoFrameDesc.getWidth(), videoFrameDesc.getHeight(), videoFrameDesc.getPixelDesc() ); } diff --git a/src/AvTranscoder/CodedStructures/VideoDesc.hpp b/src/AvTranscoder/CodedStructures/VideoDesc.hpp index b50da314..e21fb748 100644 --- a/src/AvTranscoder/CodedStructures/VideoDesc.hpp +++ b/src/AvTranscoder/CodedStructures/VideoDesc.hpp @@ -1,12 +1,11 @@ #ifndef _AV_TRANSCODER_DATA_VIDEO_DESC_HPP_ #define _AV_TRANSCODER_DATA_VIDEO_DESC_HPP_ -#include - -#include #include - #include "CodedDesc.hpp" +#include + +#include class AVCodec; @@ -23,7 +22,7 @@ class AvExport VideoDesc : public CodedDesc VideoFrameDesc getVideoFrameDesc() const; std::pair< size_t, size_t > getTimeBase() const; - void setImageParameters( const VideoFrameDesc& VideoFrameDesc ); + void setImageParameters( const VideoFrameDesc& videoFrameDesc ); void setImageParameters( const size_t width, const size_t height, const Pixel& pixel ); void setImageParameters( const size_t width, const size_t height, const AVPixelFormat& pixel ); diff --git a/src/AvTranscoder/EssenceStream/InputAudio.cpp b/src/AvTranscoder/EssenceStream/InputAudio.cpp index 1343e0b4..0137d369 100644 --- a/src/AvTranscoder/EssenceStream/InputAudio.cpp +++ b/src/AvTranscoder/EssenceStream/InputAudio.cpp @@ -139,19 +139,14 @@ bool InputAudio::readNextFrame( Frame& frameBuffer, const size_t subStreamIndex if( ! getNextFrame() ) return false; - size_t decodedSize = av_samples_get_buffer_size(NULL, 1, - _frame->nb_samples, - _codecContext->sample_fmt, 1); + const int output_nbChannels = 1; + const int output_align = 1; + size_t decodedSize = av_samples_get_buffer_size(NULL, output_nbChannels, _frame->nb_samples, _codecContext->sample_fmt, output_align); size_t nbChannels = _codecContext->channels; size_t bytePerSample = av_get_bytes_per_sample( (AVSampleFormat)_frame->format ); AudioFrame& audioBuffer = static_cast( frameBuffer ); - - // std::cout << "needed size " << audioBuffer.desc().getDataSize() << std::endl; - - // std::cout << _frame->nb_samples * bytePerSample << std::endl; - //audioBuffer.getBuffer().resize( _frame->nb_samples * bytePerSample ); audioBuffer.setNbSamples( _frame->nb_samples ); if( decodedSize ) @@ -159,14 +154,14 @@ bool InputAudio::readNextFrame( Frame& frameBuffer, const size_t subStreamIndex if( audioBuffer.getSize() != decodedSize ) audioBuffer.getBuffer().resize( decodedSize, 0 ); - unsigned char* src = *_frame->data; + // @todo manage cases with data of frame not only on data[0] (use _frame.linesize) + unsigned char* src = _frame->data[0]; unsigned char* dst = audioBuffer.getPtr(); - src += ( nbChannels - 1 ) - ( subStreamIndex * bytePerSample ); - - // std::cout << "frame samples count " << _frame->nb_samples << std::endl; - // std::cout << "frame data size " << audioBuffer.getSize() << std::endl; - + // @todo check little / big endian + // offset for little endian + src += ( nbChannels - 1 - subStreamIndex ) * bytePerSample; + for( int sample = 0; sample < _frame->nb_samples; ++sample ) { // std::cout << "sample " << sample << " ==| "; diff --git a/src/AvTranscoder/EssenceStream/OutputVideo.cpp b/src/AvTranscoder/EssenceStream/OutputVideo.cpp index 80bf4ceb..d440e71d 100644 --- a/src/AvTranscoder/EssenceStream/OutputVideo.cpp +++ b/src/AvTranscoder/EssenceStream/OutputVideo.cpp @@ -181,7 +181,7 @@ bool OutputVideo::encodeFrame( DataStream& codedFrame ) #endif } -void OutputVideo::setProfile( const Profile::ProfileDesc& desc, const avtranscoder::VideoFrameDesc& VideoFrameDesc ) +void OutputVideo::setProfile( const Profile::ProfileDesc& desc, const avtranscoder::VideoFrameDesc& videoFrameDesc ) { if( ! desc.count( Profile::avProfileCodec ) || ! desc.count( Profile::avProfilePixelFormat ) || @@ -195,7 +195,7 @@ void OutputVideo::setProfile( const Profile::ProfileDesc& desc, const avtranscod const size_t frameRate = std::strtoul( desc.find( Profile::avProfileFrameRate )->second.c_str(), NULL, 0 ); _videoDesc.setTimeBase( 1, frameRate ); - _videoDesc.setImageParameters( VideoFrameDesc ); + _videoDesc.setImageParameters( videoFrameDesc ); for( Profile::ProfileDesc::const_iterator it = desc.begin(); it != desc.end(); ++it ) { diff --git a/src/AvTranscoder/EssenceStream/OutputVideo.hpp b/src/AvTranscoder/EssenceStream/OutputVideo.hpp index 5334501b..065e30dc 100644 --- a/src/AvTranscoder/EssenceStream/OutputVideo.hpp +++ b/src/AvTranscoder/EssenceStream/OutputVideo.hpp @@ -31,7 +31,7 @@ class AvExport OutputVideo : public OutputEssence */ bool encodeFrame( DataStream& codedFrame ); - void setProfile( const Profile::ProfileDesc& desc, const avtranscoder::VideoFrameDesc& VideoFrameDesc ); + void setProfile( const Profile::ProfileDesc& desc, const avtranscoder::VideoFrameDesc& videoFrameDesc ); VideoDesc& getVideoDesc() { return _videoDesc; } diff --git a/src/AvTranscoder/EssenceStructures/VideoFrame.hpp b/src/AvTranscoder/EssenceStructures/VideoFrame.hpp index f7e8c2f5..fe0e9bce 100644 --- a/src/AvTranscoder/EssenceStructures/VideoFrame.hpp +++ b/src/AvTranscoder/EssenceStructures/VideoFrame.hpp @@ -33,6 +33,15 @@ namespace avtranscoder class AvExport VideoFrameDesc { public: + VideoFrameDesc() + : m_width( 0 ) + , m_height( 0 ) + , m_displayAspectRatio() + , m_pixel() + , m_interlaced( false ) + , m_topFieldFirst( false ) + {}; + void setWidth ( const size_t width ) { m_width = width; } void setHeight( const size_t height ) { m_height = height; } void setPixel ( const Pixel pixel ) { m_pixel = pixel; } diff --git a/src/AvTranscoder/common.hpp b/src/AvTranscoder/common.hpp index 075234ff..3999e0cf 100644 --- a/src/AvTranscoder/common.hpp +++ b/src/AvTranscoder/common.hpp @@ -55,6 +55,11 @@ namespace avtranscoder struct Ratio { + Ratio() + : num( 0 ) + , den( 0 ) + {} + size_t num; size_t den; };