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);