Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }