+//------------------------------------------------------------------------------------------
+
+
+
+class FilenameResolver : public ASDCP::TimedText::IResourceResolver
+{
+ std::string m_Dirname;
+
+ FilenameResolver();
+ bool operator==(const FilenameResolver&);
+
+public:
+ FilenameResolver(const std::string& dirname)
+ {
+ if ( PathIsDirectory(dirname) )
+ {
+ m_Dirname = dirname;
+ return;
+ }
+
+ DefaultLogSink().Error("Path '%s' is not a directory, defaulting to '.'\n", dirname.c_str());
+ m_Dirname = ".";
+ }
+
+ //
+ Result_t ResolveRID(const byte_t* uuid, TimedText::FrameBuffer& FrameBuf) const
+ {
+ FileReader Reader;
+ char buf[64];
+ UUID RID(uuid);
+ std::string filename = m_Dirname + "/" + RID.EncodeHex(buf, 64);
+ DefaultLogSink().Debug("retrieving resource %s from file %s\n", buf, filename.c_str());
+
+ Result_t result = Reader.OpenRead(filename.c_str());
+
+ if ( KM_SUCCESS(result) )
+ {
+ ui32_t read_count = 0;
+ result = Reader.Read(FrameBuf.Data(), FrameBuf.Capacity(), &read_count);
+
+ if ( KM_SUCCESS(result) )
+ FrameBuf.Size(read_count);
+ }
+
+ return result;
+ }
+};