Mercurial > libavformat.hg
comparison rmdec.c @ 4522:aaf07b2acb3c libavformat
use new metadata API in rm (de)muxer
author | aurel |
---|---|
date | Tue, 17 Feb 2009 21:40:38 +0000 |
parents | e6caa2faebb3 |
children | 74b5224649c0 |
comparison
equal
deleted
inserted
replaced
4521:51119f565c6c | 4522:aaf07b2acb3c |
---|---|
70 static void get_str8(ByteIOContext *pb, char *buf, int buf_size) | 70 static void get_str8(ByteIOContext *pb, char *buf, int buf_size) |
71 { | 71 { |
72 get_strl(pb, buf, buf_size, get_byte(pb)); | 72 get_strl(pb, buf, buf_size, get_byte(pb)); |
73 } | 73 } |
74 | 74 |
75 static void rm_read_metadata(AVFormatContext *s, int wide) | |
76 { | |
77 char buf[1024]; | |
78 int i; | |
79 for (i=0; i<FF_ARRAY_ELEMS(ff_rm_metadata); i++) { | |
80 int len = wide ? get_be16(s->pb) : get_byte(s->pb); | |
81 get_strl(s->pb, buf, sizeof(buf), len); | |
82 av_metadata_set(&s->metadata, ff_rm_metadata[i], buf); | |
83 } | |
84 } | |
85 | |
75 RMStream *ff_rm_alloc_rmstream (void) | 86 RMStream *ff_rm_alloc_rmstream (void) |
76 { | 87 { |
77 RMStream *rms = av_mallocz(sizeof(RMStream)); | 88 RMStream *rms = av_mallocz(sizeof(RMStream)); |
78 rms->curpic_num = -1; | 89 rms->curpic_num = -1; |
79 return rms; | 90 return rms; |
93 /* ra type header */ | 104 /* ra type header */ |
94 version = get_be32(pb); /* version */ | 105 version = get_be32(pb); /* version */ |
95 if (((version >> 16) & 0xff) == 3) { | 106 if (((version >> 16) & 0xff) == 3) { |
96 int64_t startpos = url_ftell(pb); | 107 int64_t startpos = url_ftell(pb); |
97 url_fskip(pb, 14); | 108 url_fskip(pb, 14); |
98 get_str8(pb, s->title, sizeof(s->title)); | 109 rm_read_metadata(s, 0); |
99 get_str8(pb, s->author, sizeof(s->author)); | |
100 get_str8(pb, s->copyright, sizeof(s->copyright)); | |
101 get_str8(pb, s->comment, sizeof(s->comment)); | |
102 if ((startpos + (version & 0xffff)) >= url_ftell(pb) + 2) { | 110 if ((startpos + (version & 0xffff)) >= url_ftell(pb) + 2) { |
103 // fourcc (should always be "lpcJ") | 111 // fourcc (should always be "lpcJ") |
104 get_byte(pb); | 112 get_byte(pb); |
105 get_str8(pb, buf, sizeof(buf)); | 113 get_str8(pb, buf, sizeof(buf)); |
106 } | 114 } |
211 } | 219 } |
212 if (read_all) { | 220 if (read_all) { |
213 get_byte(pb); | 221 get_byte(pb); |
214 get_byte(pb); | 222 get_byte(pb); |
215 get_byte(pb); | 223 get_byte(pb); |
216 | 224 rm_read_metadata(s, 0); |
217 get_str8(pb, s->title, sizeof(s->title)); | |
218 get_str8(pb, s->author, sizeof(s->author)); | |
219 get_str8(pb, s->copyright, sizeof(s->copyright)); | |
220 get_str8(pb, s->comment, sizeof(s->comment)); | |
221 } | 225 } |
222 } | 226 } |
223 return 0; | 227 return 0; |
224 } | 228 } |
225 | 229 |
362 get_be32(pb); /* data offset */ | 366 get_be32(pb); /* data offset */ |
363 get_be16(pb); /* nb streams */ | 367 get_be16(pb); /* nb streams */ |
364 flags = get_be16(pb); /* flags */ | 368 flags = get_be16(pb); /* flags */ |
365 break; | 369 break; |
366 case MKTAG('C', 'O', 'N', 'T'): | 370 case MKTAG('C', 'O', 'N', 'T'): |
367 get_str16(pb, s->title, sizeof(s->title)); | 371 rm_read_metadata(s, 1); |
368 get_str16(pb, s->author, sizeof(s->author)); | |
369 get_str16(pb, s->copyright, sizeof(s->copyright)); | |
370 get_str16(pb, s->comment, sizeof(s->comment)); | |
371 break; | 372 break; |
372 case MKTAG('M', 'D', 'P', 'R'): | 373 case MKTAG('M', 'D', 'P', 'R'): |
373 st = av_new_stream(s, 0); | 374 st = av_new_stream(s, 0); |
374 if (!st) | 375 if (!st) |
375 return AVERROR(ENOMEM); | 376 return AVERROR(ENOMEM); |