Skip to content

Commit 37e28e3

Browse files
author
Clement Champetier
committed
Merge branch 'dev_refactore_media_properties_v2' of https://github.com/cchampet/avTranscoder into develop
Conflicts: test/pyTest/testProperties.py
2 parents d3fcd7d + 557e087 commit 37e28e3

39 files changed

+1834
-1142
lines changed

app/avMeta/avMeta.cpp

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

@@ -16,7 +16,7 @@ int main( int argc, char** argv )
1616
avtranscoder::NoDisplayProgress p;
1717

1818
avtranscoder::InputFile input( argv[1] );
19-
input.analyse( p, avtranscoder::InputFile::eAnalyseLevelFull );
19+
input.analyse( p, avtranscoder::eAnalyseLevelFirstGop );
2020

2121
// a simply metadata display
2222
std::cout << input;

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: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525
#include <AvTranscoder/codec/AudioCodec.hpp>
2626
#include <AvTranscoder/codec/DataCodec.hpp>
2727

28-
#include <AvTranscoder/mediaProperty/mediaProperty.hpp>
29-
3028
#include <AvTranscoder/codedStream/IOutputStream.hpp>
3129
#include <AvTranscoder/codedStream/AvOutputStream.hpp>
3230

@@ -43,28 +41,19 @@
4341
#include <AvTranscoder/essenceStream/GeneratorVideo.hpp>
4442
#include <AvTranscoder/essenceStream/GeneratorAudio.hpp>
4543

46-
#include <AvTranscoder/file/InputFile.hpp>
47-
#include <AvTranscoder/file/OutputFile.hpp>
48-
4944
#include <AvTranscoder/transcoder/StreamTranscoder.hpp>
5045
#include <AvTranscoder/transcoder/Transcoder.hpp>
5146
%}
5247

53-
namespace std {
48+
namespace std {
5449
%template(IntPair) pair< size_t, size_t >;
55-
%template(VideoVector) vector< avtranscoder::VideoProperties >;
56-
%template(AudioVector) vector< avtranscoder::AudioProperties >;
57-
%template(MetadataPair) pair< string, string >;
58-
%template(MetadatasVector) vector< pair< string, string > >;
59-
%template(GopPair) pair< char, bool >;
60-
%template(GopVector) vector< pair< char, bool > >;
61-
%template(ChannelVector) vector< avtranscoder::Channel >;
6250
%template(ProfileMap) map< string, string >;
6351
%template(ProfilesVector) vector< map< string, string > >;
6452
%template(DataBuffer) std::vector< unsigned char >;
6553
}
6654

6755
%include "AvTranscoder/progress/progress.i"
56+
%include "AvTranscoder/mediaProperty/mediaProperty.i"
6857

6958
%include <AvTranscoder/ProfileLoader.hpp>
7059

@@ -78,8 +67,6 @@ namespace std {
7867
%include <AvTranscoder/codec/AudioCodec.hpp>
7968
%include <AvTranscoder/codec/DataCodec.hpp>
8069

81-
%include <AvTranscoder/mediaProperty/mediaProperty.hpp>
82-
8370
%include <AvTranscoder/codedStream/IOutputStream.hpp>
8471
%include <AvTranscoder/codedStream/AvOutputStream.hpp>
8572

@@ -96,8 +83,7 @@ namespace std {
9683
%include <AvTranscoder/essenceStream/GeneratorVideo.hpp>
9784
%include <AvTranscoder/essenceStream/GeneratorAudio.hpp>
9885

99-
%include <AvTranscoder/file/InputFile.hpp>
100-
%include <AvTranscoder/file/OutputFile.hpp>
86+
%include "AvTranscoder/file/file.i"
10187

10288
%include <AvTranscoder/transcoder/StreamTranscoder.hpp>
10389
%include <AvTranscoder/transcoder/Transcoder.hpp>

src/AvTranscoder/file/InputFile.cpp

Lines changed: 29 additions & 38 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,44 @@ 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+
VideoProperties properties( _formatContext, streamId, progress, level );
83+
_properties.getVideoProperties().push_back( properties );
9184
break;
9285
}
9386
case AVMEDIA_TYPE_AUDIO:
9487
{
95-
_properties.audioStreams.push_back( audioStreamInfo( _formatContext, streamId ) );
96-
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.audioStreams.back().metadatas );
88+
AudioProperties properties( _formatContext, streamId );
89+
_properties.getAudioProperties().push_back( properties );
9790
break;
9891
}
9992
case AVMEDIA_TYPE_DATA:
10093
{
101-
_properties.dataStreams.push_back( dataStreamInfo( _formatContext, streamId ) );
102-
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.dataStreams.back().metadatas );
94+
DataProperties properties( _formatContext, streamId );
95+
_properties.getDataProperties().push_back( properties );
10396
break;
10497
}
10598
case AVMEDIA_TYPE_SUBTITLE:
10699
{
107-
_properties.subtitleStreams.push_back( subtitleStreamInfo( _formatContext, streamId ) );
108-
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.subtitleStreams.back().metadatas );
100+
SubtitleProperties properties( _formatContext, streamId );
101+
_properties.getSubtitleProperties().push_back( properties );
109102
break;
110103
}
111104
case AVMEDIA_TYPE_ATTACHMENT:
112105
{
113-
_properties.attachementStreams.push_back( attachementStreamInfo( _formatContext, streamId ) );
114-
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.attachementStreams.back().metadatas );
106+
AttachementProperties properties( _formatContext, streamId );
107+
_properties.getAttachementProperties().push_back( properties );
115108
break;
116109
}
117110
case AVMEDIA_TYPE_UNKNOWN:
118111
{
119-
_properties.unknownStreams.push_back( unknownStreamInfo( _formatContext, streamId ) );
120-
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.unknownStreams.back().metadatas );
112+
UnknownProperties properties( _formatContext, streamId );
113+
_properties.getUnknownPropertiesProperties().push_back( properties );
121114
break;
122115
}
123116
case AVMEDIA_TYPE_NB:
@@ -132,13 +125,11 @@ InputFile& InputFile::analyse( IProgress& progress, const EAnalyseLevel level )
132125
return *this;
133126
}
134127

