Skip to content

Commit da3d155

Browse files
Merge pull request #50 from cchampet/dev_MediaMetadataStructures_getDataMap
MediaMetadataStructures: add getDataMap
2 parents 981c70a + e351816 commit da3d155

File tree

8 files changed

+346
-120
lines changed

8 files changed

+346
-120
lines changed

app/avInfo/avInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ int main( int argc, char** argv )
1313
std::cout << std::left;
1414
std::cout << std::setw( 15 ) << (*library).getName();
1515
std::cout << std::setw( 10 ) << (*library).getStringVersion();
16-
std::cout << std::setw( 30 ) << (*library).getLicence();
16+
std::cout << std::setw( 30 ) << (*library).getLicense();
1717
std::cout << std::endl;
1818
}
1919

app/avMeta/avMeta.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ int main( int argc, char** argv )
1717
input.analyse( p, avtranscoder::InputFile::eAnalyseLevelFull );
1818

1919
// a simply metadata display
20-
std::cout << input << std::endl;
20+
std::cout << input;
2121
}

src/AvTranscoder/Description.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ extern "C" {
2222
namespace avtranscoder
2323
{
2424

25-
Library::Library( const std::string& name, const std::string& licence, const size_t major, const size_t minor, const size_t release )
25+
Library::Library( const std::string& name, const std::string& license, const size_t major, const size_t minor, const size_t release )
2626
: _name( name )
27-
, _licence( licence )
27+
, _licence( license )
2828
, _major( major )
2929
, _minor( minor )
3030
, _release( release )
@@ -69,7 +69,7 @@ size_t Library::getReleaseVersion()
6969
return _release;
7070
}
7171

72-
std::string Library::getLicence()
72+
std::string Library::getLicense()
7373
{
7474
return _licence;
7575
}

src/AvTranscoder/Description.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace avtranscoder
1212
class Library
1313
{
1414
public:
15-
Library( const std::string& name, const std::string& licence, const size_t major, const size_t minor, const size_t release );
15+
Library( const std::string& name, const std::string& license, const size_t major, const size_t minor, const size_t release );
1616

1717
std::string getName();
1818

@@ -22,7 +22,7 @@ class Library
2222
size_t getMinorVersion();
2323
size_t getReleaseVersion();
2424

25-
std::string getLicence();
25+
std::string getLicense();
2626
private:
2727
std::string _name;
2828
std::string _licence;

src/AvTranscoder/File/InputFile.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,7 @@ InputFile& InputFile::analyse( ProgressListener& progress, const EAnalyseLevel l
8080
_properties.bitRate = _formatContext->bit_rate;
8181
_properties.packetSize = _formatContext->packet_size;
8282

83-
AVDictionaryEntry *tag = NULL;
84-
while( ( tag = av_dict_get( _formatContext->metadata, "", tag, AV_DICT_IGNORE_SUFFIX ) ) )
85-
{
86-
_properties.metadatas.push_back( std::pair<std::string, std::string>( tag->key, tag->value ) );
87-
}
83+
detail::fillMetadataDictionnary( _formatContext->metadata, _properties.metadatas );
8884

8985
for( size_t streamId = 0; streamId < _formatContext->nb_streams; streamId++ )
9086
{
@@ -93,31 +89,37 @@ InputFile& InputFile::analyse( ProgressListener& progress, const EAnalyseLevel l
9389
case AVMEDIA_TYPE_VIDEO:
9490
{
9591
_properties.videoStreams.push_back( videoStreamInfo( _formatContext, streamId, progress, level ) );
92+
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.videoStreams.back().metadatas );
9693
break;
9794
}
9895
case AVMEDIA_TYPE_AUDIO:
9996
{
10097
_properties.audioStreams.push_back( audioStreamInfo( _formatContext, streamId ) );
98+
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.audioStreams.back().metadatas );
10199
break;
102100
}
103101
case AVMEDIA_TYPE_DATA:
104102
{
105103
_properties.dataStreams.push_back( dataStreamInfo( _formatContext, streamId ) );
104+
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.dataStreams.back().metadatas );
106105
break;
107106
}
108107
case AVMEDIA_TYPE_SUBTITLE:
109108
{
110109
_properties.subtitleStreams.push_back( subtitleStreamInfo( _formatContext, streamId ) );
110+
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.subtitleStreams.back().metadatas );
111111
break;
112112
}
113113
case AVMEDIA_TYPE_ATTACHMENT:
114114
{
115115
_properties.attachementStreams.push_back( attachementStreamInfo( _formatContext, streamId ) );
116+
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.attachementStreams.back().metadatas );
116117
break;
117118
}
118119
case AVMEDIA_TYPE_UNKNOWN:
119120
{
120121
_properties.unknownStreams.push_back( unknownStreamInfo( _formatContext, streamId ) );
122+
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.unknownStreams.back().metadatas );
121123
break;
122124
}
123125
case AVMEDIA_TYPE_NB:
Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
#include "MediaMetadatasStructures.hpp"
2+
3+
extern "C" {
4+
#ifndef __STDC_CONSTANT_MACROS
5+
#define __STDC_CONSTANT_MACROS
6+
#endif
7+
#include <libavutil/dict.h>
8+
}
9+
10+
#include <sstream>
11+
#include <utility>
12+
13+
namespace avtranscoder
14+
{
15+
16+
namespace detail
17+
{
18+
19+
template<typename T>
20+
void add( MetadatasMap& dataMap, const std::string& key, const T& value )
21+
{
22+
std::stringstream ss;
23+
ss << value;
24+
add( dataMap, key, ss.str() );
25+
}
26+
27+
template<>
28+
void add( MetadatasMap& dataMap, const std::string& key, const std::string& value )
29+
{
30+
dataMap.push_back( std::pair<std::string, std::string>( key, value ) );
31+
}
32+
33+
template<>
34+
void add( MetadatasMap& dataMap, const std::string& key, const bool& value )
35+
{
36+
add( dataMap, key, value ? "True" : "False" );
37+
}
38+
39+
void fillMetadataDictionnary( AVDictionary* avdictionnary, MetadatasMap& metadata )
40+
{
41+
AVDictionaryEntry* tag = NULL;
42+
while( ( tag = av_dict_get( avdictionnary, "", tag, AV_DICT_IGNORE_SUFFIX ) ) )
43+
{
44+
metadata.push_back( std::pair<std::string, std::string>( tag->key, tag->value ) );
45+
}
46+
}
47+
48+
}
49+
50+
MetadatasMap VideoProperties::getDataMap() const
51+
{
52+
MetadatasMap dataMap;
53+
54+
detail::add( dataMap, "stream id", streamId );
55+
detail::add( dataMap, "codec id", codecId );
56+
detail::add( dataMap, "codec name", codecName );
57+
detail::add( dataMap, "codec long name", codecLongName );
58+
detail::add( dataMap, "profile", profile );
59+
detail::add( dataMap, "profile name", profileName );
60+
detail::add( dataMap, "level", level );
61+
detail::add( dataMap, "start timecode", startTimecode );
62+
detail::add( dataMap, "width", width );
63+
detail::add( dataMap, "height", height );
64+
detail::add( dataMap, "pixel aspect ratio", sar.num / sar.den );
65+
detail::add( dataMap, "display aspect ratio", dar.num / dar.den );
66+
detail::add( dataMap, "dtgActiveFormat", dtgActiveFormat );
67+
detail::add( dataMap, "components count", componentsCount );
68+
detail::add( dataMap, "pixel type", pixelName );
69+
detail::add( dataMap, "bit wise acked", bitWisePacked );
70+
detail::add( dataMap, "rgb pixel", rgbPixelData );
71+
detail::add( dataMap, "as alpha", asAlpha );
72+
detail::add( dataMap, "chroma width", chromaWidth );
73+
detail::add( dataMap, "chroma height", chromaHeight );
74+
detail::add( dataMap, "endianess", endianess );
75+
detail::add( dataMap, "color transfert", colorTransfert );
76+
detail::add( dataMap, "colorspace", colorspace );
77+
detail::add( dataMap, "color range", colorRange );
78+
detail::add( dataMap, "color primaries", colorPrimaries );
79+
detail::add( dataMap, "indexed colors", indexedColors );
80+
detail::add( dataMap, "pseudo paletted", pseudoPaletted );
81+
detail::add( dataMap, "chroma sample location", chromaSampleLocation);
82+
detail::add( dataMap, "interlaced ", isInterlaced );
83+
detail::add( dataMap, "top field first", topFieldFirst );
84+
detail::add( dataMap, "field order", fieldOrder);
85+
detail::add( dataMap, "timeBase", timeBase.num / timeBase.den );
86+
detail::add( dataMap, "fps", fps );
87+
detail::add( dataMap, "ticksPerFrame", ticksPerFrame );
88+
detail::add( dataMap, "bit rate", bitRate );
89+
detail::add( dataMap, "max bit rate", maxBitRate );
90+
detail::add( dataMap, "min bit rate", minBitRate );
91+
detail::add( dataMap, "gop size", gopSize );
92+
93+
std::string gop;
94+
for( size_t frameIndex = 0; frameIndex < gopStructure.size(); ++frameIndex )
95+
{
96+
gop += gopStructure.at( frameIndex ).first;
97+
gop += ( gopStructure.at( frameIndex ).second ? "*" : " " );
98+
}
99+
detail::add( dataMap, "gop", gop );
100+
101+
detail::add( dataMap, "has B frames", hasBFrames );
102+
detail::add( dataMap, "references frames", referencesFrames );
103+
104+
for( size_t metadataIndex = 0; metadataIndex < metadatas.size(); ++metadataIndex )
105+
{
106+
detail::add( dataMap, metadatas.at( metadataIndex ).first, metadatas.at( metadataIndex ).second );
107+
}
108+
109+
return dataMap;
110+
}
111+
112+
MetadatasMap AudioProperties::getDataMap() const
113+
{
114+
MetadatasMap dataMap;
115+
116+
detail::add( dataMap, "stream id", streamId );
117+
detail::add( dataMap, "codec id", codecId );
118+
detail::add( dataMap, "codec name", codecName );
119+
detail::add( dataMap, "codec long name", codecLongName );
120+
detail::add( dataMap, "sample format", sampleFormat );
121+
detail::add( dataMap, "sample rate", sampleRate );
122+
detail::add( dataMap, "bit rate", bit_rate );
123+
detail::add( dataMap, "channels", channels );
124+
detail::add( dataMap, "channel layout", channelLayout );
125+
detail::add( dataMap, "channel name", channelName );
126+
detail::add( dataMap, "channel description", channelDescription );
127+
128+
for( size_t metadataIndex = 0; metadataIndex < metadatas.size(); ++metadataIndex )
129+
{
130+
detail::add( dataMap, metadatas.at( metadataIndex ).first, metadatas.at( metadataIndex ).second );
131+
}
132+
133+
return dataMap;
134+
}
135+
136+
MetadatasMap DataProperties::getDataMap() const
137+
{
138+
MetadatasMap dataMap;
139+
140+
detail::add( dataMap, "streamId", streamId );
141+
142+
for( size_t metadataIndex = 0; metadataIndex < metadatas.size(); ++metadataIndex )
143+
{
144+
detail::add( dataMap, metadatas.at( metadataIndex ).first, metadatas.at( metadataIndex ).second );
145+
}
146+
147+
return dataMap;
148+
}
149+
150+
MetadatasMap SubtitleProperties::getDataMap() const
151+
{
152+
MetadatasMap dataMap;
153+
154+
detail::add( dataMap, "streamId", streamId );
155+
156+
for( size_t metadataIndex = 0; metadataIndex < metadatas.size(); ++metadataIndex )
157+
{
158+
detail::add( dataMap, metadatas.at( metadataIndex ).first, metadatas.at( metadataIndex ).second );
159+
}
160+
161+
return dataMap;
162+
}
163+
164+
MetadatasMap AttachementProperties::getDataMap() const
165+
{
166+
MetadatasMap dataMap;
167+
168+
detail::add( dataMap, "streamId", streamId );
169+
170+
for( size_t metadataIndex = 0; metadataIndex < metadatas.size(); ++metadataIndex )
171+
{
172+
detail::add( dataMap, metadatas.at( metadataIndex ).first, metadatas.at( metadataIndex ).second );
173+
}
174+
175+
return dataMap;
176+
}
177+
178+
MetadatasMap UnknownProperties::getDataMap() const
179+
{
180+
MetadatasMap dataMap;
181+
182+
detail::add( dataMap, "streamId", streamId );
183+
184+
for( size_t metadataIndex = 0; metadataIndex < metadatas.size(); ++metadataIndex )
185+
{
186+
detail::add( dataMap, metadatas.at( metadataIndex ).first, metadatas.at( metadataIndex ).second );
187+
}
188+
189+
return dataMap;
190+
}
191+
192+
MetadatasMap Properties::getDataMap() const
193+
{
194+
MetadatasMap dataMap;
195+
196+
detail::add( dataMap, "filename", filename );
197+
detail::add( dataMap, "format name", formatName );
198+
detail::add( dataMap, "format long name", formatLongName );
199+
200+
detail::add( dataMap, "start time", startTime );
201+
detail::add( dataMap, "duration", duration );
202+
detail::add( dataMap, "bitrate", bitRate );
203+
detail::add( dataMap, "number of streams", streamsCount );
204+
detail::add( dataMap, "number of programs", programsCount );
205+
detail::add( dataMap, "number of video streams", videoStreams.size() );
206+
detail::add( dataMap, "number of audio streams", audioStreams.size() );
207+
detail::add( dataMap, "number of data streams", dataStreams.size() );
208+
detail::add( dataMap, "number of subtitle streams", subtitleStreams.size() );
209+
detail::add( dataMap, "number of attachement streams", attachementStreams.size() );
210+
detail::add( dataMap, "number of unknown streams", unknownStreams.size() );
211+
212+
for( size_t metadataIndex = 0; metadataIndex < metadatas.size(); ++metadataIndex )
213+
{
214+
detail::add( dataMap, metadatas.at( metadataIndex ).first, metadatas.at( metadataIndex ).second );
215+
}
216+
217+
return dataMap;
218+
}
219+
220+
}

0 commit comments

Comments
 (0)