lavf/id3v2enc: use metadata_header_padding
As with the change to flacenc this allows the user to control the amount of padding they want added to the file. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
c14b011a97
commit
0de03fd6a1
@ -66,7 +66,7 @@ static int put_id3v2_tags(AVFormatContext *s, AIFFOutputContext *aiff)
|
|||||||
return ret;
|
return ret;
|
||||||
pict_list = pict_list->next;
|
pict_list = pict_list->next;
|
||||||
}
|
}
|
||||||
ff_id3v2_finish(&id3v2, pb);
|
ff_id3v2_finish(&id3v2, pb, s->metadata_header_padding);
|
||||||
|
|
||||||
end = avio_tell(pb);
|
end = avio_tell(pb);
|
||||||
size = end - pos;
|
size = end - pos;
|
||||||
|
@ -134,7 +134,7 @@ int ff_id3v2_write_apic(AVFormatContext *s, ID3v2EncContext *id3, AVPacket *pkt)
|
|||||||
/**
|
/**
|
||||||
* Finalize an opened ID3v2 tag.
|
* Finalize an opened ID3v2 tag.
|
||||||
*/
|
*/
|
||||||
void ff_id3v2_finish(ID3v2EncContext *id3, AVIOContext *pb);
|
void ff_id3v2_finish(ID3v2EncContext *id3, AVIOContext *pb, int padding_bytes);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write an ID3v2 tag containing all global metadata from s.
|
* Write an ID3v2 tag containing all global metadata from s.
|
||||||
|
@ -29,8 +29,6 @@
|
|||||||
#include "avio_internal.h"
|
#include "avio_internal.h"
|
||||||
#include "id3v2.h"
|
#include "id3v2.h"
|
||||||
|
|
||||||
#define PADDING_BYTES 10
|
|
||||||
|
|
||||||
static void id3v2_put_size(AVIOContext *pb, int size)
|
static void id3v2_put_size(AVIOContext *pb, int size)
|
||||||
{
|
{
|
||||||
avio_w8(pb, size >> 21 & 0x7f);
|
avio_w8(pb, size >> 21 & 0x7f);
|
||||||
@ -324,15 +322,24 @@ int ff_id3v2_write_apic(AVFormatContext *s, ID3v2EncContext *id3, AVPacket *pkt)
|
|||||||
return 0;
|
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;
|
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
|
/* adding an arbitrary amount of padding bytes at the end of the
|
||||||
* ID3 metadata fixes cover art display for some software (iTunes,
|
* ID3 metadata fixes cover art display for some software (iTunes,
|
||||||
* Traktor, Serato, Torq) */
|
* Traktor, Serato, Torq) */
|
||||||
ffio_fill(pb, 0, PADDING_BYTES);
|
ffio_fill(pb, 0, padding_bytes);
|
||||||
id3->len += PADDING_BYTES;
|
id3->len += padding_bytes;
|
||||||
|
|
||||||
cur_pos = avio_tell(pb);
|
cur_pos = avio_tell(pb);
|
||||||
avio_seek(pb, id3->size_pos, SEEK_SET);
|
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);
|
ff_id3v2_start(&id3, s->pb, id3v2_version, magic);
|
||||||
if ((ret = ff_id3v2_write_metadata(s, &id3)) < 0)
|
if ((ret = ff_id3v2_write_metadata(s, &id3)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
ff_id3v2_finish(&id3, s->pb);
|
ff_id3v2_finish(&id3, s->pb, s->metadata_header_padding);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -304,7 +304,7 @@ static int mp3_queue_flush(AVFormatContext *s)
|
|||||||
AVPacketList *pktl;
|
AVPacketList *pktl;
|
||||||
int ret = 0, write = 1;
|
int ret = 0, write = 1;
|
||||||
|
|
||||||
ff_id3v2_finish(&mp3->id3, s->pb);
|
ff_id3v2_finish(&mp3->id3, s->pb, s->metadata_header_padding);
|
||||||
mp3_write_xing(s);
|
mp3_write_xing(s);
|
||||||
|
|
||||||
while ((pktl = mp3->queue)) {
|
while ((pktl = mp3->queue)) {
|
||||||
@ -513,7 +513,7 @@ static int mp3_write_header(struct AVFormatContext *s)
|
|||||||
|
|
||||||
if (!mp3->pics_to_write) {
|
if (!mp3->pics_to_write) {
|
||||||
if (mp3->id3v2_version)
|
if (mp3->id3v2_version)
|
||||||
ff_id3v2_finish(&mp3->id3, s->pb);
|
ff_id3v2_finish(&mp3->id3, s->pb, s->metadata_header_padding);
|
||||||
mp3_write_xing(s);
|
mp3_write_xing(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user