Mercurial > mplayer.hg
comparison mplayer.c @ 19532:13599373bb02
added new helpers to allow easy metadata retrieval and make libmenu use them
author | ben |
---|---|
date | Fri, 25 Aug 2006 23:14:32 +0000 |
parents | 9a59c33bee29 |
children | 0fc9a4ca9e66 |
comparison
equal
deleted
inserted
replaced
19531:2effceebd29c | 19532:13599373bb02 |
---|---|
422 #define INITED_DEMUXER 512 | 422 #define INITED_DEMUXER 512 |
423 #define INITED_ACODEC 1024 | 423 #define INITED_ACODEC 1024 |
424 #define INITED_VCODEC 2048 | 424 #define INITED_VCODEC 2048 |
425 #define INITED_ALL 0xFFFF | 425 #define INITED_ALL 0xFFFF |
426 | 426 |
427 demuxer_t *get_current_demuxer (void) { | 427 #include "metadata.h" |
428 return demuxer; | 428 |
429 #define mp_basename2(s) (strrchr(s,'/')==NULL?(char*)s:(strrchr(s,'/')+1)) | |
430 | |
431 static int is_valid_metadata_type (metadata_t type) { | |
432 switch (type) | |
433 { | |
434 /* check for valid video stream */ | |
435 case META_VIDEO_CODEC: | |
436 case META_VIDEO_BITRATE: | |
437 case META_VIDEO_RESOLUTION: | |
438 { | |
439 if (!sh_video) | |
440 return 0; | |
441 break; | |
442 } | |
443 | |
444 /* check for valid audio stream */ | |
445 case META_AUDIO_CODEC: | |
446 case META_AUDIO_BITRATE: | |
447 case META_AUDIO_SAMPLES: | |
448 { | |
449 if (!sh_audio) | |
450 return 0; | |
451 break; | |
452 } | |
453 | |
454 /* check for valid demuxer */ | |
455 case META_INFO_TITLE: | |
456 case META_INFO_ARTIST: | |
457 case META_INFO_ALBUM: | |
458 case META_INFO_YEAR: | |
459 case META_INFO_COMMENT: | |
460 case META_INFO_TRACK: | |
461 case META_INFO_GENRE: | |
462 { | |
463 if (!demuxer) | |
464 return 0; | |
465 break; | |
466 } | |
467 | |
468 default: | |
469 break; | |
470 } | |
471 | |
472 return 1; | |
473 } | |
474 | |
475 static char *get_demuxer_info (char *tag) { | |
476 char **info = demuxer->info; | |
477 int n; | |
478 | |
479 if (!info || !tag) | |
480 return NULL; | |
481 | |
482 for (n = 0; info[2*n] != NULL ; n++) | |
483 if (!strcmp (info[2*n], tag)) | |
484 break; | |
485 | |
486 return info[2*n+1] ? strdup (info[2*n+1]) : NULL; | |
487 } | |
488 | |
489 char *get_metadata (metadata_t type) { | |
490 char *meta = NULL; | |
491 | |
492 if (!is_valid_metadata_type (type)) | |
493 return NULL; | |
494 | |
495 switch (type) | |
496 { | |
497 case META_NAME: | |
498 { | |
499 return strdup (mp_basename2 (filename)); | |
500 } | |
501 | |
502 case META_VIDEO_CODEC: | |
503 { | |
504 if (sh_video->format == 0x10000001) | |
505 meta = strdup ("mpeg1"); | |
506 else if (sh_video->format == 0x10000002) | |
507 meta = strdup ("mpeg2"); | |
508 else if (sh_video->format == 0x10000004) | |
509 meta = strdup ("mpeg4"); | |
510 else if (sh_video->format == 0x10000005) | |
511 meta = strdup ("h264"); | |
512 else if (sh_video->format >= 0x20202020) | |
513 { | |
514 meta = (char *) malloc (8); | |
515 sprintf (meta, "%.4s", (char *) &sh_video->format); | |
516 } | |
517 else | |
518 { | |
519 meta = (char *) malloc (8); | |
520 sprintf (meta, "0x%08X", sh_video->format); | |
521 } | |
522 return meta; | |
523 } | |
524 | |
525 case META_VIDEO_BITRATE: | |
526 { | |
527 meta = (char *) malloc (16); | |
528 sprintf (meta, "%d kbps", (int) (sh_video->i_bps * 8 / 1024)); | |
529 return meta; | |
530 } | |
531 | |
532 case META_VIDEO_RESOLUTION: | |
533 { | |
534 meta = (char *) malloc (16); | |
535 sprintf (meta, "%d x %d", sh_video->disp_w, sh_video->disp_h); | |
536 return meta; | |
537 } | |
538 | |
539 case META_AUDIO_CODEC: | |
540 { | |
541 if (sh_audio->codec && sh_audio->codec->name) | |
542 meta = strdup (sh_audio->codec->name); | |
543 return meta; | |
544 } | |
545 | |
546 case META_AUDIO_BITRATE: | |
547 { | |
548 meta = (char *) malloc (16); | |
549 sprintf (meta, "%d kbps", (int) (sh_audio->i_bps * 8/1000)); | |
550 return meta; | |
551 } | |
552 | |
553 case META_AUDIO_SAMPLES: | |
554 { | |
555 meta = (char *) malloc (16); | |
556 sprintf (meta, "%d Hz, %d ch.", sh_audio->samplerate, sh_audio->channels); | |
557 return meta; | |
558 } | |
559 | |
560 /* check for valid demuxer */ | |
561 case META_INFO_TITLE: | |
562 return get_demuxer_info ("Title"); | |
563 | |
564 case META_INFO_ARTIST: | |
565 return get_demuxer_info ("Artist"); | |
566 | |
567 case META_INFO_ALBUM: | |
568 return get_demuxer_info ("Album"); | |
569 | |
570 case META_INFO_YEAR: | |
571 return get_demuxer_info ("Year"); | |
572 | |
573 case META_INFO_COMMENT: | |
574 return get_demuxer_info ("Comment"); | |
575 | |
576 case META_INFO_TRACK: | |
577 return get_demuxer_info ("Track"); | |
578 | |
579 case META_INFO_GENRE: | |
580 return get_demuxer_info ("Genre"); | |
581 | |
582 default: | |
583 break; | |
584 } | |
585 | |
586 return meta; | |
429 } | 587 } |
430 | 588 |
431 static void uninit_player(unsigned int mask){ | 589 static void uninit_player(unsigned int mask){ |
432 mask=inited_flags&mask; | 590 mask=inited_flags&mask; |
433 | 591 |
742 mp_cmd_free(cmd); | 900 mp_cmd_free(cmd); |
743 } | 901 } |
744 return eof; | 902 return eof; |
745 } | 903 } |
746 | 904 |
747 #define mp_basename2(s) (strrchr(s,'/')==NULL?(char*)s:(strrchr(s,'/')+1)) | |
748 #define mp_basename(s) (strrchr(s,'\\')==NULL?(mp_basename2(s)):(strrchr(s,'\\')+1)) | 905 #define mp_basename(s) (strrchr(s,'\\')==NULL?(mp_basename2(s)):(strrchr(s,'\\')+1)) |
749 | 906 |
750 int playtree_add_playlist(play_tree_t* entry) | 907 int playtree_add_playlist(play_tree_t* entry) |
751 { | 908 { |
752 play_tree_add_bpf(entry,filename); | 909 play_tree_add_bpf(entry,filename); |