Mercurial > mplayer.hg
comparison libmpdemux/demux_lavf.c @ 29455:7e16dc5c741b
Use new libavformat metadata API.
Patch by Anton Khirnov <wyskas@gmail.com>.
author | greg |
---|---|
date | Tue, 11 Aug 2009 23:26:42 +0000 |
parents | fb8ad1c8b5d6 |
children | 02a57b19fb92 |
comparison
equal
deleted
inserted
replaced
29454:28e5ee835b6b | 29455:7e16dc5c741b |
---|---|
420 | 420 |
421 static demuxer_t* demux_open_lavf(demuxer_t *demuxer){ | 421 static demuxer_t* demux_open_lavf(demuxer_t *demuxer){ |
422 AVFormatContext *avfc; | 422 AVFormatContext *avfc; |
423 AVFormatParameters ap; | 423 AVFormatParameters ap; |
424 const AVOption *opt; | 424 const AVOption *opt; |
425 AVMetadataTag *t = NULL; | |
425 lavf_priv_t *priv= demuxer->priv; | 426 lavf_priv_t *priv= demuxer->priv; |
426 int i; | 427 int i; |
427 char mp_filename[256]="mp:"; | 428 char mp_filename[256]="mp:"; |
428 | 429 |
429 memset(&ap, 0, sizeof(AVFormatParameters)); | 430 memset(&ap, 0, sizeof(AVFormatParameters)); |
475 if(av_find_stream_info(avfc) < 0){ | 476 if(av_find_stream_info(avfc) < 0){ |
476 mp_msg(MSGT_HEADER,MSGL_ERR,"LAVF_header: av_find_stream_info() failed\n"); | 477 mp_msg(MSGT_HEADER,MSGL_ERR,"LAVF_header: av_find_stream_info() failed\n"); |
477 return NULL; | 478 return NULL; |
478 } | 479 } |
479 | 480 |
480 if(avfc->title [0]) demux_info_add(demuxer, "title" , avfc->title ); | 481 /* Add metadata. */ |
481 if(avfc->author [0]) demux_info_add(demuxer, "author" , avfc->author ); | 482 av_metadata_conv(avfc, NULL, avfc->iformat->metadata_conv); |
482 if(avfc->copyright[0]) demux_info_add(demuxer, "copyright", avfc->copyright); | 483 while((t = av_metadata_get(avfc->metadata, "", t, AV_METADATA_IGNORE_SUFFIX))) |
483 if(avfc->comment [0]) demux_info_add(demuxer, "comments" , avfc->comment ); | 484 demux_info_add(demuxer, t->key, t->value); |
484 if(avfc->album [0]) demux_info_add(demuxer, "album" , avfc->album ); | |
485 // if(avfc->year ) demux_info_add(demuxer, "year" , avfc->year ); | |
486 // if(avfc->track ) demux_info_add(demuxer, "track" , avfc->track ); | |
487 if(avfc->genre [0]) demux_info_add(demuxer, "genre" , avfc->genre ); | |
488 | 485 |
489 for(i=0; i < avfc->nb_chapters; i++) { | 486 for(i=0; i < avfc->nb_chapters; i++) { |
490 AVChapter *c = avfc->chapters[i]; | 487 AVChapter *c = avfc->chapters[i]; |
491 uint64_t start = av_rescale_q(c->start, c->time_base, (AVRational){1,1000}); | 488 uint64_t start = av_rescale_q(c->start, c->time_base, (AVRational){1,1000}); |
492 uint64_t end = av_rescale_q(c->end, c->time_base, (AVRational){1,1000}); | 489 uint64_t end = av_rescale_q(c->end, c->time_base, (AVRational){1,1000}); |
493 demuxer_add_chapter(demuxer, c->title, start, end); | 490 t = av_metadata_get(c->metadata, "title", NULL, 0); |
491 demuxer_add_chapter(demuxer, t ? t->value : NULL, start, end); | |
494 } | 492 } |
495 | 493 |
496 if(avfc->nb_programs) { | 494 if(avfc->nb_programs) { |
497 int p, start=0, found=0; | 495 int p, start=0, found=0; |
498 | 496 |
510 } | 508 } |
511 } | 509 } |
512 p = start; | 510 p = start; |
513 do { | 511 do { |
514 AVProgram *program = avfc->programs[p]; | 512 AVProgram *program = avfc->programs[p]; |
515 mp_msg(MSGT_HEADER,MSGL_INFO,"LAVF: Program %d %s\n", program->id, (program->name ? program->name : "")); | 513 t = av_metadata_get(program->metadata, "title", NULL, 0); |
514 mp_msg(MSGT_HEADER,MSGL_INFO,"LAVF: Program %d %s\n", program->id, t ? t->value : ""); | |
516 for(i=0; i<program->nb_stream_indexes; i++) | 515 for(i=0; i<program->nb_stream_indexes; i++) |
517 handle_stream(demuxer, avfc, program->stream_index[i]); | 516 handle_stream(demuxer, avfc, program->stream_index[i]); |
518 if(!priv->cur_program && (demuxer->video->sh || demuxer->audio->sh)) | 517 if(!priv->cur_program && (demuxer->video->sh || demuxer->audio->sh)) |
519 priv->cur_program = program->id; | 518 priv->cur_program = program->id; |
520 p = (p + 1) % avfc->nb_programs; | 519 p = (p + 1) % avfc->nb_programs; |