@ -29,8 +29,6 @@
# include "avio_internal.h"
# include "id3v2.h"
# define PADDING_BYTES 10
static void id3v2_put_size ( AVIOContext * pb , int size )
{
avio_w8 ( pb , size > > 21 & 0x7f ) ;
@ -324,15 +322,24 @@ int ff_id3v2_write_apic(AVFormatContext *s, ID3v2EncContext *id3, AVPacket *pkt)
return 0 ;
}
void ff_id3v2_finish ( ID3v2EncContext * id3 , AVIOContext * pb )
void ff_id3v2_finish ( ID3v2EncContext * id3 , AVIOContext * pb ,
int padding_bytes )
{
int64_t cur_pos ;
if ( padding_bytes < 0 )
padding_bytes = 10 ;
/* The ID3v2.3 specification states that 28 bits are used to represent the
* size of the whole tag . Therefore the current size of the tag needs to be
* subtracted from the upper limit of 2 ^ 28 - 1 to clip the value correctly . */
padding_bytes = av_clip ( padding_bytes , 10 , 268435455 - id3 - > len ) ;
/* adding an arbitrary amount of padding bytes at the end of the
* ID3 metadata fixes cover art display for some software ( iTunes ,
* Traktor , Serato , Torq ) */
ffio_fill ( pb , 0 , PADDING_BYTES ) ;
id3 - > len + = PADDING_BYTES ;
ffio_fill ( pb , 0 , padding_bytes ) ;
id3 - > len + = padding_bytes ;
cur_pos = avio_tell ( pb ) ;
avio_seek ( pb , id3 - > size_pos , SEEK_SET ) ;
@ -349,7 +356,7 @@ int ff_id3v2_write_simple(struct AVFormatContext *s, int id3v2_version,
ff_id3v2_start ( & id3 , s - > pb , id3v2_version , magic ) ;
if ( ( ret = ff_id3v2_write_metadata ( s , & id3 ) ) < 0 )
return ret ;
ff_id3v2_finish ( & id3 , s - > pb ) ;
ff_id3v2_finish ( & id3 , s - > pb , s - > metadata_header_padding ) ;
return 0 ;
}