public static Frame Parse(System.IO.Stream stream, ID3v2MajorVersion version, FrameParserFactory parserFactory, out string frameID)
{
FrameHeaderParser headerParser=FrameHeaderParser.CreateFrameHeaderParser(version);
FrameHeader header=headerParser.Parse(stream);
frameID="";
if(header==null) // have reached the padding, no more frames.
{
return null;
}
frameID=header.FrameID;
if(header.Length > 128*128*128*128)
{
throw new FatalException("Invalid frame length for frame with frame ID '"+frameID+"'.");
}
byte[] frameData=new byte[header.Length];
stream.Read(frameData, 0, frameData.Length);
FrameParser parser=parserFactory.CreateFrameParser(version,header.FrameID);
if(parser==null)
{
throw new NoFrameParserProvidedException(frameID,version, "No frame parser object is provided to parse this type of frame in this implementation.");
}
return parser.ParseFrame(frameData);
}