135-
Properties InputFile::analyseFile( const std::string& filename, IProgress& progress, const EAnalyseLevel level )
128+
FileProperties InputFile::analyseFile( const std::string& filename, IProgress& progress, const EAnalyseLevel level )
136129
{
137130
InputFile file( filename );
138131
file.analyse( progress, level );
139-
Properties properties;
140-
file.getProperties( properties );
141-
return properties;
132+
return file.getProperties();
142133
}
143134

144135
AVMediaType InputFile::getStreamType( size_t index )
@@ -229,9 +220,9 @@ void InputFile::setProfile( const ProfileLoader::Profile& profile )
229220
}
230221
catch( std::exception& e )
231222
{
232-
std::cout << "[InputFile] warning - can't set option " << (*it).first << " to " << (*it).second << ": " << e.what() << std::endl;
223+
std::cout << "[InputFile] warning: " << e.what() << std::endl;
233224
}
234225
}
235226
}
236227

237-
}
228+
}

src/AvTranscoder/file/InputFile.hpp

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33

44
#include <AvTranscoder/common.hpp>
55

6+
#include <AvTranscoder/file/util.hpp>
7+
68
#include <AvTranscoder/codec/AudioCodec.hpp>
79
#include <AvTranscoder/codec/VideoCodec.hpp>
810

911
#include <AvTranscoder/codedStream/AvInputStream.hpp>
1012

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

1315
#include <AvTranscoder/progress/IProgress.hpp>
1416

@@ -34,12 +36,6 @@ class AvExport InputFile
3436

3537
virtual ~InputFile();
3638

37-
enum EAnalyseLevel
38-
{
39-
eAnalyseLevelFast = 0,
40-
eAnalyseLevelFull = 0,
41-
};
42-
4339
/**
4440
* @return Return the resource to access
4541
**/
@@ -50,24 +46,24 @@ class AvExport InputFile
5046
* call this function before getProperties().
5147
* @param progress callback to get analysis progression
5248
**/
53-
InputFile& analyse( IProgress& progress, const EAnalyseLevel level = eAnalyseLevelFull );
49+
InputFile& analyse( IProgress& progress, const EAnalyseLevel level = eAnalyseLevelFirstGop );
5450

5551
/**
5652
* @brief Return media properties on the current InputFile.
5753
* @note require to launch analyse() before to fill the property struture
5854
* @return structure of media metadatas
5955
**/
60-
const Properties& getProperties() const { return _properties; }
56+
const FileProperties& getProperties() const { return _properties; }
6157

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

6460
/**
6561
* @brief Get media file properties using static method.
6662
* @param filename input filename
6763
* @param progress callback to get analysis progression
6864
* @return structure of media metadatas
6965
**/
70-
static Properties analyseFile( const std::string& filename, IProgress& progress, const EAnalyseLevel level = eAnalyseLevelFull );
66+
static FileProperties analyseFile( const std::string& filename, IProgress& progress, const EAnalyseLevel level = eAnalyseLevelFirstGop );
7167

7268
/**
7369
* @brief Get stream type: video, audio, subtitle, etc.
@@ -125,7 +121,7 @@ class AvExport InputFile
125121

126122
protected:
127123
AVFormatContext* _formatContext;
128-
Properties _properties;
124+
FileProperties _properties;
129125
std::string _filename;
130126
std::vector<AvInputStream*> _inputStreams;
131127
};

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>

src/AvTranscoder/file/file.i

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
%{
2+
#include <AvTranscoder/file/util.hpp>
3+
#include <AvTranscoder/file/InputFile.hpp>
4+
#include <AvTranscoder/file/OutputFile.hpp>
5+
%}
6+
7+
%include <AvTranscoder/file/util.hpp>
8+
%include <AvTranscoder/file/InputFile.hpp>
9+
%include <AvTranscoder/file/OutputFile.hpp>

src/AvTranscoder/file/util.hpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#ifndef _AV_TRANSCODER_FILE_UTIL_HPP_
2+
#define _AV_TRANSCODER_FILE_UTIL_HPP_
3+
4+
namespace avtranscoder
5+
{
6+
7+
/**
8+
* @brief Level of file analysis.
9+
*/
10+
enum EAnalyseLevel
11+
{
12+
eAnalyseLevelHeader = 0,
13+
eAnalyseLevelFirstGop = 1,
14+
//eAnalyseLevelFull = 2,
15+
};
16+
17+
}
18+
19+
#endif
20+
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#include "AttachementProperties.hpp"
2+
3+
namespace avtranscoder
4+
{
5+
6+
AttachementProperties::AttachementProperties( const AVFormatContext* formatContext, const size_t index )
7+
: _formatContext( formatContext )
8+
, _streamId( index )
9+
{
10+
if( formatContext )
11+
detail::fillMetadataDictionnary( _formatContext->streams[index]->metadata, _metadatas );
12+
}
13+
14+
MetadatasMap AttachementProperties::getDataMap() const
15+
{
16+
MetadatasMap dataMap;
17+
18+
detail::add( dataMap, "streamId", _streamId );
19+
20+
for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex )
21+
{
22+
detail::add( dataMap, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second );
23+
}
24+
25+
return dataMap;
26+
}
27+
28+
}

0 commit comments

Comments
 (0)