>>+ if (genre < 1 || genre > ID3v1_GENRE_MAX) genre = 1;
>I'm not sure making up the '1' value is a good idea -- we should export
>what's stored in the file if it's valid or nothing at all. I'd just
>print a warning for invalid genre number and return.
Okay, so what about just returning 0? If the atom is broken, nothing gets
displayed.
Raivo
---
libavformat/mov.c | 19 +++++++++++++++++++
1 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 6baddeb..b13484c 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -35,6 +35,7 @@
#include "riff.h"
#include "isom.h"
#include "libavcodec/get_bits.h"
+#include "id3v1.h"
#if CONFIG_ZLIB
#include <zlib.h>
@@ -126,6 +127,22 @@ static int mov_metadata_stik(MOVContext *c, AVIOContext
*pb,
return 0;
}
+static int mov_metadata_gnre(MOVContext *c, AVIOContext *pb,
+ unsigned len, const char *key)
+{
+ short genre;
+ char buf[20];
+
+ avio_r8(pb); // unknown
+
+ genre = avio_r8(pb);
+ if (genre < 1 || genre > ID3v1_GENRE_MAX) return 0;
+ snprintf(buf, sizeof(buf), "%s", ff_id3v1_genre_str[genre-1]);
+ av_dict_set(&c->fc->metadata, key, buf, 0);
+
+ return 0;
+}
+
static const uint32_t mac_to_unicode[128] = {
0x00C4,0x00C5,0x00C7,0x00C9,0x00D1,0x00D6,0x00DC,0x00E1,
0x00E0,0x00E2,0x00E4,0x00E3,0x00E5,0x00E7,0x00E9,0x00E8,
@@ -187,6 +204,8 @@ static int mov_read_udta_string(MOVContext *c, AVIOContext
*pb, MOVAtom atom)
case MKTAG(0xa9,'a','l','b'): key = "album"; break;
case MKTAG(0xa9,'d','a','y'): key = "date"; break;
case MKTAG(0xa9,'g','e','n'): key = "genre"; break;
+ case MKTAG( 'g','n','r','e'): key = "genre";
+ parse = mov_metadata_gnre; break;
case MKTAG(0xa9,'t','o','o'):
case MKTAG(0xa9,'s','w','r'): key = "encoder"; break;
case MKTAG(0xa9,'e','n','c'): key = "encoder"; break;
--
1.7.5.4
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel