Skip to content

Commit 1db0890

Browse files
author
Clement Champetier
committed
mediaProperties: use wrapper classes instead of structs of copies
* Remove: * file mediaProperty (hpp/cpp) * files <type>StreamProperties (hpp) * Add: * file <type>Properties (hpp/cpp) * util (hpp/cpp) * Rename: * file printMediaProperty.hpp to print.hpp * struct Properties to class FileProperties
1 parent 6daa64c commit 1db0890

34 files changed

+1371
-973
lines changed

app/avMeta/avMeta.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#include <AvTranscoder/file/InputFile.hpp>
2-
#include <AvTranscoder/mediaProperty/printMediaProperty.hpp>
2+
#include <AvTranscoder/mediaProperty/print.hpp>
33

44
#include <AvTranscoder/progress/NoDisplayProgress.hpp>
55

app/avTranscoder/avTranscoder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ void transcodeVideo( const char* inputfilename, const char* outputFilename )
2828
InputFile input( inputfilename );
2929
input.analyse( p );
3030

31-
input.readStream( input.getProperties().videoStreams.at( 0 ).streamId );
31+
input.readStream( input.getProperties().getVideoProperties().at( 0 ).getStreamId() );
3232

3333
// init video decoders
3434
AvInputVideo inputVideo( input.getStream( 0 ) );

app/avplay/AvReader.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#include <AvTranscoder/essenceStream/AvInputAudio.hpp>
66
#include <AvTranscoder/essenceStream/AvInputVideo.hpp>
77
#include <AvTranscoder/transform/VideoTransform.hpp>
8-
#include <AvTranscoder/mediaProperty/printMediaProperty.hpp>
8+
#include <AvTranscoder/mediaProperty/print.hpp>
99

1010
#include <AvTranscoder/progress/ConsoleProgress.hpp>
1111

@@ -23,7 +23,7 @@ class AvReader : public Reader
2323
avtranscoder::ConsoleProgress p;
2424

2525
_inputFile.analyse( p );
26-
_videoStream = _inputFile.getProperties().videoStreams.at(0).streamId;
26+
_videoStream = _inputFile.getProperties().getVideoProperties().at( 0 ).getStreamId();
2727

2828
_inputFile.readStream( _videoStream );
2929

@@ -58,17 +58,17 @@ class AvReader : public Reader
5858

5959
size_t getWidth()
6060
{
61-
return _inputFile.getProperties().videoStreams.at(0).width;
61+
return _inputFile.getProperties().getVideoProperties().at( 0 ).getWidth();
6262
};
6363

6464
size_t getHeight()
6565
{
66-
return _inputFile.getProperties().videoStreams.at(0).height;
66+
return _inputFile.getProperties().getVideoProperties().at( 0 ).getHeight();
6767
}
6868

6969
size_t getComponents()
7070
{
71-
return _inputFile.getProperties().videoStreams.at(0).componentsCount;
71+
return _inputFile.getProperties().getVideoProperties().at( 0 ).getComponentsCount();
7272
}
7373

7474
size_t getBitDepth()

src/AvTranscoder/avTranscoder.i

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
#include <AvTranscoder/codec/AudioCodec.hpp>
2626
#include <AvTranscoder/codec/DataCodec.hpp>
2727

28-
#include <AvTranscoder/mediaProperty/mediaProperty.hpp>
28+
#include <AvTranscoder/mediaProperty/util.hpp>
29+
#include <AvTranscoder/mediaProperty/FileProperties.hpp>
2930

3031
#include <AvTranscoder/codedStream/IOutputStream.hpp>
3132
#include <AvTranscoder/codedStream/AvOutputStream.hpp>
@@ -46,6 +47,8 @@
4647

4748
#include <AvTranscoder/transcoder/StreamTranscoder.hpp>
4849
#include <AvTranscoder/transcoder/Transcoder.hpp>
50+
51+
using namespace avtranscoder;
4952
%}
5053

5154
namespace std {
@@ -75,7 +78,8 @@ namespace std {
7578
%include <AvTranscoder/codec/AudioCodec.hpp>
7679
%include <AvTranscoder/codec/DataCodec.hpp>
7780

78-
%include <AvTranscoder/mediaProperty/mediaProperty.hpp>
81+
%include <AvTranscoder/mediaProperty/util.hpp>
82+
%include <AvTranscoder/mediaProperty/FileProperties.hpp>
7983

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

src/AvTranscoder/file/InputFile.cpp

Lines changed: 21 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
#include "InputFile.hpp"
22

33
#include <AvTranscoder/option/Context.hpp>
4-
#include <AvTranscoder/mediaProperty/VideoStreamProperty.hpp>
5-
#include <AvTranscoder/mediaProperty/AudioStreamProperty.hpp>
6-
#include <AvTranscoder/mediaProperty/DataStreamProperty.hpp>
7-
#include <AvTranscoder/mediaProperty/SubtitleStreamProperty.hpp>
8-
#include <AvTranscoder/mediaProperty/AttachementStreamProperty.hpp>
9-
#include <AvTranscoder/mediaProperty/UnknownStreamProperty.hpp>
10-
4+
#include <AvTranscoder/mediaProperty/util.hpp>
5+
#include <AvTranscoder/mediaProperty/VideoProperties.hpp>
6+
#include <AvTranscoder/mediaProperty/AudioProperties.hpp>
7+
#include <AvTranscoder/mediaProperty/DataProperties.hpp>
8+
#include <AvTranscoder/mediaProperty/SubtitleProperties.hpp>
9+
#include <AvTranscoder/mediaProperty/AttachementProperties.hpp>
10+
#include <AvTranscoder/mediaProperty/UnknownProperties.hpp>
1111

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

2525
InputFile::InputFile( const std::string& filename )
2626
: _formatContext ( NULL )
27-
, _filename ( filename )
27+
, _properties( NULL )
28+
, _filename( filename )
2829
{
2930
av_register_all();
3031
if( avformat_open_input( &_formatContext, _filename.c_str(), NULL, NULL ) < 0 )
@@ -42,6 +43,10 @@ InputFile::InputFile( const std::string& filename )
4243
throw std::runtime_error( "unable to find stream informations" );
4344
}
4445

46+
// Initialize FileProperties
47+
_properties = FileProperties( _formatContext );
48+
49+
// Create streams
4550
for( size_t streamIndex = 0; streamIndex < _formatContext->nb_streams; ++streamIndex )
4651
{
4752
_inputStreams.push_back( new AvInputStream( *this, streamIndex ) );
@@ -68,56 +73,38 @@ InputFile& InputFile::analyse( IProgress& progress, const EAnalyseLevel level )
6873

6974
seekAtFrame( 0 );
7075

71-
_properties.filename = _formatContext->filename;
72-
_properties.formatName = _formatContext->iformat->name;
73-
_properties.formatLongName = _formatContext->iformat->long_name;
74-
_properties.streamsCount = _formatContext->nb_streams;
75-
_properties.programsCount = _formatContext->nb_programs;
76-
_properties.startTime = 1.0 * (unsigned int)_formatContext->start_time / AV_TIME_BASE;
77-
_properties.duration = 1.0 * _formatContext->duration / AV_TIME_BASE;
78-
_properties.bitRate = _formatContext->bit_rate;
79-
_properties.packetSize = _formatContext->packet_size;
80-
81-
detail::fillMetadataDictionnary( _formatContext->metadata, _properties.metadatas );
82-
8376
for( size_t streamId = 0; streamId < _formatContext->nb_streams; streamId++ )
8477
{
8578
switch( _formatContext->streams[streamId]->codec->codec_type )
8679
{
8780
case AVMEDIA_TYPE_VIDEO:
8881
{
89-
_properties.videoStreams.push_back( videoStreamInfo( _formatContext, streamId, progress, level ) );
90-
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.videoStreams.back().metadatas );
82+
_properties.getVideoProperties().push_back( VideoProperties( _formatContext, streamId, progress ) );
9183
break;
9284
}
9385
case AVMEDIA_TYPE_AUDIO:
9486
{
95-
_properties.audioStreams.push_back( audioStreamInfo( _formatContext, streamId ) );
96-
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.audioStreams.back().metadatas );
87+
_properties.getAudioProperties().push_back( AudioProperties( _formatContext, streamId ) );
9788
break;
9889
}
9990
case AVMEDIA_TYPE_DATA:
10091
{
101-
_properties.dataStreams.push_back( dataStreamInfo( _formatContext, streamId ) );
102-
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.dataStreams.back().metadatas );
92+
_properties.getDataProperties().push_back( DataProperties( _formatContext, streamId ) );
10393
break;
10494
}
10595
case AVMEDIA_TYPE_SUBTITLE:
10696
{
107-
_properties.subtitleStreams.push_back( subtitleStreamInfo( _formatContext, streamId ) );
108-
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.subtitleStreams.back().metadatas );
97+
_properties.getSubtitleProperties().push_back( SubtitleProperties( _formatContext, streamId ) );
10998
break;
11099
}
111100
case AVMEDIA_TYPE_ATTACHMENT:
112101
{
113-
_properties.attachementStreams.push_back( attachementStreamInfo( _formatContext, streamId ) );
114-
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.attachementStreams.back().metadatas );
102+
_properties.getAttachementProperties().push_back( AttachementProperties( _formatContext, streamId ) );
115103
break;
116104
}
117105
case AVMEDIA_TYPE_UNKNOWN:
118106
{
119-
_properties.unknownStreams.push_back( unknownStreamInfo( _formatContext, streamId ) );
120-
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.unknownStreams.back().metadatas );
107+
_properties.getUnknownPropertiesProperties().push_back( UnknownProperties( _formatContext, streamId ) );
121108
break;
122109
}
123110
case AVMEDIA_TYPE_NB:
@@ -132,13 +119,11 @@ InputFile& InputFile::analyse( IProgress& progress, const EAnalyseLevel level )
132119
return *this;
133120
}
134121

