void Parser::parseAtom (QString s) { initAtom(); atom=s; QRegExp re; int pos; // Strip WS at beginning re.setPattern ("\\w"); re.setMinimal (true); pos=re.indexIn (atom); if (pos>=0) s=s.right(s.length()-pos); // Get command re.setPattern ("\\b(.*)(\\s|\\()"); pos=re.indexIn (s); if (pos>=0) com=re.cap(1); // Get parameters paramList.clear(); QString t; int leftParenthesis; int rightParenthesis; if (!nextParenthesisContents(s, leftParenthesis, rightParenthesis, t)) return; paramList=findParameters(t); }
AtomParser(const nsACString& aType, const MediaLargeByteBuffer* aData) { const nsCString mType(aType); // for logging macro. mp4_demuxer::ByteReader reader(aData); mp4_demuxer::AtomType initAtom("ftyp"); mp4_demuxer::AtomType mediaAtom("moof"); while (reader.Remaining() >= 8) { uint64_t size = reader.ReadU32(); const uint8_t* typec = reader.Peek(4); uint32_t type = reader.ReadU32(); MSE_DEBUGV(AtomParser ,"Checking atom:'%c%c%c%c'", typec[0], typec[1], typec[2], typec[3]); if (mInitOffset.isNothing() && mp4_demuxer::AtomType(type) == initAtom) { mInitOffset = Some(reader.Offset()); } if (mMediaOffset.isNothing() && mp4_demuxer::AtomType(type) == mediaAtom) { mMediaOffset = Some(reader.Offset()); } if (mInitOffset.isSome() && mMediaOffset.isSome()) { // We have everything we need. break; } if (size == 1) { // 64 bits size. if (!reader.CanReadType<uint64_t>()) { break; } size = reader.ReadU64(); } else if (size == 0) { // Atom extends to the end of the buffer, it can't have what we're // looking for. break; } if (reader.Remaining() < size - 8) { // Incomplete atom. break; } reader.Read(size - 8); } reader.DiscardRemaining(); }
Atom::Atom(std::string what) { d_atomicNum = PeriodicTable::getTable()->getAtomicNumber(what); initAtom(); };
void Parser::initParser() { initAtom(); current=-1; }