Skip to content

Refactore media properties #127

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/avMeta/avMeta.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include <AvTranscoder/file/InputFile.hpp>
#include <AvTranscoder/mediaProperty/printMediaProperty.hpp>
#include <AvTranscoder/mediaProperty/print.hpp>

#include <AvTranscoder/progress/NoDisplayProgress.hpp>

Expand Down
2 changes: 1 addition & 1 deletion app/avTranscoder/avTranscoder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ void transcodeVideo( const char* inputfilename, const char* outputFilename )
InputFile input( inputfilename );
input.analyse( p );

input.readStream( input.getProperties().videoStreams.at( 0 ).streamId );
input.readStream( input.getProperties().getVideoProperties().at( 0 ).getStreamId() );

// init video decoders
AvInputVideo inputVideo( input.getStream( 0 ) );
Expand Down
10 changes: 5 additions & 5 deletions app/avplay/AvReader.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include <AvTranscoder/essenceStream/AvInputAudio.hpp>
#include <AvTranscoder/essenceStream/AvInputVideo.hpp>
#include <AvTranscoder/transform/VideoTransform.hpp>
#include <AvTranscoder/mediaProperty/printMediaProperty.hpp>
#include <AvTranscoder/mediaProperty/print.hpp>

#include <AvTranscoder/progress/ConsoleProgress.hpp>

Expand All @@ -23,7 +23,7 @@ class AvReader : public Reader
avtranscoder::ConsoleProgress p;

_inputFile.analyse( p );
_videoStream = _inputFile.getProperties().videoStreams.at(0).streamId;
_videoStream = _inputFile.getProperties().getVideoProperties().at( 0 ).getStreamId();

_inputFile.readStream( _videoStream );

Expand Down Expand Up @@ -58,17 +58,17 @@ class AvReader : public Reader

size_t getWidth()
{
return _inputFile.getProperties().videoStreams.at(0).width;
return _inputFile.getProperties().getVideoProperties().at( 0 ).getWidth();
};

size_t getHeight()
{
return _inputFile.getProperties().videoStreams.at(0).height;
return _inputFile.getProperties().getVideoProperties().at( 0 ).getHeight();
}

size_t getComponents()
{
return _inputFile.getProperties().videoStreams.at(0).componentsCount;
return _inputFile.getProperties().getVideoProperties().at( 0 ).getComponentsCount();
}

size_t getBitDepth()
Expand Down
5 changes: 1 addition & 4 deletions src/AvTranscoder/avTranscoder.i
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@
#include <AvTranscoder/codec/AudioCodec.hpp>
#include <AvTranscoder/codec/DataCodec.hpp>

#include <AvTranscoder/mediaProperty/mediaProperty.hpp>

#include <AvTranscoder/codedStream/IOutputStream.hpp>
#include <AvTranscoder/codedStream/AvOutputStream.hpp>

Expand Down Expand Up @@ -62,6 +60,7 @@ namespace std {
}

%include "AvTranscoder/progress/progress.i"
%include "AvTranscoder/mediaProperty/mediaProperty.i"

%include <AvTranscoder/ProfileLoader.hpp>