135-
Properties InputFile::analyseFile( const std::string& filename, IProgress& progress, const EAnalyseLevel level )
122+
FileProperties InputFile::analyseFile( const std::string& filename, IProgress& progress, const EAnalyseLevel level )
136123
{
137124
InputFile file( filename );
138125
file.analyse( progress, level );
139-
Properties properties;
140-
file.getProperties( properties );
141-
return properties;
126+
return file.getProperties();
142127
}
143128

144129
AVMediaType InputFile::getStreamType( size_t index )

src/AvTranscoder/file/InputFile.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
#include <AvTranscoder/codedStream/AvInputStream.hpp>
1010

11-
#include <AvTranscoder/mediaProperty/mediaProperty.hpp>
11+
#include <AvTranscoder/mediaProperty/FileProperties.hpp>
1212

1313
#include <AvTranscoder/progress/IProgress.hpp>
1414

@@ -37,7 +37,7 @@ class AvExport InputFile
3737
enum EAnalyseLevel
3838
{
3939
eAnalyseLevelFast = 0,
40-
eAnalyseLevelFull = 0,
40+
eAnalyseLevelFull = 1 ///< Analyse first GOP
4141
};
4242

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

62-
void getProperties( Properties& properties ) const { properties = _properties; }
62+
void getProperties( FileProperties& properties ) const { properties = _properties; }
6363

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

7272
/**
7373
* @brief Get stream type: video, audio, subtitle, etc.
@@ -125,7 +125,7 @@ class AvExport InputFile
125125

126126
protected:
127127
AVFormatContext* _formatContext;
128-
Properties _properties;
128+
FileProperties _properties;
129129
std::string _filename;
130130
std::vector<AvInputStream*> _inputStreams;
131131
};

src/AvTranscoder/file/OutputFile.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
#include <AvTranscoder/common.hpp>
55

6-
#include <AvTranscoder/mediaProperty/mediaProperty.hpp>
6+
#include <AvTranscoder/mediaProperty/util.hpp>
77

88
#include <AvTranscoder/codec/VideoCodec.hpp>
99
#include <AvTranscoder/codec/AudioCodec.hpp>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#include "AttachementProperties.hpp"
2+
3+
namespace avtranscoder
4+
{
5+
6+
7+
AttachementProperties::AttachementProperties()
8+
: _formatContext( NULL )
9+
, _streamId( 0 )
10+
{}
11+
12+
AttachementProperties::AttachementProperties( const AVFormatContext* formatContext, const size_t index )
13+
: _formatContext( formatContext )
14+
, _streamId( index )
15+
{}
16+
17+
MetadatasMap AttachementProperties::getDataMap() const
18+
{
19+
MetadatasMap dataMap;
20+
21+
detail::add( dataMap, "streamId", _streamId );
22+
23+
for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex )
24+
{
25+
detail::add( dataMap, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second );
26+
}
27+
28+
return dataMap;
29+
}
30+
31+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#ifndef _AV_TRANSCODER_MEDIA_PROPERTY_ATTACHEMENT_PROPERTIES_HPP
2+
#define _AV_TRANSCODER_MEDIA_PROPERTY_ATTACHEMENT_PROPERTIES_HPP
3+
4+
#include <AvTranscoder/common.hpp>
5+
#include <AvTranscoder/mediaProperty/util.hpp>
6+
7+
extern "C" {
8+
#include <libavformat/avformat.h>
9+
}
10+
11+
namespace avtranscoder
12+
{
13+
14+
class AvExport AttachementProperties
15+
{
16+
public:
17+
AttachementProperties();
18+
AttachementProperties( const AVFormatContext* formatContext, const size_t index );
19+
20+
size_t getStreamId() const { return _streamId; }
21+
MetadatasMap& getMetadatas() { return _metadatas; }
22+
23+
const AVFormatContext& getAVFormatContext() { return *_formatContext; }
24+
25+
MetadatasMap getDataMap() const;
26+
27+
private:
28+
const AVFormatContext* _formatContext; ///< Has link (no ownership)
29+
30+
size_t _streamId;
31+
MetadatasMap _metadatas;
32+
};
33+
34+
}
35+
36+
#endif

src/AvTranscoder/mediaProperty/AttachementStreamProperty.hpp

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)