Skip to content

MediaMetadataStructures: add getDataMap #50

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/avInfo/avInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ int main( int argc, char** argv )
std::cout << std::left;
std::cout << std::setw( 15 ) << (*library).getName();
std::cout << std::setw( 10 ) << (*library).getStringVersion();
std::cout << std::setw( 30 ) << (*library).getLicence();
std::cout << std::setw( 30 ) << (*library).getLicense();
std::cout << std::endl;
}

Expand Down
2 changes: 1 addition & 1 deletion app/avMeta/avMeta.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ int main( int argc, char** argv )
input.analyse( p, avtranscoder::InputFile::eAnalyseLevelFull );

// a simply metadata display
std::cout << input << std::endl;
std::cout << input;
}
6 changes: 3 additions & 3 deletions src/AvTranscoder/Description.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ extern "C" {
namespace avtranscoder
{

Library::Library( const std::string& name, const std::string& licence, const size_t major, const size_t minor, const size_t release )
Library::Library( const std::string& name, const std::string& license, const size_t major, const size_t minor, const size_t release )
: _name( name )
, _licence( licence )
, _licence( license )
, _major( major )
, _minor( minor )
, _release( release )
Expand Down Expand Up @@ -69,7 +69,7 @@ size_t Library::getReleaseVersion()
return _release;
}

std::string Library::getLicence()
std::string Library::getLicense()
{
return _licence;
}
Expand Down
4 changes: 2 additions & 2 deletions src/AvTranscoder/Description.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace avtranscoder
class Library
{
public:
Library( const std::string& name, const std::string& licence, const size_t major, const size_t minor, const size_t release );
Library( const std::string& name, const std::string& license, const size_t major, const size_t minor, const size_t release );

std::string getName();

Expand All @@ -22,7 +22,7 @@ class Library
size_t getMinorVersion();
size_t getReleaseVersion();

std::string getLicence();
std::string getLicense();
private:
std::string _name;
std::string _licence;
Expand Down
12 changes: 7 additions & 5 deletions src/AvTranscoder/File/InputFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,7 @@ InputFile& InputFile::analyse( ProgressListener& progress, const EAnalyseLevel l
_properties.bitRate = _formatContext->bit_rate;
_properties.packetSize = _formatContext->packet_size;

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

for( size_t streamId = 0; streamId < _formatContext->nb_streams; streamId++ )
{
Expand All @@ -93,31 +89,37 @@ InputFile& InputFile::analyse( ProgressListener& progress, const EAnalyseLevel l
case AVMEDIA_TYPE_VIDEO:
{
_properties.videoStreams.push_back( videoStreamInfo( _formatContext, streamId, progress, level ) );
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.videoStreams.back().metadatas );
break;
}
case AVMEDIA_TYPE_AUDIO:
{
_properties.audioStreams.push_back( audioStreamInfo( _formatContext, streamId ) );
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.audioStreams.back().metadatas );
break;
}
case AVMEDIA_TYPE_DATA:
{
_properties.dataStreams.push_back( dataStreamInfo( _formatContext, streamId ) );
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.dataStreams.back().metadatas );
break;
}
case AVMEDIA_TYPE_SUBTITLE:
{
_properties.subtitleStreams.push_back( subtitleStreamInfo( _formatContext, streamId ) );
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.subtitleStreams.back().metadatas );
break;
}
case AVMEDIA_TYPE_ATTACHMENT:
{
_properties.attachementStreams.push_back( attachementStreamInfo( _formatContext, streamId ) );
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.attachementStreams.back().metadatas );
break;
}
case AVMEDIA_TYPE_UNKNOWN:
{
_properties.unknownStreams.push_back( unknownStreamInfo( _formatContext, streamId ) );
detail::fillMetadataDictionnary( _formatContext->streams[streamId]->metadata, _properties.unknownStreams.back().metadatas );
break;
}
case AVMEDIA_TYPE_NB:
Expand Down
220 changes: 220 additions & 0 deletions src/AvTranscoder/Metadatas/MediaMetadatasStructures.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
#include "MediaMetadatasStructures.hpp"

extern "C" {
#ifndef __STDC_CONSTANT_MACROS
#define __STDC_CONSTANT_MACROS
#endif
#include <libavutil/dict.h>
}

#include <sstream>
#include <utility>

namespace avtranscoder
{

namespace detail
{

template<typename T>
void add( MetadatasMap& dataMap, const std::string& key, const T& value )
{
std::stringstream ss;
ss << value;
add( dataMap, key, ss.str() );
}

template<>
void add( MetadatasMap& dataMap, const std::string& key, const std::string& value )
{
dataMap.push_back( std::pair<std::string, std::string>( key, value ) );
}

template<>
void add( MetadatasMap& dataMap, const std::string& key, const bool& value )
{
add( dataMap, key, value ? "True" : "False" );
}

void fillMetadataDictionnary( AVDictionary* avdictionnary, MetadatasMap& metadata )
{
AVDictionaryEntry* tag = NULL;
while( ( tag = av_dict_get( avdictionnary, "", tag, AV_DICT_IGNORE_SUFFIX ) ) )
{
metadata.push_back( std::pair<std::string, std::string>( tag->key, tag->value ) );
}
}

}

MetadatasMap VideoProperties::getDataMap() const
{
MetadatasMap dataMap;

detail::add( dataMap, "stream id", streamId );
detail::add( dataMap, "codec id", codecId );
detail::add( dataMap, "codec name", codecName );
detail::add( dataMap, "codec long name", codecLongName );
detail::add( dataMap, "profile", profile );
detail::add( dataMap, "profile name", profileName );
detail::add( dataMap, "level", level );
detail::add( dataMap, "start timecode", startTimecode );
detail::add( dataMap, "width", width );
detail::add( dataMap, "height", height );
detail::add( dataMap, "pixel aspect ratio", sar.num / sar.den );
detail::add( dataMap, "display aspect ratio", dar.num / dar.den );
detail::add( dataMap, "dtgActiveFormat", dtgActiveFormat );
detail::add( dataMap, "components count", componentsCount );
detail::add( dataMap, "pixel type", pixelName );
detail::add( dataMap, "bit wise acked", bitWisePacked );
detail::add( dataMap, "rgb pixel", rgbPixelData );
detail::add( dataMap, "as alpha", asAlpha );
detail::add( dataMap, "chroma width", chromaWidth );
detail::add( dataMap, "chroma height", chromaHeight );
detail::add( dataMap, "endianess", endianess );
detail::add( dataMap, "color transfert", colorTransfert );
detail::add( dataMap, "colorspace", colorspace );
detail::add( dataMap, "color range", colorRange );
detail::add( dataMap, "color primaries", colorPrimaries );
detail::add( dataMap, "indexed colors", indexedColors );
detail::add( dataMap, "pseudo paletted", pseudoPaletted );
detail::add( dataMap, "chroma sample location", chromaSampleLocation);
detail::add( dataMap, "interlaced ", isInterlaced );
detail::add( dataMap, "top field first", topFieldFirst );
detail::add( dataMap, "field order", fieldOrder);
detail::add( dataMap, "timeBase", timeBase.num / timeBase.den );
detail::add( dataMap, "fps", fps );
detail::add( dataMap, "ticksPerFrame", ticksPerFrame );
detail::add( dataMap, "bit rate", bitRate );
detail::add( dataMap, "max bit rate", maxBitRate );
detail::add( dataMap, "min bit rate", minBitRate );
detail::add( dataMap, "gop size", gopSize );

std::string gop;
for( size_t frameIndex = 0; frameIndex < gopStructure.size(); ++frameIndex )
{
gop += gopStructure.at( frameIndex ).first;
gop += ( gopStructure.at( frameIndex ).second ? "*" : " " );
}
detail::add( dataMap, "gop", gop );

detail::add( dataMap, "has B frames", hasBFrames );
detail::add( dataMap, "references frames", referencesFrames );

for( size_t metadataIndex = 0; metadataIndex < metadatas.size(); ++metadataIndex )
{
detail::add( dataMap, metadatas.at( metadataIndex ).first, metadatas.at( metadataIndex ).second );
}

return dataMap;
}

MetadatasMap AudioProperties::getDataMap() const
{
MetadatasMap dataMap;

detail::add( dataMap, "stream id", streamId );
detail::add( dataMap, "codec id", codecId );
detail::add( dataMap, "codec name", codecName );
detail::add( dataMap, "codec long name", codecLongName );
detail::add( dataMap, "sample format", sampleFormat );
detail::add( dataMap, "sample rate", sampleRate );
detail::add( dataMap, "bit rate", bit_rate );
detail::add( dataMap, "channels", channels );
detail::add( dataMap, "channel layout", channelLayout );
detail::add( dataMap, "channel name", channelName );
detail::add( dataMap, "channel description", channelDescription );

for( size_t metadataIndex = 0; metadataIndex < metadatas.size(); ++metadataIndex )
{
detail::add( dataMap, metadatas.at( metadataIndex ).first, metadatas.at( metadataIndex ).second );
}

return dataMap;
}

MetadatasMap DataProperties::getDataMap() const
{
MetadatasMap dataMap;

detail::add( dataMap, "streamId", streamId );

for( size_t metadataIndex = 0; metadataIndex < metadatas.size(); ++metadataIndex )
{
detail::add( dataMap, metadatas.at( metadataIndex ).first, metadatas.at( metadataIndex ).second );
}

return dataMap;
}

MetadatasMap SubtitleProperties::getDataMap() const
{
MetadatasMap dataMap;

detail::add( dataMap, "streamId", streamId );

for( size_t metadataIndex = 0; metadataIndex < metadatas.size(); ++metadataIndex )
{
detail::add( dataMap, metadatas.at( metadataIndex ).first, metadatas.at( metadataIndex ).second );
}

return dataMap;
}

MetadatasMap AttachementProperties::getDataMap() const
{
MetadatasMap dataMap;

detail::add( dataMap, "streamId", streamId );

for( size_t metadataIndex = 0; metadataIndex < metadatas.size(); ++metadataIndex )
{
detail::add( dataMap, metadatas.at( metadataIndex ).first, metadatas.at( metadataIndex ).second );
}

return dataMap;
}

MetadatasMap UnknownProperties::getDataMap() const
{
MetadatasMap dataMap;

detail::add( dataMap, "streamId", streamId );

for( size_t metadataIndex = 0; metadataIndex < metadatas.size(); ++metadataIndex )
{
detail::add( dataMap, metadatas.at( metadataIndex ).first, metadatas.at( metadataIndex ).second );
}

return dataMap;
}

MetadatasMap Properties::getDataMap() const
{
MetadatasMap dataMap;

detail::add( dataMap, "filename", filename );
detail::add( dataMap, "format name", formatName );
detail::add( dataMap, "format long name", formatLongName );

detail::add( dataMap, "start time", startTime );
detail::add( dataMap, "duration", duration );
detail::add( dataMap, "bitrate", bitRate );
detail::add( dataMap, "number of streams", streamsCount );
detail::add( dataMap, "number of programs", programsCount );
detail::add( dataMap, "number of video streams", videoStreams.size() );
detail::add( dataMap, "number of audio streams", audioStreams.size() );
detail::add( dataMap, "number of data streams", dataStreams.size() );
detail::add( dataMap, "number of subtitle streams", subtitleStreams.size() );
detail::add( dataMap, "number of attachement streams", attachementStreams.size() );
detail::add( dataMap, "number of unknown streams", unknownStreams.size() );

for( size_t metadataIndex = 0; metadataIndex < metadatas.size(); ++metadataIndex )
{
detail::add( dataMap, metadatas.at( metadataIndex ).first, metadatas.at( metadataIndex ).second );
}

return dataMap;
}

}
Loading