private Int32 writePictures(BinaryWriter w, IList <PictureInfo> pictures, Boolean isLast) { var result = 0; Int64 sizePos, dataPos, finalPos; Byte blockType; foreach (var picture in pictures) { blockType = META_PICTURE; if (isLast) { blockType = (Byte)(blockType & 0x80); } w.Write(blockType); sizePos = w.BaseStream.Position; w.Write(new Byte[] { 0, 0, 0 }); // Placeholder for 24-bit integer that will be rewritten at the end of the method dataPos = w.BaseStream.Position; vorbisTag.WritePicture(w, picture.PictureData, picture.NativeFormat, ImageUtils.GetMimeTypeFromImageFormat(picture.NativeFormat), picture.PicType.Equals(PictureInfo.PIC_TYPE.Unsupported) ? picture.NativePicCode : ID3v2.EncodeID3v2PictureType(picture.PicType), picture.Description); finalPos = w.BaseStream.Position; w.BaseStream.Seek(sizePos, SeekOrigin.Begin); w.Write(StreamUtils.EncodeBEUInt24((UInt32)(finalPos - dataPos))); w.BaseStream.Seek(finalPos, SeekOrigin.Begin); result++; } return(result); }
private int writePictureBlock(BinaryWriter w, PictureInfo picture) { long sizePos, dataPos, finalPos; w.Write(META_PICTURE); sizePos = w.BaseStream.Position; w.Write(new byte[] { 0, 0, 0 }); // Placeholder for 24-bit integer that will be rewritten at the end of the method dataPos = w.BaseStream.Position; vorbisTag.WritePicture(w, picture.PictureData, picture.NativeFormat, ImageUtils.GetMimeTypeFromImageFormat(picture.NativeFormat), picture.PicType.Equals(PictureInfo.PIC_TYPE.Unsupported) ? picture.NativePicCode : ID3v2.EncodeID3v2PictureType(picture.PicType), picture.Description); finalPos = w.BaseStream.Position; w.BaseStream.Seek(sizePos, SeekOrigin.Begin); w.Write(StreamUtils.EncodeBEUInt24((uint)(finalPos - dataPos))); w.BaseStream.Seek(finalPos, SeekOrigin.Begin); return(1); }
private int writePictures(BinaryWriter w, IList <PictureInfo> pictures, bool isLast) { int result = 0; long sizePos, dataPos, finalPos; byte blockType; foreach (PictureInfo picture in pictures) { // Picture has either to be supported, or to come from the right tag standard bool doWritePicture = !picture.PicType.Equals(PictureInfo.PIC_TYPE.Unsupported); if (!doWritePicture) { doWritePicture = (MetaDataIOFactory.TAG_NATIVE == picture.TagType); } // It also has not to be marked for deletion doWritePicture = doWritePicture && (!picture.MarkedForDeletion); if (doWritePicture) { blockType = META_PICTURE; if (isLast) { blockType = (byte)(blockType & 0x80); } w.Write(blockType); sizePos = w.BaseStream.Position; w.Write(new byte[] { 0, 0, 0 }); // Placeholder for 24-bit integer that will be rewritten at the end of the method dataPos = w.BaseStream.Position; vorbisTag.WritePicture(w, picture.PictureData, picture.NativeFormat, ImageUtils.GetMimeTypeFromImageFormat(picture.NativeFormat), picture.PicType.Equals(PictureInfo.PIC_TYPE.Unsupported) ? picture.NativePicCode : ID3v2.EncodeID3v2PictureType(picture.PicType), picture.Description); finalPos = w.BaseStream.Position; w.BaseStream.Seek(sizePos, SeekOrigin.Begin); w.Write(StreamUtils.EncodeBEUInt24((uint)(finalPos - dataPos))); w.BaseStream.Seek(finalPos, SeekOrigin.Begin); result++; } } return(result); }