Beispiel #1
0
void CompositeSource::addSourceWithChapter(
                            const std::shared_ptr<ISeekableSource> &src,
                            const std::wstring &title)
{
    addSource(src);
    ITagParser *parser = dynamic_cast<ITagParser*>(src.get());
    if (parser) {
        if (count() == 1)
            fetchAlbumTags(parser);
        const std::vector<chapters::entry_t> *chaps;
        if ((chaps = parser->getChapters())) {
            std::copy(chaps->begin(), chaps->end(),
                      std::back_inserter(m_chapters));
            return;
        }
        const std::map<uint32_t, std::wstring> &tags = parser->getTags();
        std::map<uint32_t, std::wstring>::const_iterator
            tag = tags.find(Tag::kTitle);
        if (tag != tags.end()) {
            addChapter(tag->second, src->length() / m_asbd.mSampleRate);
            return;
        }
    }
    addChapter(title, src->length() / m_asbd.mSampleRate);
}
Beispiel #2
0
void CompositeSource::addSourceWithChapter(
                            const std::shared_ptr<ISeekableSource> &src,
                            const std::wstring &title)
{
    addSource(src);
    std::wstring name(title);
    auto parser = dynamic_cast<ITagParser*>(src.get());
    auto cp = dynamic_cast<IChapterParser*>(src.get());
    if (cp) {
        auto &chaps = cp->getChapters();
        if (chaps.size()) {
            std::copy(chaps.begin(), chaps.end(),
                      std::back_inserter(m_chapters));
            return;
        }
    }
    if (parser) {
        auto tags = parser->getTags();
        if (tags.find("title") != tags.end())
            name = strutil::us2w(tags["title"]);
    }
    addChapter(name, src->length() / m_asbd.mSampleRate);
}