mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
vorbiscomment: simplify API by using av_dict_count()
This commit is contained in:
parent
23f741f793
commit
efcde917af
@ -49,12 +49,12 @@ static int flac_write_block_comment(AVIOContext *pb, AVDictionary **m,
|
|||||||
int last_block, int bitexact)
|
int last_block, int bitexact)
|
||||||
{
|
{
|
||||||
const char *vendor = bitexact ? "Libav" : LIBAVFORMAT_IDENT;
|
const char *vendor = bitexact ? "Libav" : LIBAVFORMAT_IDENT;
|
||||||
unsigned int len, count;
|
unsigned int len;
|
||||||
uint8_t *p, *p0;
|
uint8_t *p, *p0;
|
||||||
|
|
||||||
ff_metadata_conv(m, ff_vorbiscomment_metadata_conv, NULL);
|
ff_metadata_conv(m, ff_vorbiscomment_metadata_conv, NULL);
|
||||||
|
|
||||||
len = ff_vorbiscomment_length(*m, vendor, &count);
|
len = ff_vorbiscomment_length(*m, vendor);
|
||||||
p0 = av_malloc(len+4);
|
p0 = av_malloc(len+4);
|
||||||
if (!p0)
|
if (!p0)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
@ -62,7 +62,7 @@ static int flac_write_block_comment(AVIOContext *pb, AVDictionary **m,
|
|||||||
|
|
||||||
bytestream_put_byte(&p, last_block ? 0x84 : 0x04);
|
bytestream_put_byte(&p, last_block ? 0x84 : 0x04);
|
||||||
bytestream_put_be24(&p, len);
|
bytestream_put_be24(&p, len);
|
||||||
ff_vorbiscomment_write(&p, m, vendor, count);
|
ff_vorbiscomment_write(&p, m, vendor);
|
||||||
|
|
||||||
avio_write(pb, p0, len+4);
|
avio_write(pb, p0, len+4);
|
||||||
av_freep(&p0);
|
av_freep(&p0);
|
||||||
|
@ -273,18 +273,17 @@ static uint8_t *ogg_write_vorbiscomment(int offset, int bitexact,
|
|||||||
const char *vendor = bitexact ? "Libav" : LIBAVFORMAT_IDENT;
|
const char *vendor = bitexact ? "Libav" : LIBAVFORMAT_IDENT;
|
||||||
int size;
|
int size;
|
||||||
uint8_t *p, *p0;
|
uint8_t *p, *p0;
|
||||||
unsigned int count;
|
|
||||||
|
|
||||||
ff_metadata_conv(m, ff_vorbiscomment_metadata_conv, NULL);
|
ff_metadata_conv(m, ff_vorbiscomment_metadata_conv, NULL);
|
||||||
|
|
||||||
size = offset + ff_vorbiscomment_length(*m, vendor, &count) + framing_bit;
|
size = offset + ff_vorbiscomment_length(*m, vendor) + framing_bit;
|
||||||
p = av_mallocz(size);
|
p = av_mallocz(size);
|
||||||
if (!p)
|
if (!p)
|
||||||
return NULL;
|
return NULL;
|
||||||
p0 = p;
|
p0 = p;
|
||||||
|
|
||||||
p += offset;
|
p += offset;
|
||||||
ff_vorbiscomment_write(&p, m, vendor, count);
|
ff_vorbiscomment_write(&p, m, vendor);
|
||||||
if (framing_bit)
|
if (framing_bit)
|
||||||
bytestream_put_byte(&p, 1);
|
bytestream_put_byte(&p, 1);
|
||||||
|
|
||||||
|
@ -37,28 +37,26 @@ const AVMetadataConv ff_vorbiscomment_metadata_conv[] = {
|
|||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
int ff_vorbiscomment_length(AVDictionary *m, const char *vendor_string,
|
int ff_vorbiscomment_length(AVDictionary *m, const char *vendor_string)
|
||||||
unsigned *count)
|
|
||||||
{
|
{
|
||||||
int len = 8;
|
int len = 8;
|
||||||
len += strlen(vendor_string);
|
len += strlen(vendor_string);
|
||||||
*count = 0;
|
|
||||||
if (m) {
|
if (m) {
|
||||||
AVDictionaryEntry *tag = NULL;
|
AVDictionaryEntry *tag = NULL;
|
||||||
while ((tag = av_dict_get(m, "", tag, AV_DICT_IGNORE_SUFFIX))) {
|
while ((tag = av_dict_get(m, "", tag, AV_DICT_IGNORE_SUFFIX))) {
|
||||||
len += 4 +strlen(tag->key) + 1 + strlen(tag->value);
|
len += 4 +strlen(tag->key) + 1 + strlen(tag->value);
|
||||||
(*count)++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ff_vorbiscomment_write(uint8_t **p, AVDictionary **m,
|
int ff_vorbiscomment_write(uint8_t **p, AVDictionary **m,
|
||||||
const char *vendor_string, const unsigned count)
|
const char *vendor_string)
|
||||||
{
|
{
|
||||||
bytestream_put_le32(p, strlen(vendor_string));
|
bytestream_put_le32(p, strlen(vendor_string));
|
||||||
bytestream_put_buffer(p, vendor_string, strlen(vendor_string));
|
bytestream_put_buffer(p, vendor_string, strlen(vendor_string));
|
||||||
if (*m) {
|
if (*m) {
|
||||||
|
int count = av_dict_count(*m);
|
||||||
AVDictionaryEntry *tag = NULL;
|
AVDictionaryEntry *tag = NULL;
|
||||||
bytestream_put_le32(p, count);
|
bytestream_put_le32(p, count);
|
||||||
while ((tag = av_dict_get(*m, "", tag, AV_DICT_IGNORE_SUFFIX))) {
|
while ((tag = av_dict_get(*m, "", tag, AV_DICT_IGNORE_SUFFIX))) {
|
||||||
|
@ -32,11 +32,9 @@
|
|||||||
* @param m The metadata structure to be parsed. For no metadata, set to NULL.
|
* @param m The metadata structure to be parsed. For no metadata, set to NULL.
|
||||||
* @param vendor_string The vendor string to be added into the VorbisComment.
|
* @param vendor_string The vendor string to be added into the VorbisComment.
|
||||||
* For no string, set to an empty string.
|
* For no string, set to an empty string.
|
||||||
* @param count Pointer to store the number of tags in m because m->count is "not allowed"
|
|
||||||
* @return The length in bytes.
|
* @return The length in bytes.
|
||||||
*/
|
*/
|
||||||
int ff_vorbiscomment_length(AVDictionary *m, const char *vendor_string,
|
int ff_vorbiscomment_length(AVDictionary *m, const char *vendor_string);
|
||||||
unsigned *count);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write a VorbisComment into a buffer. The buffer, p, must have enough
|
* Write a VorbisComment into a buffer. The buffer, p, must have enough
|
||||||
@ -47,10 +45,9 @@ int ff_vorbiscomment_length(AVDictionary *m, const char *vendor_string,
|
|||||||
* @param p The buffer in which to write.
|
* @param p The buffer in which to write.
|
||||||
* @param m The metadata struct to write.
|
* @param m The metadata struct to write.
|
||||||
* @param vendor_string The vendor string to write.
|
* @param vendor_string The vendor string to write.
|
||||||
* @param count The number of tags in m because m->count is "not allowed"
|
|
||||||
*/
|
*/
|
||||||
int ff_vorbiscomment_write(uint8_t **p, AVDictionary **m,
|
int ff_vorbiscomment_write(uint8_t **p, AVDictionary **m,
|
||||||
const char *vendor_string, const unsigned count);
|
const char *vendor_string);
|
||||||
|
|
||||||
extern const AVMetadataConv ff_vorbiscomment_metadata_conv[];
|
extern const AVMetadataConv ff_vorbiscomment_metadata_conv[];
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user