Skip to content

Commit bfd52eb

Browse files
author
Clement Champetier
committed
mediaProperties: use wrapper classes instead of structs of copies
* Add files <type>Properties (cpp)
1 parent 304a28b commit bfd52eb

23 files changed

+1281
-884
lines changed

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: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <AvTranscoder/codec/DataCodec.hpp>
2727

2828
#include <AvTranscoder/mediaProperty/mediaProperty.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 {
@@ -76,6 +79,7 @@ namespace std {
7679
%include <AvTranscoder/codec/DataCodec.hpp>
7780

7881
%include <AvTranscoder/mediaProperty/mediaProperty.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: 17 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
#include "InputFile.hpp"
22

33
#include <AvTranscoder/option/Context.hpp>
4+
#include <AvTranscoder/mediaProperty/mediaProperty.hpp>
45
#include <AvTranscoder/mediaProperty/VideoProperties.hpp>
56
#include <AvTranscoder/mediaProperty/AudioProperties.hpp>
67
#include <AvTranscoder/mediaProperty/DataProperties.hpp>
78
#include <AvTranscoder/mediaProperty/SubtitleProperties.hpp>
89
#include <AvTranscoder/mediaProperty/AttachementProperties.hpp>
910
#include <AvTranscoder/mediaProperty/UnknownProperties.hpp>
1011

11-
1212
extern "C" {
1313
#include <libavcodec/avcodec.h>
1414
#include <libavformat/avformat.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 )
@@ -229,9 +214,9 @@ void InputFile::setProfile( const ProfileLoader::Profile& profile )
229214
}
230215
catch( std::exception& e )
231216
{
232-
std::cout << "[InputFile] warning - can't set option " << (*it).first << " to " << (*it).second << ": " << e.what() << std::endl;
217+
std::cout << "[InputFile] warning: " << e.what() << std::endl;
233218
}
234219
}
235220
}
236221

237-
}
222+
}

src/AvTranscoder/file/InputFile.hpp

Lines changed: 5 additions & 5 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

@@ -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
};
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#include "AttachementProperties.hpp"
2+
3+
namespace avtranscoder
4+
{
5+
6+
AttachementProperties::AttachementProperties()
7+
: _formatContext( NULL )
8+
, _streamId( 0 )
9+
{}
10+
11+
AttachementProperties::AttachementProperties( const AVFormatContext* formatContext, const size_t index )
12+
: _formatContext( formatContext )
13+
, _streamId( index )
14+
{}
15+
16+
MetadatasMap AttachementProperties::getDataMap() const
17+
{
18+
MetadatasMap dataMap;
19+
20+
detail::add( dataMap, "streamId", _streamId );
21+
22+
for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex )
23+
{
24+
detail::add( dataMap, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second );
25+
}
26+
27+
return dataMap;
28+
}
29+
30+
}
Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,36 @@
1-
#ifndef _AV_TRANSCODER_ATTACHEMENT_STREAM_PROPERTIES_HPP_
2-
#define _AV_TRANSCODER_ATTACHEMENT_STREAM_PROPERTIES_HPP_
1+
#ifndef _AV_TRANSCODER_MEDIA_PROPERTY_ATTACHEMENT_PROPERTIES_HPP
2+
#define _AV_TRANSCODER_MEDIA_PROPERTY_ATTACHEMENT_PROPERTIES_HPP
33

4-
class AVFormatContext;
4+
#include <AvTranscoder/common.hpp>
5+
#include <AvTranscoder/mediaProperty/mediaProperty.hpp>
6+
7+
extern "C" {
8+
#include <libavformat/avformat.h>
9+
}
510

611
namespace avtranscoder
712
{
813

9-
AttachementProperties attachementStreamInfo( const AVFormatContext* formatContext, const size_t index )
14+
class AvExport AttachementProperties
1015
{
11-
AttachementProperties ap;
12-
ap.streamId = index;
13-
return ap;
14-
}
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+
};
1533

1634
}
1735

18-
#endif
36+
#endif

0 commit comments

Comments
 (0)