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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy