~ubuntu-branches/ubuntu/trusty/ffmpeg-debian/trusty

« back to all changes in this revision

Viewing changes to libavformat/asf.c

  • Committer: Bazaar Package Importer
  • Author(s): Reinhard Tartler
  • Date: 2009-02-05 21:22:01 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20090205212201-hjhtybuxtm90cbjy
Tags: 3:0.svn20090204-2ubuntu1
* merge from debian. Remaining changes:
  - don't build depend on libfaad-dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 * ASF compatible demuxer
3
 
 * Copyright (c) 2000, 2001 Fabrice Bellard.
 
3
 * Copyright (c) 2000, 2001 Fabrice Bellard
4
4
 *
5
5
 * This file is part of FFmpeg.
6
6
 *
141
141
    }
142
142
}
143
143
 
 
144
static void get_tag(AVFormatContext *s, const char *key, int type, int len)
 
145
{
 
146
    char value[1024];
 
147
    if (type <= 1) {         // unicode or byte
 
148
        get_str16_nolen(s->pb, len, value, sizeof(value));
 
149
    } else if (type <= 5) {  // boolean or DWORD or QWORD or WORD
 
150
        uint64_t num = get_value(s->pb, type);
 
151
        snprintf(value, sizeof(value), "%"PRIu64, num);
 
152
    } else {
 
153
        url_fskip(s->pb, len);
 
154
        return;
 
155
    }
 
156
    if (strncmp(key, "WM/", 3))
 
157
        key += 3;
 
158
    av_metadata_set(&s->metadata, key, value);
 
159
}
 
160
 
144
161
static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
145
162
{
146
163
    ASFContext *asf = s->priv_data;
357
374
            len3 = get_le16(pb);
358
375
            len4 = get_le16(pb);
359
376
            len5 = get_le16(pb);
360
 
            get_str16_nolen(pb, len1, s->title    , sizeof(s->title));
361
 
            get_str16_nolen(pb, len2, s->author   , sizeof(s->author));
362
 
            get_str16_nolen(pb, len3, s->copyright, sizeof(s->copyright));
363
 
            get_str16_nolen(pb, len4, s->comment  , sizeof(s->comment));
 
377
            get_tag(s, "title"    , 0, len1);
 
378
            get_tag(s, "author"   , 0, len2);
 
379
            get_tag(s, "copyright", 0, len3);
 
380
            get_tag(s, "comment"  , 0, len4);
364
381
            url_fskip(pb, len5);
365
382
        } else if (!memcmp(&g, &stream_bitrate_guid, sizeof(GUID))) {
366
383
            int stream_count = get_le16(pb);
384
401
                for(i=0;i<desc_count;i++)
385
402
                {
386
403
                        int name_len,value_type,value_len;
387
 
                        uint64_t value_num = 0;
388
404
                        char name[1024];
389
405
 
390
406
                        name_len = get_le16(pb);
391
407
                        get_str16_nolen(pb, name_len, name, sizeof(name));
392
408
                        value_type = get_le16(pb);
393
409
                        value_len = get_le16(pb);
394
 
                        if (value_type <= 1) // unicode or byte
395
 
                        {
396
 
                                if     (!strcmp(name,"WM/AlbumTitle")) get_str16_nolen(pb, value_len, s->album, sizeof(s->album));
397
 
                                else if(!strcmp(name,"WM/Genre"     )) get_str16_nolen(pb, value_len, s->genre, sizeof(s->genre));
398
 
                                else if(!strcmp(name,"WM/Year"      )) {
399
 
                                    char year[8];
400
 
                                    get_str16_nolen(pb, value_len, year, sizeof(year));
401
 
                                    s->year = atoi(year);
402
 
                                }
403
 
                                else if(!strcmp(name,"WM/Track") && s->track == 0) {
404
 
                                    char track[8];
405
 
                                    get_str16_nolen(pb, value_len, track, sizeof(track));
406
 
                                    s->track = strtol(track, NULL, 10) + 1;
407
 
                                }
408
 
                                else if(!strcmp(name,"WM/TrackNumber")) {
409
 
                                    char track[8];
410
 
                                    get_str16_nolen(pb, value_len, track, sizeof(track));
411
 
                                    s->track = strtol(track, NULL, 10);
412
 
                                }
413
 
                                else url_fskip(pb, value_len);
414
 
                        }
415
 
                        else if (value_type <= 5) // boolean or DWORD or QWORD or WORD
416
 
                        {
417
 
                                value_num= get_value(pb, value_type);
418
 
                                if (!strcmp(name,"WM/Track"      ) && s->track == 0) s->track = value_num + 1;
419
 
                                if (!strcmp(name,"WM/TrackNumber")) s->track = value_num;
420
 
                        }else
421
 
                            url_fskip(pb, value_len);
 
410
                        get_tag(s, name, value_type, value_len);
422
411
                }
423
412
        } else if (!memcmp(&g, &metadata_header, sizeof(GUID))) {
424
413
            int n, stream_num, name_len, value_len, value_type, value_num;