public IDataBlock DetectData(IDataReader dataReader, IDataBlockBuilder dataBlockBuilder, IScanContext context) { bool isFragmented = context.IsFragmented; if (ReferenceHeaders != null) { var referenceHeaders = new Dictionary <IDataPacket, ISequenceState>(); foreach (IReferenceHeader header in ReferenceHeaders) { IInputFile headerFile = context.CreateReferenceHeaderFile(header); using (var reader = headerFile.CreateDataReader()) { var headerDataBlock = _carver.Carve(new BitStreamDataReader(reader), dataBlockBuilder, context); if (headerDataBlock != null) { referenceHeaders[headerFile.CreateDataPacket()] = context.ReferenceHeader as ISequenceState; } } } context.ReferenceHeader = referenceHeaders; } // Restore scan context context.Results = null; context.IsFragmented = isFragmented; // context.ReferenceHeader return(_carver.Carve(new BitStreamDataReader(dataReader), dataBlockBuilder, context)); }
/// <summary> /// This method looks for the beginning of an NAL unit and if one is found it will parse it /// by calling Parser.Parse(). /// </summary> public IDataBlock DetectData(IDataReader dataReader, IDataBlockBuilder dataBlockBuilder, IScanContext context) { if (ReferenceHeaders != null) { BuildReferenceHeaders(context, dataBlockBuilder); } return(_carver.Carve(new BitStreamDataReader(dataReader), dataBlockBuilder, context)); }