mirror of https://github.com/FFmpeg/FFmpeg.git
Patch by James Darnley <james darnley at gmail>. Originally committed as revision 22605 to svn://svn.ffmpeg.org/ffmpeg/trunkrelease/0.6
parent
64f6e357fd
commit
66061a1220
12 changed files with 207 additions and 25 deletions
@ -0,0 +1,73 @@ |
|||||||
|
/*
|
||||||
|
* VorbisComment writer |
||||||
|
* Copyright (c) 2009 James Darnley |
||||||
|
* |
||||||
|
* This file is part of FFmpeg. |
||||||
|
* |
||||||
|
* FFmpeg is free software; you can redistribute it and/or |
||||||
|
* modify it under the terms of the GNU Lesser General Public |
||||||
|
* License as published by the Free Software Foundation; either |
||||||
|
* version 2.1 of the License, or (at your option) any later version. |
||||||
|
* |
||||||
|
* FFmpeg is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||||
|
* Lesser General Public License for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU Lesser General Public |
||||||
|
* License along with FFmpeg; if not, write to the Free Software |
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "avformat.h" |
||||||
|
#include "metadata.h" |
||||||
|
#include "vorbiscomment.h" |
||||||
|
#include "libavcodec/bytestream.h" |
||||||
|
|
||||||
|
/**
|
||||||
|
* VorbisComment metadata conversion mapping. |
||||||
|
* from Ogg Vorbis I format specification: comment field and header specification |
||||||
|
* http://xiph.org/vorbis/doc/v-comment.html
|
||||||
|
*/ |
||||||
|
const AVMetadataConv ff_vorbiscomment_metadata_conv[] = { |
||||||
|
{ "ALBUMARTIST", "album_artist"}, |
||||||
|
{ "TRACKNUMBER", "track" }, |
||||||
|
{ 0 } |
||||||
|
}; |
||||||
|
|
||||||
|
int ff_vorbiscomment_length(AVMetadata *m, const char *vendor_string, |
||||||
|
unsigned *count) |
||||||
|
{ |
||||||
|
int len = 8; |
||||||
|
len += strlen(vendor_string); |
||||||
|
*count = 0; |
||||||
|
if (m) { |
||||||
|
AVMetadataTag *tag = NULL; |
||||||
|
while ( (tag = av_metadata_get(m, "", tag, AV_METADATA_IGNORE_SUFFIX) ) ) { |
||||||
|
len += 4 +strlen(tag->key) + 1 + strlen(tag->value); |
||||||
|
(*count)++; |
||||||
|
} |
||||||
|
} |
||||||
|
return len; |
||||||
|
} |
||||||
|
|
||||||
|
int ff_vorbiscomment_write(uint8_t **p, AVMetadata *m, |
||||||
|
const char *vendor_string, const unsigned count) |
||||||
|
{ |
||||||
|
bytestream_put_le32(p, strlen(vendor_string)); |
||||||
|
bytestream_put_buffer(p, vendor_string, strlen(vendor_string)); |
||||||
|
if (m) { |
||||||
|
AVMetadataTag *tag = NULL; |
||||||
|
bytestream_put_le32(p, count); |
||||||
|
while ( (tag = av_metadata_get(m, "", tag, AV_METADATA_IGNORE_SUFFIX) ) ) { |
||||||
|
unsigned int len1 = strlen(tag->key); |
||||||
|
unsigned int len2 = strlen(tag->value); |
||||||
|
bytestream_put_le32(p, len1+1+len2); |
||||||
|
bytestream_put_buffer(p, tag->key, len1); |
||||||
|
bytestream_put_byte(p, '='); |
||||||
|
bytestream_put_buffer(p, tag->value, len2); |
||||||
|
} |
||||||
|
} else |
||||||
|
bytestream_put_le32(p, 0); |
||||||
|
return 0; |
||||||
|
} |
@ -0,0 +1,57 @@ |
|||||||
|
/*
|
||||||
|
* VorbisComment writer |
||||||
|
* Copyright (c) 2009 James Darnley |
||||||
|
* |
||||||
|
* This file is part of FFmpeg. |
||||||
|
* |
||||||
|
* FFmpeg is free software; you can redistribute it and/or |
||||||
|
* modify it under the terms of the GNU Lesser General Public |
||||||
|
* License as published by the Free Software Foundation; either |
||||||
|
* version 2.1 of the License, or (at your option) any later version. |
||||||
|
* |
||||||
|
* FFmpeg is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||||
|
* Lesser General Public License for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU Lesser General Public |
||||||
|
* License along with FFmpeg; if not, write to the Free Software |
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef AVFORMAT_VORBISCOMMENT_H |
||||||
|
#define AVFORMAT_VORBISCOMMENT_H |
||||||
|
|
||||||
|
#include "avformat.h" |
||||||
|
#include "metadata.h" |
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates the length in bytes of a VorbisComment. This is the minimum |
||||||
|
* size required by ff_vorbiscomment_write(). |
||||||
|
* |
||||||
|
* @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. |
||||||
|
* 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. |
||||||
|
*/ |
||||||
|
int ff_vorbiscomment_length(AVMetadata *m, const char *vendor_string, |
||||||
|
unsigned *count); |
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes a VorbisComment into a buffer. The buffer, p, must have enough |
||||||
|
* data to hold the whole VorbisComment. The minimum size required can be |
||||||
|
* obtained by passing the same AVMetadata and vendor_string to |
||||||
|
* ff_vorbiscomment_length() |
||||||
|
* |
||||||
|
* @param p The buffer in which to write. |
||||||
|
* @param m The metadata struct 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, AVMetadata *m, |
||||||
|
const char *vendor_string, const unsigned count); |
||||||
|
|
||||||
|
extern const AVMetadataConv ff_vorbiscomment_metadata_conv[]; |
||||||
|
|
||||||
|
#endif /* AVFORMAT_VORBISCOMMENT_H */ |
@ -1,4 +1,4 @@ |
|||||||
7781a016edfc242a39e4d65af02d861a *./tests/data/acodec/flac.flac |
151eef9097f944726968bec48649f00a *./tests/data/acodec/flac.flac |
||||||
353368 ./tests/data/acodec/flac.flac |
361582 ./tests/data/acodec/flac.flac |
||||||
95e54b261530a1bcf6de6fe3b21dc5f6 *./tests/data/flac.acodec.out.wav |
95e54b261530a1bcf6de6fe3b21dc5f6 *./tests/data/flac.acodec.out.wav |
||||||
stddev: 0.00 PSNR:999.99 bytes: 1058444/ 1058444 |
stddev: 0.00 PSNR:999.99 bytes: 1058444/ 1058444 |
||||||
|
Loading…
Reference in new issue