Index: external/FFmpeg/libavcodec/myth_utils.c =================================================================== --- external/FFmpeg/libavcodec/myth_utils.c (revision 27238) +++ external/FFmpeg/libavcodec/myth_utils.c (working copy) @@ -218,6 +218,9 @@ case CODEC_ID_MPEG2TS: return "MPEG2TS"; + /* Attachment codecs */ + case CODEC_ID_TTF: return "TTF_FONT"; + case CODEC_ID_PROBE: return "PROBE"; } return "Unknown Codec ID"; @@ -235,6 +238,7 @@ case CODEC_TYPE_AUDIO: return "Audio"; case CODEC_TYPE_DATA: return "Data"; case CODEC_TYPE_SUBTITLE: return "Subtitle"; + case CODEC_TYPE_ATTACHMENT: return "Attachment"; } return "Invalid Codec Type"; }; Index: libs/libmythtv/avformatdecoder.h =================================================================== --- libs/libmythtv/avformatdecoder.h (revision 27238) +++ libs/libmythtv/avformatdecoder.h (working copy) @@ -24,6 +24,7 @@ } #include "avfringbuffer.h" +#include "mythfontmanager.h" class TeletextDecoder; class CC608Decoder; Index: libs/libmythtv/avformatdecoder.cpp =================================================================== --- libs/libmythtv/avformatdecoder.cpp (revision 27238) +++ libs/libmythtv/avformatdecoder.cpp (working copy) @@ -358,6 +358,9 @@ lcd->setVariousLEDs(VARIOUS_SPDIF, false); lcd->setSpeakerLEDs(SPEAKER_71, false); // should clear any and all speaker LEDs } + + /* unload any fonts that could have been loaded */ + GetGlobalFontManager()->ReleaseFonts("AVFORMAT"); } void AvFormatDecoder::CloseCodecs() @@ -1946,6 +1950,18 @@ .arg(ff_codec_type_string(enc->codec_type))); break; } + case CODEC_TYPE_ATTACHMENT: + { + QByteArray Atachmentdata((char *)enc->extradata,enc->extradata_size); + GetGlobalFontManager()->LoadFontStream(QString(ic->streams[i]->filename), Atachmentdata, "AVFORMAT"); + VERBOSE(VB_PLAYBACK, LOC + QString( + "Attachment Track #%1 is A/V stream #%2.") + .arg(ic->streams[i]->filename).arg(i)); + bitrate += enc->bit_rate; + VERBOSE(VB_PLAYBACK, LOC + QString("attachment codec (%1)") + .arg(ff_codec_type_string(enc->codec_type))); + break; + } default: { bitrate += enc->bit_rate; Index: libs/libmythui/mythfontmanager.h =================================================================== --- libs/libmythui/mythfontmanager.h (revision 27239) +++ libs/libmythui/mythfontmanager.h (working copy) @@ -16,6 +16,7 @@ MythFontManager() {} void LoadFonts(const QString &directory, const QString ®isteredFor); + void LoadFontStream(const QString &streamname, const QByteArray &stream, const QString ®isteredFor); void ReleaseFonts(const QString ®isteredFor); static MythFontManager *GetGlobalFontManager(void); Index: libs/libmythui/mythfontmanager.cpp =================================================================== --- libs/libmythui/mythfontmanager.cpp (revision 27239) +++ libs/libmythui/mythfontmanager.cpp (working copy) @@ -34,6 +34,32 @@ LoadFonts(directory, registeredFor, &maxDirs); } +void MythFontManager::LoadFontStream(const QString &streamname, + const QByteArray &stream, + const QString ®isteredFor) +{ + VERBOSE(VB_GUI, LOC + + QString("Loading font Stream '%1'").arg(streamname)); + int result = QFontDatabase::addApplicationFontFromData(stream); + if (result > -1) + { + VERBOSE(VB_GUI, LOC + + QString("found font(s) '%1' in stream '%2'") + .arg(QFontDatabase::applicationFontFamilies(result).join(", ")).arg(streamname)); + + if (!RegisterFont(streamname, registeredFor, result)) + { + VERBOSE(VB_IMPORTANT, LOC_WARN + + QString("Unable to register font(s) in stream '%1'").arg(streamname)); + } + } + else + { + VERBOSE(VB_IMPORTANT, LOC_WARN + + QString("Unable to load font(s) in stream '%1'").arg(streamname)); + } +} + /** * \brief Loads the fonts in font files within the given directory structure *