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