Expand All @@ -75,8 +74,6 @@ namespace std {
%include <AvTranscoder/codec/AudioCodec.hpp>
%include <AvTranscoder/codec/DataCodec.hpp>

%include <AvTranscoder/mediaProperty/mediaProperty.hpp>

%include <AvTranscoder/codedStream/IOutputStream.hpp>
%include <AvTranscoder/codedStream/AvOutputStream.hpp>

Expand Down
57 changes: 21 additions & 36 deletions src/AvTranscoder/file/InputFile.cpp
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#include "InputFile.hpp"

#include <AvTranscoder/option/Context.hpp>
#include <AvTranscoder/mediaProperty/VideoStreamProperty.hpp>
#include <AvTranscoder/mediaProperty/AudioStreamProperty.hpp>
#include <AvTranscoder/mediaProperty/DataStreamProperty.hpp>
#include <AvTranscoder/mediaProperty/SubtitleStreamProperty.hpp>
#include <AvTranscoder/mediaProperty/AttachementStreamProperty.hpp>
#include <AvTranscoder/mediaProperty/UnknownStreamProperty.hpp>

#include <AvTranscoder/mediaProperty/util.hpp>
#include <AvTranscoder/mediaProperty/VideoProperties.hpp>
#include <AvTranscoder/mediaProperty/AudioProperties.hpp>
#include <AvTranscoder/mediaProperty/DataProperties.hpp>
#include <AvTranscoder/mediaProperty/SubtitleProperties.hpp>
#include <AvTranscoder/mediaProperty/AttachementProperties.hpp>
#include <AvTranscoder/mediaProperty/UnknownProperties.hpp>

extern "C" {
#include <libavcodec/avcodec.h>
Expand All @@ -24,7 +24,8 @@ namespace avtranscoder

InputFile::InputFile( const std::string& filename )
: _formatContext ( NULL )
, _filename ( filename )
, _properties( NULL )
, _filename( filename )
{
av_register_all();
if( avformat_open_input( &_formatContext, _filename.c_str(), NULL, NULL ) < 0 )
Expand All @@ -42,6 +43,10 @@ InputFile::InputFile( const std::string& filename )
throw std::runtime_error( "unable to find stream informations" );
}

// Initialize FileProperties
_properties = FileProperties( _formatContext );

// Create streams
for( size_t streamIndex = 0; streamIndex < _formatContext->nb_streams; ++streamIndex )
{
_inputStreams.push_back( new AvInputStream( *this, streamIndex ) );
Expand All @@ -68,56 +73,38 @@ InputFile& InputFile::analyse( IProgress& progress, const EAnalyseLevel level )

seekAtFrame( 0 );

_properties.filename = _formatContext->filename;
_properties.formatName = _formatContext->iformat->name;
_properties.formatLongName = _formatContext->iformat->long_name;
_properties.streamsCount = _formatContext->nb_streams;
_properties.programsCount = _formatContext->nb_programs;
_properties.startTime = 1.0 * (unsigned int)_formatContext->start_time / AV_TIME_BASE;
_properties.duration = 1.0 * _formatContext->duration / AV_TIME_BASE;
_properties.bitRate = _formatContext->bit_rate;
_properties.packetSize = _formatContext->packet_size;

detail::fillMetadataDictionnary( _formatContext->metadata, _properties.metadatas );

for( size_t streamId = 0; streamId < _formatContext->nb_streams; streamId++ )
{
switch( _formatContext->streams[streamId]->codec->codec_type )
{
case AVMEDIA_TYPE_VIDEO:
{
_properties.videoStreams.push_back( videoStreamInfo( _formatContext, streamId, progress, level ) );
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.videoStreams.back().metadatas );
_properties.getVideoProperties().push_back( VideoProperties( _formatContext, streamId, progress ) );
break;
}
case AVMEDIA_TYPE_AUDIO:
{
_properties.audioStreams.push_back( audioStreamInfo( _formatContext, streamId ) );
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.audioStreams.back().metadatas );
_properties.getAudioProperties().push_back( AudioProperties( _formatContext, streamId ) );
break;
}
case AVMEDIA_TYPE_DATA:
{
_properties.dataStreams.push_back( dataStreamInfo( _formatContext, streamId ) );
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.dataStreams.back().metadatas );
_properties.getDataProperties().push_back( DataProperties( _formatContext, streamId ) );
break;
}
case AVMEDIA_TYPE_SUBTITLE:
{
_properties.subtitleStreams.push_back( subtitleStreamInfo( _formatContext, streamId ) );
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.subtitleStreams.back().metadatas );
_properties.getSubtitleProperties().push_back( SubtitleProperties( _formatContext, streamId ) );
break;
}
case AVMEDIA_TYPE_ATTACHMENT:
{
_properties.attachementStreams.push_back( attachementStreamInfo( _formatContext, streamId ) );
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.attachementStreams.back().metadatas );
_properties.getAttachementProperties().push_back( AttachementProperties( _formatContext, streamId ) );
break;
}
case AVMEDIA_TYPE_UNKNOWN:
{
_properties.unknownStreams.push_back( unknownStreamInfo( _formatContext, streamId ) );
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.unknownStreams.back().metadatas );
_properties.getUnknownPropertiesProperties().push_back( UnknownProperties( _formatContext, streamId ) );
break;
}
case AVMEDIA_TYPE_NB:
Expand All @@ -132,13 +119,11 @@ InputFile& InputFile::analyse( IProgress& progress, const EAnalyseLevel level )
return *this;
}

