Browse Source

Merge commit 'efcde917af407a6031ecff68edd51fce7b83d104'

* commit 'efcde917af407a6031ecff68edd51fce7b83d104':
  vorbiscomment: simplify API by using av_dict_count()

Conflicts:
	libavformat/flacenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
tags/n2.3
Michael Niedermayer 11 years ago
parent
commit
dff4aa6afd
4 changed files with 10 additions and 16 deletions
  1. +3
    -3
      libavformat/flacenc.c
  2. +2
    -3
      libavformat/oggenc.c
  3. +3
    -5
      libavformat/vorbiscomment.c
  4. +2
    -5
      libavformat/vorbiscomment.h

+ 3
- 3
libavformat/flacenc.c View File

@@ -47,12 +47,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 ? "ffmpeg" : LIBAVFORMAT_IDENT; const char *vendor = bitexact ? "ffmpeg" : 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);
@@ -60,7 +60,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);


+ 2
- 3
libavformat/oggenc.c View File

@@ -277,18 +277,17 @@ static uint8_t *ogg_write_vorbiscomment(int offset, int bitexact,
const char *vendor = bitexact ? "ffmpeg" : LIBAVFORMAT_IDENT; const char *vendor = bitexact ? "ffmpeg" : 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);




+ 3
- 5
libavformat/vorbiscomment.c View File

@@ -38,28 +38,26 @@ const AVMetadataConv ff_vorbiscomment_metadata_conv[] = {
{ 0 } { 0 }
}; };


int ff_vorbiscomment_length(AVDictionary *m, const char *vendor_string,
unsigned *count)
int ff_vorbiscomment_length(AVDictionary *m, const char *vendor_string)
{ {
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))) {


+ 2
- 5
libavformat/vorbiscomment.h View File

@@ -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,
unsigned *count);
int ff_vorbiscomment_length(AVDictionary *m, const char *vendor_string);


/** /**
* 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…
Cancel
Save