static { Set<Class<? extends BaseDescriptor>> annotated = new HashSet<Class<? extends BaseDescriptor>>(); annotated.add(DecoderSpecificInfo.class); annotated.add(SLConfigDescriptor.class); annotated.add(BaseDescriptor.class); annotated.add(ExtensionDescriptor.class); annotated.add(ObjectDescriptorBase.class); annotated.add(ProfileLevelIndicationDescriptor.class); annotated.add(AudioSpecificConfig.class); annotated.add(ExtensionProfileLevelDescriptor.class); annotated.add(ESDescriptor.class); annotated.add(DecoderConfigDescriptor.class); // annotated.add(ObjectDescriptor.class); for (Class<? extends BaseDescriptor> clazz : annotated) { final Descriptor descriptor = clazz.getAnnotation(Descriptor.class); final int[] tags = descriptor.tags(); final int objectTypeInd = descriptor.objectTypeIndication(); Map<Integer, Class<? extends BaseDescriptor>> tagMap = descriptorRegistry.get(objectTypeInd); if (tagMap == null) { tagMap = new HashMap<Integer, Class<? extends BaseDescriptor>>(); } for (int tag : tags) { tagMap.put(tag, clazz); } descriptorRegistry.put(objectTypeInd, tagMap); } }