IPHeader::PrintOptType::PrintOptType(const char *ptr,const char *lim) { StrParse dev(ptr,lim); ParseInbound(dev,inbound); ParseExtra(dev,extra); if( !dev.finish() ) setDefault(); }
bool CDVDDemuxVobsub::Open(const std::string& filename, int source, const std::string& subfilename) { m_Filename = filename; m_source = source; std::unique_ptr<CDVDSubtitleStream> pStream(new CDVDSubtitleStream()); if(!pStream->Open(filename)) return false; std::string vobsub = subfilename; if ( vobsub == "") { vobsub = filename; vobsub.erase(vobsub.rfind('.'), vobsub.size()); vobsub += ".sub"; } CFileItem item(vobsub, false); item.SetMimeType("video/x-vobsub"); item.SetContentLookup(false); m_Input.reset(CDVDFactoryInputStream::CreateInputStream(NULL, item)); if(!m_Input.get() || !m_Input->Open()) return false; m_Demuxer.reset(new CDVDDemuxFFmpeg()); if(!m_Demuxer->Open(m_Input.get())) return false; CDVDStreamInfo hints; CDVDCodecOptions options; hints.codec = AV_CODEC_ID_DVD_SUBTITLE; char line[2048]; DECLARE_UNUSED(bool,res) SState state; state.delay = 0; state.id = -1; while( pStream->ReadLine(line, sizeof(line)) ) { if (*line == 0 || *line == '\r' || *line == '\n' || *line == '#') continue; else if (strncmp("langidx:", line, 8) == 0) res = ParseLangIdx(state, line + 8); else if (strncmp("delay:", line, 6) == 0) res = ParseDelay(state, line + 6); else if (strncmp("id:", line, 3) == 0) res = ParseId(state, line + 3); else if (strncmp("timestamp:", line, 10) == 0) res = ParseTimestamp(state, line + 10); else if (strncmp("palette:", line, 8) == 0 || strncmp("size:", line, 5) == 0 || strncmp("org:", line, 4) == 0 || strncmp("custom colors:", line, 14) == 0 || strncmp("scale:", line, 6) == 0 || strncmp("alpha:", line, 6) == 0 || strncmp("fadein/out:", line, 11) == 0 || strncmp("forced subs:", line, 12) == 0) res = ParseExtra(state, line); else continue; } struct sorter s; sort(m_Timestamps.begin(), m_Timestamps.end(), s); m_Timestamp = m_Timestamps.begin(); for(unsigned i=0;i<m_Streams.size();i++) { m_Streams[i]->ExtraSize = state.extra.length()+1; m_Streams[i]->ExtraData = new uint8_t[m_Streams[i]->ExtraSize]; strcpy((char*)m_Streams[i]->ExtraData, state.extra.c_str()); } return true; }