Properties InputFile::analyseFile( const std::string& filename, IProgress& progress, const EAnalyseLevel level )
FileProperties InputFile::analyseFile( const std::string& filename, IProgress& progress, const EAnalyseLevel level )
{
InputFile file( filename );
file.analyse( progress, level );
Properties properties;
file.getProperties( properties );
return properties;
return file.getProperties();
}

AVMediaType InputFile::getStreamType( size_t index )
Expand Down
12 changes: 6 additions & 6 deletions src/AvTranscoder/file/InputFile.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

#include <AvTranscoder/codedStream/AvInputStream.hpp>

#include <AvTranscoder/mediaProperty/mediaProperty.hpp>
#include <AvTranscoder/mediaProperty/FileProperties.hpp>

#include <AvTranscoder/progress/IProgress.hpp>

Expand Down Expand Up @@ -37,7 +37,7 @@ class AvExport InputFile
enum EAnalyseLevel
{
eAnalyseLevelFast = 0,
eAnalyseLevelFull = 0,
eAnalyseLevelFull = 1 ///< Analyse first GOP
};

/**
Expand All @@ -57,17 +57,17 @@ class AvExport InputFile
* @note require to launch analyse() before to fill the property struture
* @return structure of media metadatas
**/
const Properties& getProperties() const { return _properties; }
const FileProperties& getProperties() const { return _properties; }

void getProperties( Properties& properties ) const { properties = _properties; }
void getProperties( FileProperties& properties ) const { properties = _properties; }

/**
* @brief Get media file properties using static method.
* @param filename input filename
* @param progress callback to get analysis progression
* @return structure of media metadatas
**/
static Properties analyseFile( const std::string& filename, IProgress& progress, const EAnalyseLevel level = eAnalyseLevelFull );
static FileProperties analyseFile( const std::string& filename, IProgress& progress, const EAnalyseLevel level = eAnalyseLevelFull );

/**
* @brief Get stream type: video, audio, subtitle, etc.
Expand Down Expand Up @@ -125,7 +125,7 @@ class AvExport InputFile

protected:
AVFormatContext* _formatContext;
Properties _properties;
FileProperties _properties;
std::string _filename;
std::vector<AvInputStream*> _inputStreams;
};
Expand Down
2 changes: 1 addition & 1 deletion src/AvTranscoder/file/OutputFile.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

#include <AvTranscoder/common.hpp>

#include <AvTranscoder/mediaProperty/mediaProperty.hpp>
#include <AvTranscoder/mediaProperty/util.hpp>

#include <AvTranscoder/codec/VideoCodec.hpp>
#include <AvTranscoder/codec/AudioCodec.hpp>
Expand Down
31 changes: 31 additions & 0 deletions src/AvTranscoder/mediaProperty/AttachementProperties.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#include "AttachementProperties.hpp"

namespace avtranscoder
{


AttachementProperties::AttachementProperties()
: _formatContext( NULL )
, _streamId( 0 )
{}

AttachementProperties::AttachementProperties( const AVFormatContext* formatContext, const size_t index )
: _formatContext( formatContext )
, _streamId( index )
{}

MetadatasMap AttachementProperties::getDataMap() const
{
MetadatasMap dataMap;

detail::add( dataMap, "streamId", _streamId );

for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex )
{
detail::add( dataMap, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second );
}

return dataMap;
}

}
36 changes: 36 additions & 0 deletions src/AvTranscoder/mediaProperty/AttachementProperties.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#ifndef _AV_TRANSCODER_MEDIA_PROPERTY_ATTACHEMENT_PROPERTIES_HPP
#define _AV_TRANSCODER_MEDIA_PROPERTY_ATTACHEMENT_PROPERTIES_HPP

#include <AvTranscoder/common.hpp>
#include <AvTranscoder/mediaProperty/util.hpp>

extern "C" {
#include <libavformat/avformat.h>
}

namespace avtranscoder
{

class AvExport AttachementProperties
{
public:
AttachementProperties();
AttachementProperties( const AVFormatContext* formatContext, const size_t index );

size_t getStreamId() const { return _streamId; }
MetadatasMap& getMetadatas() { return _metadatas; }

const AVFormatContext& getAVFormatContext() { return *_formatContext; }

MetadatasMap getDataMap() const;

private:
const AVFormatContext* _formatContext; ///< Has link (no ownership)

size_t _streamId;
MetadatasMap _metadatas;
};

}

#endif
18 changes: 0 additions & 18 deletions src/AvTranscoder/mediaProperty/AttachementStreamProperty.hpp

This file was deleted.

Loading