summaryrefslogtreecommitdiffstats
path: root/libmenu
diff options
context:
space:
mode:
authorben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-08-25 23:14:32 +0000
committerben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-08-25 23:14:32 +0000
commit000c89175c7792954da48402908e8d523b564743 (patch)
tree4216953a4f69adf69d09b5f185b2bdbc5e1620a2 /libmenu
parentd463c9e96d9275630a2e8e4a744bec2a5482609a (diff)
downloadmpv-000c89175c7792954da48402908e8d523b564743.tar.bz2
mpv-000c89175c7792954da48402908e8d523b564743.tar.xz
added new helpers to allow easy metadata retrieval and make libmenu use them
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@19538 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmenu')
-rw-r--r--libmenu/menu_param.c161
1 files changed, 38 insertions, 123 deletions
diff --git a/libmenu/menu_param.c b/libmenu/menu_param.c
index 0af9eb1134..84f4fbae5e 100644
--- a/libmenu/menu_param.c
+++ b/libmenu/menu_param.c
@@ -25,13 +25,7 @@
#include "menu_list.h"
#include "input/input.h"
#include "osdep/keycodes.h"
-
-#include "codec-cfg.h"
-#include "stream/stream.h"
-#include "libmpdemux/demuxer.h"
-#include "libmpdemux/stheader.h"
-
-extern demuxer_t *get_current_demuxer (void);
+#include "metadata.h"
struct list_entry_s {
struct list_entry p;
@@ -48,7 +42,7 @@ struct menu_priv_s {
char* na;
int hide_na;
};
-
+
static struct menu_priv_s cfg_dflt = {
MENU_LIST_PRIV_DFLT,
NULL,
@@ -82,8 +76,6 @@ static m_option_t cfg_fields[] = {
#define OPT_INFO_TRACK "track"
#define OPT_INFO_GENRE "genre"
-#define mp_basename(s) (strrchr(s,'/')==NULL?(char*)s:(strrchr(s,'/')+1))
-
m_option_t* mp_property_find(const char* name);
static void entry_set_text(menu_t* menu, list_entry_t* e) {
@@ -110,69 +102,6 @@ static void update_entries(menu_t* menu) {
if(e->opt) entry_set_text(menu,e);
}
-static int is_valid_video_property(char *prop) {
- demuxer_t *demuxer = get_current_demuxer ();
- sh_video_t *video = (sh_video_t *) demuxer->video->sh;
-
- if (!prop || !video)
- return 0;
-
- if (strcmp (prop, OPT_VCODEC) != 0 &&
- strcmp (prop, OPT_VBITRATE) != 0 &&
- strcmp (prop, OPT_RESOLUTION) != 0)
- return 0;
-
- return 1;
-}
-
-static int is_valid_audio_property(char *prop) {
- demuxer_t *demuxer = get_current_demuxer ();
- sh_audio_t *audio = (sh_audio_t *) demuxer->audio->sh;
-
- if (!prop || !audio)
- return 0;
-
- if (strcmp (prop, OPT_ACODEC) != 0 &&
- strcmp (prop, OPT_ABITRATE) != 0 &&
- strcmp (prop, OPT_SAMPLES) != 0)
- return 0;
-
- return 1;
-}
-
-static int is_valid_info_property(char *prop) {
- demuxer_t *demuxer = get_current_demuxer ();
-
- if (!prop || !demuxer)
- return 0;
-
- if (strcmp (prop, OPT_INFO_TITLE) != 0 &&
- strcmp (prop, OPT_INFO_ARTIST) != 0 &&
- strcmp (prop, OPT_INFO_ALBUM) != 0 &&
- strcmp (prop, OPT_INFO_YEAR) != 0 &&
- strcmp (prop, OPT_INFO_COMMENT) != 0 &&
- strcmp (prop, OPT_INFO_TRACK) != 0 &&
- strcmp (prop, OPT_INFO_GENRE) != 0)
- return 0;
-
- return 1;
-}
-
-static char *grab_demuxer_info(char *tag) {
- demuxer_t *demuxer = get_current_demuxer ();
- char **info = demuxer->info;
- int n;
-
- if (!info || !tag)
- return strdup ("");
-
- for (n = 0; info[2*n] != NULL ; n++)
- if (!strcmp (info[2*n], tag))
- break;
-
- return info[2*n+1] ? strdup (info[2*n+1]) : strdup ("");
-}
-
static int parse_args(menu_t* menu,char* args) {
char *element,*body, **attribs, *name, *meta, *val;
list_entry_t* m = NULL;
@@ -214,53 +143,34 @@ static int parse_args(menu_t* menu,char* args) {
meta = asx_get_attrib("meta",attribs);
val = NULL;
if(meta) {
- demuxer_t *demuxer = get_current_demuxer ();
- sh_video_t *video = (sh_video_t *) demuxer->video->sh;
- sh_audio_t *audio = (sh_audio_t *) demuxer->audio->sh;
- if (!strcmp (meta, OPT_NAME)) {
- extern char *filename;
- val = strdup (mp_basename (filename));
- } else if(!strcmp (meta, OPT_VCODEC) && is_valid_video_property(meta)) {
- val = (char *) malloc (8);
- if (video->format == 0x10000001)
- sprintf (val, "mpeg1");
- else if (video->format == 0x10000002)
- sprintf (val, "mpeg2");
- else if (video->format == 0x10000004)
- sprintf (val, "mpeg4");
- else if (video->format == 0x10000005)
- sprintf (val, "h264");
- else if (video->format >= 0x20202020)
- sprintf (val, "%.4s", (char *) &video->format);
- else
- sprintf (val, "0x%08X", video->format);
- } else if (!strcmp(meta, OPT_VBITRATE)&& is_valid_video_property(meta)){
- val = (char *) malloc (16);
- sprintf (val, "%d kbps", (int)(video->i_bps * 8 / 1024));
- } else if(!strcmp(meta, OPT_RESOLUTION)
- && is_valid_video_property(meta)) {
- val = (char *) malloc (16);
- sprintf(val, "%d x %d", video->disp_w, video->disp_h);
- } else if (!strcmp(meta, OPT_ACODEC) && is_valid_audio_property(meta)) {
- val = strdup (audio->codec->name);
- } else if(!strcmp(meta, OPT_ABITRATE) && is_valid_audio_property(meta)){
- val = (char *) malloc (16);
- sprintf (val, "%d kbps", (int) (audio->i_bps * 8/1000));
- } else if(!strcmp(meta, OPT_SAMPLES) && is_valid_audio_property(meta)) {
- val = (char *) malloc (16);
- sprintf (val, "%d Hz, %d ch.", audio->samplerate, audio->channels);
- } else if ((!strcmp (meta, OPT_INFO_TITLE) ||
- !strcmp (meta, OPT_INFO_ARTIST) ||
- !strcmp (meta, OPT_INFO_ALBUM) ||
- !strcmp (meta, OPT_INFO_YEAR) ||
- !strcmp (meta, OPT_INFO_COMMENT) ||
- !strcmp (meta, OPT_INFO_TRACK) ||
- !strcmp (meta, OPT_INFO_GENRE)) &&
- is_valid_info_property(meta) &&
- strcmp(grab_demuxer_info(meta), "") ) {
- val = grab_demuxer_info (meta);
- }
- }
+ if (!strcmp (meta, OPT_NAME))
+ val = get_metadata (META_NAME);
+ else if (!strcmp (meta, OPT_VCODEC))
+ val = get_metadata (META_VIDEO_CODEC);
+ else if (!strcmp(meta, OPT_VBITRATE))
+ val = get_metadata (META_VIDEO_BITRATE);
+ else if(!strcmp(meta, OPT_RESOLUTION))
+ val = get_metadata (META_VIDEO_RESOLUTION);
+ else if (!strcmp(meta, OPT_ACODEC))
+ val = get_metadata (META_AUDIO_CODEC);
+ else if(!strcmp(meta, OPT_ABITRATE))
+ val = get_metadata (META_AUDIO_BITRATE);
+ else if(!strcmp(meta, OPT_SAMPLES))
+ val = get_metadata (META_AUDIO_SAMPLES);
+ else if (!strcmp (meta, OPT_INFO_TITLE))
+ val = get_metadata (META_INFO_TITLE);
+ else if (!strcmp (meta, OPT_INFO_ARTIST))
+ val = get_metadata (META_INFO_ARTIST);
+ else if (!strcmp (meta, OPT_INFO_ALBUM))
+ val = get_metadata (META_INFO_ALBUM);
+ else if (!strcmp (meta, OPT_INFO_YEAR))
+ val = get_metadata (META_INFO_YEAR);
+ else if (!strcmp (meta, OPT_INFO_COMMENT))
+ val = get_metadata (META_INFO_COMMENT);
+ else if (!strcmp (meta, OPT_INFO_TRACK))
+ val = get_metadata (META_INFO_TRACK);
+ else if (!strcmp (meta, OPT_INFO_GENRE))
+ val = get_metadata (META_INFO_GENRE);
if (val) {
char *item = asx_get_attrib("name",attribs);
int l;
@@ -274,10 +184,15 @@ static int parse_args(menu_t* menu,char* args) {
free(val);
free(item);
menu_list_add_entry(menu,m);
- goto next_element;
}
- if (meta)
- goto next_element;
+ free (meta);
+ if (element)
+ free(element);
+ if(body)
+ free(body);
+ asx_free_attribs(attribs);
+ continue;
+ }
name = asx_get_attrib("property",attribs);
opt = name ? mp_property_find(name) : NULL;