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;