void MediaCodecList::startElementHandler( const char *name, const char **attrs) { if (mInitCheck != OK) { return; } switch (mCurrentSection) { case SECTION_TOPLEVEL: { if (!strcmp(name, "Decoders")) { mCurrentSection = SECTION_DECODERS; } else if (!strcmp(name, "Encoders")) { mCurrentSection = SECTION_ENCODERS; } break; } case SECTION_DECODERS: { if (!strcmp(name, "MediaCodec")) { mInitCheck = addMediaCodecFromAttributes(false /* encoder */, attrs); mCurrentSection = SECTION_DECODER; } break; } case SECTION_ENCODERS: { if (!strcmp(name, "MediaCodec")) { mInitCheck = addMediaCodecFromAttributes(true /* encoder */, attrs); mCurrentSection = SECTION_ENCODER; } break; } case SECTION_DECODER: case SECTION_ENCODER: { if (!strcmp(name, "Quirk")) { mInitCheck = addQuirk(attrs); } else if (!strcmp(name, "Type")) { mInitCheck = addTypeFromAttributes(attrs); } break; } default: break; } ++mDepth; }
void MediaCodecList::startElementHandler( const char *name, const char **attrs) { if (mInitCheck != OK) { return; } bool inType = true; if (!strcmp(name, "Include")) { mInitCheck = includeXMLFile(attrs); if (mInitCheck == OK) { mPastSections.push(mCurrentSection); mCurrentSection = SECTION_INCLUDE; } ++mDepth; return; } switch (mCurrentSection) { case SECTION_TOPLEVEL: { if (!strcmp(name, "Decoders")) { mCurrentSection = SECTION_DECODERS; } else if (!strcmp(name, "Encoders")) { mCurrentSection = SECTION_ENCODERS; } break; } case SECTION_DECODERS: { if (!strcmp(name, "MediaCodec")) { mInitCheck = addMediaCodecFromAttributes(false /* encoder */, attrs); mCurrentSection = SECTION_DECODER; } break; } case SECTION_ENCODERS: { if (!strcmp(name, "MediaCodec")) { mInitCheck = addMediaCodecFromAttributes(true /* encoder */, attrs); mCurrentSection = SECTION_ENCODER; } break; } case SECTION_DECODER: case SECTION_ENCODER: { if (!strcmp(name, "Quirk")) { mInitCheck = addQuirk(attrs); } else if (!strcmp(name, "Type")) { mInitCheck = addTypeFromAttributes(attrs); mCurrentSection = (mCurrentSection == SECTION_DECODER ? SECTION_DECODER_TYPE : SECTION_ENCODER_TYPE); } } inType = false; // fall through case SECTION_DECODER_TYPE: case SECTION_ENCODER_TYPE: { // ignore limits and features specified outside of type bool outside = !inType && !mCurrentInfo->mHasSoleMime; if (outside && (!strcmp(name, "Limit") || !strcmp(name, "Feature"))) { ALOGW("ignoring %s specified outside of a Type", name); } else if (!strcmp(name, "Limit")) { mInitCheck = addLimit(attrs); } else if (!strcmp(name, "Feature")) { mInitCheck = addFeature(attrs); } break; } default: break; } ++mDepth; }