Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-gpu
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-gpu
Commits
e398a81b
Commit
e398a81b
authored
Sep 24, 2006
by
Antoine Cellerier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Some more meta changes (mostly cleanup and check the i_mandatory flags)
parent
6d6d53e1
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
104 additions
and
173 deletions
+104
-173
include/vlc_input.h
include/vlc_input.h
+3
-0
include/vlc_meta.h
include/vlc_meta.h
+2
-0
include/vlc_symbols.h
include/vlc_symbols.h
+6
-0
modules/meta_engine/Modules.am
modules/meta_engine/Modules.am
+0
-1
modules/meta_engine/dummy.c
modules/meta_engine/dummy.c
+0
-121
modules/meta_engine/folder.c
modules/meta_engine/folder.c
+8
-1
modules/meta_engine/musicbrainz.c
modules/meta_engine/musicbrainz.c
+8
-1
src/input/meta.c
src/input/meta.c
+74
-37
src/input/subtitles.c
src/input/subtitles.c
+3
-12
No files found.
include/vlc_input.h
View file @
e398a81b
...
...
@@ -538,4 +538,7 @@ VLC_EXPORT( void, input_DecoderDecode,( decoder_t *, block_t * ) );
VLC_EXPORT
(
vlc_bool_t
,
input_AddSubtitles
,
(
input_thread_t
*
,
char
*
,
vlc_bool_t
)
);
VLC_EXPORT
(
int
,
input_DownloadAndCacheArt
,
(
vlc_object_t
*
p_parent
,
input_item_t
*
p_item
)
);
#endif
include/vlc_meta.h
View file @
e398a81b
...
...
@@ -225,4 +225,6 @@ struct meta_engine_t
input_item_t
*
p_item
;
};
VLC_EXPORT
(
uint32_t
,
input_GetMetaEngineFlags
,
(
vlc_meta_t
*
p_meta
)
);
#endif
include/vlc_symbols.h
View file @
e398a81b
...
...
@@ -544,6 +544,8 @@ struct module_symbols_t
int
(
*
input_ItemAddInfo_inner
)
(
input_item_t
*
p_i
,
const
char
*
psz_cat
,
const
char
*
psz_name
,
const
char
*
psz_format
,
...);
void
(
*
input_ItemAddOptionNoDup_inner
)
(
input_item_t
*
,
const
char
*
);
int
(
*
__input_MetaFetch_inner
)
(
vlc_object_t
*
,
input_item_t
*
);
int
(
*
input_DownloadAndCacheArt_inner
)
(
vlc_object_t
*
p_parent
,
input_item_t
*
p_item
);
uint32_t
(
*
input_GetMetaEngineFlags_inner
)
(
vlc_meta_t
*
p_meta
);
};
# if defined (__PLUGIN__)
# define aout_FiltersCreatePipeline (p_symbols)->aout_FiltersCreatePipeline_inner
...
...
@@ -1018,6 +1020,8 @@ struct module_symbols_t
# define input_ItemAddInfo (p_symbols)->input_ItemAddInfo_inner
# define input_ItemAddOptionNoDup (p_symbols)->input_ItemAddOptionNoDup_inner
# define __input_MetaFetch (p_symbols)->__input_MetaFetch_inner
# define input_DownloadAndCacheArt (p_symbols)->input_DownloadAndCacheArt_inner
# define input_GetMetaEngineFlags (p_symbols)->input_GetMetaEngineFlags_inner
# elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__)
/******************************************************************
* STORE_SYMBOLS: store VLC APIs into p_symbols for plugin access.
...
...
@@ -1495,6 +1499,8 @@ struct module_symbols_t
((p_symbols)->input_ItemAddInfo_inner) = input_ItemAddInfo; \
((p_symbols)->input_ItemAddOptionNoDup_inner) = input_ItemAddOptionNoDup; \
((p_symbols)->__input_MetaFetch_inner) = __input_MetaFetch; \
((p_symbols)->input_DownloadAndCacheArt_inner) = input_DownloadAndCacheArt; \
((p_symbols)->input_GetMetaEngineFlags_inner) = input_GetMetaEngineFlags; \
(p_symbols)->net_ConvertIPv4_deprecated = NULL; \
(p_symbols)->vlc_input_item_GetInfo_deprecated = NULL; \
(p_symbols)->vlc_input_item_AddInfo_deprecated = NULL; \
...
...
modules/meta_engine/Modules.am
View file @
e398a81b
SOURCES_musicbrainz = musicbrainz.c
SOURCES_dummy = dummy.c
SOURCES_folder = folder.c
SOURCES_taglib = taglib.cpp
SOURCES_id3tag = id3tag.c id3genres.h $(NULL)
modules/meta_engine/dummy.c
deleted
100644 → 0
View file @
6d6d53e1
/*****************************************************************************
* dummy.c
*****************************************************************************
* Copyright (C) 2006 the VideoLAN team
* $Id$
*
* Authors: Antoine Cellerier <dionoea -at- videolan -dot- org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#define _GNU_SOURCE
#include <stdlib.h>
/* malloc(), free() */
#include <vlc/vlc.h>
#include <vlc/intf.h>
#include <vlc_meta.h>
#include <vlc_meta.h>
#include <charset.h>
#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
/*****************************************************************************
* Local prototypes
*****************************************************************************/
static
int
FindMeta
(
vlc_object_t
*
);
/*****************************************************************************
* Module descriptor
*****************************************************************************/
vlc_module_begin
();
/* set_category( CAT_INTERFACE );
set_subcategory( SUBCAT_INTERFACE_CONTROL );*/
set_shortname
(
N_
(
"Dummy"
)
);
set_description
(
_
(
"Dummy meta data"
)
);
set_capability
(
"meta engine"
,
0
);
set_callbacks
(
FindMeta
,
NULL
);
vlc_module_end
();
/*****************************************************************************
*****************************************************************************/
static
int
FindMeta
(
vlc_object_t
*
p_this
)
{
meta_engine_t
*
p_me
=
(
meta_engine_t
*
)
p_this
;
input_item_t
*
p_item
=
p_me
->
p_item
;
if
(
!
p_item
->
p_meta
)
return
VLC_EGENERIC
;
uint32_t
i_meta
=
0
;
#define CHECK( a, b ) \
if( p_item->p_meta->psz_ ## a && *p_item->p_meta->psz_ ## a ) \
i_meta |= VLC_META_ENGINE_ ## b;
CHECK
(
title
,
TITLE
)
CHECK
(
author
,
AUTHOR
)
CHECK
(
artist
,
ARTIST
)
CHECK
(
genre
,
GENRE
)
CHECK
(
copyright
,
COPYRIGHT
)
CHECK
(
album
,
COLLECTION
)
CHECK
(
tracknum
,
SEQ_NUM
)
CHECK
(
description
,
DESCRIPTION
)
CHECK
(
rating
,
RATING
)
CHECK
(
date
,
DATE
)
CHECK
(
url
,
URL
)
CHECK
(
language
,
LANGUAGE
)
CHECK
(
arturl
,
ART_URL
)
if
(
!
(
i_meta
&
VLC_META_ENGINE_ART_URL
)
&&
(
p_me
->
i_mandatory
&
VLC_META_ENGINE_ART_URL
)
)
{
if
(
i_meta
&
VLC_META_ENGINE_COLLECTION
&&
i_meta
&
VLC_META_ENGINE_ARTIST
)
{
char
*
psz_filename
;
struct
stat
a
;
asprintf
(
&
psz_filename
,
"file://%s"
DIR_SEP
CONFIG_DIR
DIR_SEP
"art"
DIR_SEP
"%s"
DIR_SEP
"%s"
DIR_SEP
"art.jpg"
,
/* ahem ... we can have other filetype too... */
p_me
->
p_libvlc
->
psz_homedir
,
p_item
->
p_meta
->
psz_artist
,
p_item
->
p_meta
->
psz_album
);
if
(
utf8_stat
(
psz_filename
+
7
,
&
a
)
!=
-
1
)
{
vlc_meta_SetArtURL
(
p_item
->
p_meta
,
psz_filename
);
i_meta
|=
VLC_META_ENGINE_ART_URL
;
}
free
(
psz_filename
);
}
}
/* Add checks for musicbrainz meta */
if
(
(
p_me
->
i_mandatory
&
i_meta
)
==
p_me
->
i_mandatory
)
{
return
VLC_SUCCESS
;
}
else
{
return
VLC_EGENERIC
;
}
}
modules/meta_engine/folder.c
View file @
e398a81b
...
...
@@ -67,6 +67,7 @@ static int FindMeta( vlc_object_t *p_this )
meta_engine_t
*
p_me
=
(
meta_engine_t
*
)
p_this
;
input_item_t
*
p_item
=
p_me
->
p_item
;
vlc_bool_t
b_have_art
=
VLC_FALSE
;
uint32_t
i_meta
;
if
(
!
p_item
->
p_meta
)
return
VLC_EGENERIC
;
...
...
@@ -123,5 +124,11 @@ static int FindMeta( vlc_object_t *p_this )
free
(
psz_dir
);
}
return
VLC_SUCCESS
;
i_meta
=
input_GetMetaEngineFlags
(
p_item
->
p_meta
);
p_me
->
i_mandatory
&=
~
i_meta
;
p_me
->
i_optional
&=
~
i_meta
;
if
(
p_me
->
i_mandatory
)
return
VLC_EGENERIC
;
else
return
VLC_SUCCESS
;
}
modules/meta_engine/musicbrainz.c
View file @
e398a81b
...
...
@@ -67,6 +67,7 @@ static int FindMeta( vlc_object_t *p_this )
char
psz_data
[
256
];
char
i_album_count
,
i
;
char
*
ppsz_args
[
4
];
uint32_t
i_meta
;
if
(
!
p_item
->
p_meta
)
return
VLC_EGENERIC
;
psz_artist
=
p_item
->
p_meta
->
psz_artist
;
...
...
@@ -132,5 +133,11 @@ static int FindMeta( vlc_object_t *p_this )
mb_Delete
(
p_mb
);
return
VLC_SUCCESS
;
i_meta
=
input_GetMetaEngineFlags
(
p_item
->
p_meta
);
p_me
->
i_mandatory
&=
~
i_meta
;
p_me
->
i_optional
&=
~
i_meta
;
if
(
p_me
->
i_mandatory
)
return
VLC_EGENERIC
;
else
return
VLC_SUCCESS
;
}
src/input/meta.c
View file @
e398a81b
...
...
@@ -32,35 +32,48 @@
# include <sys/stat.h>
#endif
int
input_FindArt
(
vlc_object_t
*
p_parent
,
input_item_t
*
p_item
);
int
__input_MetaFetch
(
vlc_object_t
*
p_parent
,
input_item_t
*
p_item
)
{
struct
meta_engine_t
*
p_me
;
uint32_t
i_mandatory
=
0
,
i_optional
=
0
,
i_meta
;
int
i_policy
;
/* FIXME: don't launch any module if we already have all the needed
* info. Easiest way to do this would be to add a dummy module.
* I'll do that later */
if
(
!
p_item
->
p_meta
)
return
VLC_EGENERIC
;
p_me
=
vlc_object_create
(
p_parent
,
VLC_OBJECT_META_ENGINE
);
p_me
->
i_flags
|=
OBJECT_FLAGS_NOINTERACT
;
p_me
->
i_mandatory
=
VLC_META_ENGINE_TITLE
|
VLC_META_ENGINE_ARTIST
;
p_me
->
i_optional
=
0
;
/*
if( var_CreateGetInteger( p_parent, "album-art" ) != ALBUM_ART_NEVER )
i_policy
=
var_CreateGetInteger
(
p_parent
,
"album-art"
);
i_mandatory
=
VLC_META_ENGINE_TITLE
|
VLC_META_ENGINE_ARTIST
;
if
(
i_policy
==
ALBUM_ART_ALL
)
{
p_me->
i_mandatory |= VLC_META_ENGINE_ART_URL;
i_mandatory
|=
VLC_META_ENGINE_ART_URL
;
}
else
{
p_me->
i_optional |= VLC_META_ENGINE_ART_URL;
i_optional
|=
VLC_META_ENGINE_ART_URL
;
}
*/
input_FindArt
(
p_parent
,
p_item
);
i_meta
=
input_GetMetaEngineFlags
(
p_item
->
p_meta
);
i_mandatory
&=
~
i_meta
;
i_optional
&=
~
i_meta
;
if
(
!
i_mandatory
)
return
VLC_SUCCESS
;
p_me
=
vlc_object_create
(
p_parent
,
VLC_OBJECT_META_ENGINE
);
p_me
->
i_flags
|=
OBJECT_FLAGS_NOINTERACT
;
p_me
->
i_mandatory
=
i_mandatory
;
p_me
->
i_optional
=
i_optional
;
p_me
->
p_item
=
p_item
;
p_me
->
p_module
=
module_Need
(
p_me
,
"meta fetcher"
,
0
,
VLC_FALSE
);
vlc_object_attach
(
p_me
,
p_parent
);
if
(
!
p_me
->
p_module
)
{
msg_Err
(
p_parent
,
"no suitable meta
engine
module"
);
msg_Err
(
p_parent
,
"no suitable meta
fetcher
module"
);
vlc_object_detach
(
p_me
);
vlc_object_destroy
(
p_me
);
return
VLC_EGENERIC
;
...
...
@@ -68,6 +81,7 @@ int __input_MetaFetch( vlc_object_t *p_parent, input_item_t *p_item )
module_Unneed
(
p_me
,
p_me
->
p_module
);
vlc_object_detach
(
p_me
);
vlc_object_destroy
(
p_me
);
return
VLC_SUCCESS
;
...
...
@@ -82,36 +96,34 @@ int input_FindArt( vlc_object_t *p_parent, input_item_t *p_item )
char
*
psz_album
;
char
*
psz_type
;
char
psz_filename
[
MAX_PATH
];
int
i
_ret
;
int
i
;
struct
stat
a
;
const
char
ppsz_type
[]
=
{
".jpg"
,
".png"
,
".gif"
,
".bmp"
,
""
};
if
(
!
p_item
->
p_meta
)
return
VLC_EGENERIC
;
psz_artist
=
p_item
->
p_meta
->
psz_artist
;
psz_album
=
p_item
->
p_meta
->
psz_album
;
//FIXME !!!!!
psz_type
=
strdup
(
"jpg"
);
snprintf
(
psz_filename
,
MAX_PATH
,
"file://%s"
DIR_SEP
CONFIG_DIR
DIR_SEP
"art"
DIR_SEP
"%s"
DIR_SEP
"%s"
DIR_SEP
"art%s"
,
p_parent
->
p_libvlc
->
psz_homedir
,
psz_artist
,
psz_album
,
psz_type
);
/* Check if file exists */
i_ret
=
utf8_stat
(
psz_filename
+
7
,
&
a
);
if
(
i_ret
==
0
)
{
msg_Dbg
(
p_parent
,
"album art %s already exists in cache"
,
psz_filename
);
return
VLC_SUCCESS
;
}
else
for
(
i
=
0
;
i
<
5
;
i
++
)
{
/* Use a art finder module to find the URL */
return
VLC_EGENERIC
;
snprintf
(
psz_filename
,
MAX_PATH
,
"file://%s"
DIR_SEP
CONFIG_DIR
DIR_SEP
"art"
DIR_SEP
"%s"
DIR_SEP
"%s"
DIR_SEP
"art%s"
,
p_parent
->
p_libvlc
->
psz_homedir
,
psz_artist
,
psz_album
,
psz_type
);
/* Check if file exists */
if
(
utf8_stat
(
psz_filename
+
7
,
&
a
)
==
0
)
{
msg_Dbg
(
p_parent
,
"album art %s already exists in cache"
,
psz_filename
);
return
VLC_SUCCESS
;
}
}
/* Use a art finder module to find the URL */
return
VLC_EGENERIC
;
}
/**
...
...
@@ -121,8 +133,6 @@ int input_FindArt( vlc_object_t *p_parent, input_item_t *p_item )
int
input_DownloadAndCacheArt
(
vlc_object_t
*
p_parent
,
input_item_t
*
p_item
)
{
int
i_status
=
VLC_EGENERIC
;
int
i_ret
;
struct
stat
a
;
stream_t
*
p_stream
;
char
psz_filename
[
MAX_PATH
],
psz_dir
[
MAX_PATH
];
char
*
psz_artist
;
...
...
@@ -136,6 +146,8 @@ int input_DownloadAndCacheArt( vlc_object_t *p_parent, input_item_t *p_item )
||
!*
p_item
->
p_meta
->
psz_arturl
)
return
VLC_EGENERIC
;
psz_type
=
strrchr
(
p_item
->
p_meta
->
psz_arturl
,
'.'
);
/* Todo: get a helper to do this */
snprintf
(
psz_filename
,
MAX_PATH
,
"file://%s"
DIR_SEP
CONFIG_DIR
DIR_SEP
"art"
...
...
@@ -181,3 +193,28 @@ int input_DownloadAndCacheArt( vlc_object_t *p_parent, input_item_t *p_item )
}
return
i_status
;
}
uint32_t
input_GetMetaEngineFlags
(
vlc_meta_t
*
p_meta
)
{
uint32_t
i_meta
=
0
;
#define CHECK( a, b ) \
if( p_meta->psz_ ## a && *p_meta->psz_ ## a ) \
i_meta |= VLC_META_ENGINE_ ## b;
CHECK
(
title
,
TITLE
)
CHECK
(
author
,
AUTHOR
)
CHECK
(
artist
,
ARTIST
)
CHECK
(
genre
,
GENRE
)
CHECK
(
copyright
,
COPYRIGHT
)
CHECK
(
album
,
COLLECTION
)
CHECK
(
tracknum
,
SEQ_NUM
)
CHECK
(
description
,
DESCRIPTION
)
CHECK
(
rating
,
RATING
)
CHECK
(
date
,
DATE
)
CHECK
(
url
,
URL
)
CHECK
(
language
,
LANGUAGE
)
CHECK
(
arturl
,
ART_URL
)
return
i_meta
;
}
src/input/subtitles.c
View file @
e398a81b
...
...
@@ -46,15 +46,6 @@
#include <ctype.h>
/**
* What's between a directory and a filename?
*/
#if defined( WIN32 )
#define DIRECTORY_SEPARATOR '\\'
#else
#define DIRECTORY_SEPARATOR '/'
#endif
/**
* We are not going to autodetect more subtitle files than this.
*/
...
...
@@ -231,7 +222,7 @@ static char **paths_to_list( char *psz_dir, char *psz_path )
psz_subdir
[
0
]
==
'.'
?
psz_dir
:
""
,
psz_subdir
,
psz_subdir
[
strlen
(
psz_subdir
)
-
1
]
==
DIR
ECTORY_SEPARATOR
?
'\0'
:
DIRECTORY_SEPARATOR
);
DIR
_SEP
?
'\0'
:
DIR_SEP
);
subdirs
[
i
]
=
psz_temp
;
i
++
;
}
...
...
@@ -286,7 +277,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
}
/* extract filename & dirname from psz_fname */
tmp
=
strrchr
(
psz_fname
,
DIR
ECTORY_SEPARATOR
);
tmp
=
strrchr
(
psz_fname
,
DIR
_SEP
);
if
(
tmp
)
{
int
dirlen
=
0
;
...
...
@@ -313,7 +304,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
}
dirlen
=
strlen
(
f_dir
);
f_dir
=
(
char
*
)
realloc
(
f_dir
,
dirlen
+
2
);
f_dir
[
dirlen
]
=
DIR
ECTORY_SEPARATOR
;
f_dir
[
dirlen
]
=
DIR
_SEP
;
f_dir
[
dirlen
+
1
]
=
'\0'
;
f_fname
=
FromLocaleDup
(
psz_fname
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment