Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
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-2-2
Commits
662ed774
Commit
662ed774
authored
Aug 18, 2007
by
Rafaël Carré
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Input access locking, part 2.
Fix [21193]
parent
a387a1ff
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
224 additions
and
148 deletions
+224
-148
include/vlc_input.h
include/vlc_input.h
+14
-9
modules/misc/notify/growl.c
modules/misc/notify/growl.c
+9
-8
modules/misc/notify/notify.c
modules/misc/notify/notify.c
+5
-7
modules/misc/playlist/m3u.c
modules/misc/playlist/m3u.c
+6
-8
modules/misc/playlist/xspf.c
modules/misc/playlist/xspf.c
+12
-16
modules/visualization/goom.c
modules/visualization/goom.c
+3
-5
src/input/control.c
src/input/control.c
+2
-2
src/input/es_out.c
src/input/es_out.c
+0
-8
src/input/input.c
src/input/input.c
+25
-12
src/input/meta.c
src/input/meta.c
+96
-39
src/playlist/control.c
src/playlist/control.c
+9
-5
src/playlist/engine.c
src/playlist/engine.c
+7
-5
src/playlist/item.c
src/playlist/item.c
+6
-4
src/text/strings.c
src/text/strings.c
+17
-11
src/video_output/video_output.c
src/video_output/video_output.c
+13
-9
No files found.
include/vlc_input.h
View file @
662ed774
...
...
@@ -26,6 +26,11 @@
#error You are not libvlc or one of its plugins. You cannot include this file
#endif
#ifndef __USE_GNU
#define __USE_GNU
#endif
#include <string.h>
/* strcasestr() */
/* __ is need because conflict with <vlc/input.h> */
#ifndef _VLC__INPUT_H
#define _VLC__INPUT_H 1
...
...
@@ -222,11 +227,11 @@ static inline void input_item_SetMeta( input_item_t *p_i, vlc_meta_type_t meta_t
{
vlc_event_t
event
;
//
vlc_mutex_lock( &p_i->lock );
vlc_mutex_lock
(
&
p_i
->
lock
);
if
(
!
p_i
->
p_meta
)
p_i
->
p_meta
=
vlc_meta_New
();
vlc_meta_Set
(
p_i
->
p_meta
,
meta_type
,
psz_val
);
//
vlc_mutex_unlock( &p_i->lock );
vlc_mutex_unlock
(
&
p_i
->
lock
);
/* Notify interested third parties */
event
.
type
=
vlc_InputItemMetaChanged
;
...
...
@@ -236,10 +241,10 @@ static inline void input_item_SetMeta( input_item_t *p_i, vlc_meta_type_t meta_t
static
inline
vlc_bool_t
input_item_MetaMatch
(
input_item_t
*
p_i
,
vlc_meta_type_t
meta_type
,
const
char
*
psz
)
{
//
vlc_mutex_lock( &p_i->lock );
vlc_mutex_lock
(
&
p_i
->
lock
);
const
char
*
meta
=
vlc_meta_Get
(
p_i
->
p_meta
,
meta_type
);
vlc_bool_t
ret
=
meta
&&
strcasestr
(
meta
,
psz
);
//
vlc_mutex_unlock( &p_i->lock );
vlc_mutex_unlock
(
&
p_i
->
lock
);
return
ret
;
}
...
...
@@ -247,26 +252,26 @@ static inline vlc_bool_t input_item_MetaMatch( input_item_t *p_i, vlc_meta_type_
static
inline
char
*
input_item_GetMeta
(
input_item_t
*
p_i
,
vlc_meta_type_t
meta_type
)
{
char
*
psz
=
NULL
;
//
vlc_mutex_lock( &p_i->lock );
vlc_mutex_lock
(
&
p_i
->
lock
);
if
(
!
p_i
->
p_meta
)
{
//
vlc_mutex_unlock( &p_i->lock );
vlc_mutex_unlock
(
&
p_i
->
lock
);
return
NULL
;
}
if
(
vlc_meta_Get
(
p_i
->
p_meta
,
meta_type
)
)
psz
=
strdup
(
vlc_meta_Get
(
p_i
->
p_meta
,
meta_type
)
);
//
vlc_mutex_unlock( &p_i->lock );
vlc_mutex_unlock
(
&
p_i
->
lock
);
return
psz
;
}
static
inline
char
*
input_item_GetName
(
input_item_t
*
p_i
)
{
//
vlc_mutex_lock( &p_i->lock );
vlc_mutex_lock
(
&
p_i
->
lock
);
char
*
psz_s
=
p_i
->
psz_name
?
strdup
(
p_i
->
psz_name
)
:
NULL
;
//
vlc_mutex_unlock( &p_i->lock );
vlc_mutex_unlock
(
&
p_i
->
lock
);
return
psz_s
;
}
...
...
modules/misc/notify/growl.c
View file @
662ed774
...
...
@@ -124,21 +124,22 @@ static int ItemChange( vlc_object_t *p_this, const char *psz_var,
if
(
!
p_input
)
return
VLC_SUCCESS
;
vlc_object_yield
(
p_input
);
if
(
p_input
->
b_dead
||
!
input_GetItem
(
p_input
)
->
psz_name
)
char
*
psz_name
=
input_item_GetName
(
input_GetItem
(
p_input
)
);
if
(
p_input
->
b_dead
||
!
psz_name
)
{
/* Not playing anything ... */
free
(
psz_name
);
vlc_object_release
(
p_input
);
return
VLC_SUCCESS
;
}
free
(
psz_name
);
/* Playing something ... */
psz_artist
=
input_item_GetArtist
(
input_GetItem
(
p_input
)
)
?
strdup
(
input_item_GetArtist
(
input_GetItem
(
p_input
)
)
)
:
strdup
(
""
);
psz_album
=
input_item_GetAlbum
(
input_GetItem
(
p_input
)
)
?
strdup
(
input_item_GetAlbum
(
input_GetItem
(
p_input
)
)
)
:
strdup
(
""
);
psz_title
=
strdup
(
input_GetItem
(
p_input
)
->
psz_name
);
psz_artist
=
input_item_GetArtist
(
input_GetItem
(
p_input
)
);
if
(
psz_artist
==
NULL
)
psz_artist
=
strdup
(
""
);
psz_album
=
input_item_GetAlbum
(
input_GetItem
(
p_input
)
)
;
if
(
psz_album
==
NULL
)
psz_album
=
strdup
(
""
);
psz_title
=
input_item_GetName
(
input_GetItem
(
p_input
)
);
if
(
psz_title
==
NULL
)
psz_title
=
strdup
(
N_
(
"(no title)"
)
);
snprintf
(
psz_tmp
,
GROWL_MAX_LENGTH
,
"%s %s %s"
,
psz_title
,
psz_artist
,
psz_album
);
...
...
modules/misc/notify/notify.c
View file @
662ed774
...
...
@@ -150,13 +150,11 @@ static int ItemChange( vlc_object_t *p_this, const char *psz_var,
}
/* Playing something ... */
psz_artist
=
input_item_GetArtist
(
input_GetItem
(
p_input
)
)
?
strdup
(
input_item_GetArtist
(
input_GetItem
(
p_input
)
)
)
:
strdup
(
_
(
"no artist"
)
);
psz_album
=
input_item_GetAlbum
(
input_GetItem
(
p_input
)
)
?
strdup
(
input_item_GetAlbum
(
input_GetItem
(
p_input
)
)
)
:
strdup
(
_
(
"no album"
)
);
psz_title
=
strdup
(
input_GetItem
(
p_input
)
->
psz_name
);
psz_artist
=
input_item_GetArtist
(
input_GetItem
(
p_input
)
);
if
(
psz_artist
==
NULL
)
psz_artist
=
strdup
(
_
(
"no artist"
)
);
psz_album
=
input_item_GetAlbum
(
input_GetItem
(
p_input
)
)
;
if
(
psz_album
==
NULL
)
psz_album
=
strdup
(
_
(
"no album"
)
);
psz_title
=
input_item_GetName
(
input_GetItem
(
p_input
)
);
vlc_object_release
(
p_input
);
...
...
modules/misc/playlist/m3u.c
View file @
662ed774
...
...
@@ -65,13 +65,11 @@ static void DoChildren( playlist_t *p_playlist, playlist_export_t *p_export,
assert
(
p_current
->
p_input
->
psz_uri
);
/* General info */
if
(
p_current
->
p_input
->
psz_name
&&
strcmp
(
p_current
->
p_input
->
psz_uri
,
p_current
->
p_input
->
psz_name
)
)
char
*
psz_name
=
input_item_GetName
(
p_current
->
p_input
);
if
(
psz_name
&&
strcmp
(
p_current
->
p_input
->
psz_uri
,
psz_name
)
)
{
char
*
psz_artist
=
input_item_GetArtist
(
p_current
->
p_input
)
?
strdup
(
input_item_GetArtist
(
p_current
->
p_input
)
)
:
strdup
(
""
);
char
*
psz_artist
=
input_item_GetArtist
(
p_current
->
p_input
);
if
(
psz_artist
==
NULL
)
psz_artist
=
strdup
(
""
);
if
(
psz_artist
&&
*
psz_artist
)
{
/* write EXTINF with artist */
...
...
@@ -87,9 +85,9 @@ static void DoChildren( playlist_t *p_playlist, playlist_export_t *p_export,
(
int
)(
p_current
->
p_input
->
i_duration
/
1000000
),
p_current
->
p_input
->
psz_name
);
}
if
(
psz_artist
)
free
(
psz_artist
);
free
(
psz_artist
);
}
free
(
psz_name
);
/* VLC specific options */
for
(
j
=
0
;
j
<
p_current
->
p_input
->
i_options
;
j
++
)
...
...
modules/misc/playlist/xspf.c
View file @
662ed774
...
...
@@ -163,11 +163,10 @@ static void xspf_export_item( playlist_item_t *p_item, FILE *p_file,
}
/* -> the artist/creator */
psz
=
input_item_GetArtist
(
p_item
->
p_input
)
?
strdup
(
input_item_GetArtist
(
p_item
->
p_input
)
)
:
strdup
(
""
);
psz
=
input_item_GetArtist
(
p_item
->
p_input
);
if
(
psz
==
NULL
)
psz
=
strdup
(
""
);
psz_temp
=
convert_xml_special_chars
(
psz
);
if
(
psz
)
free
(
psz
);
free
(
psz
);
if
(
*
psz_temp
)
{
fprintf
(
p_file
,
"
\t\t\t
<creator>%s</creator>
\n
"
,
psz_temp
);
...
...
@@ -175,11 +174,10 @@ static void xspf_export_item( playlist_item_t *p_item, FILE *p_file,
free
(
psz_temp
);
/* -> the album */
psz
=
input_item_GetAlbum
(
p_item
->
p_input
)
?
strdup
(
input_item_GetAlbum
(
p_item
->
p_input
)
)
:
strdup
(
""
);
psz
=
input_item_GetAlbum
(
p_item
->
p_input
);
if
(
psz
==
NULL
)
psz
=
strdup
(
""
);
psz_temp
=
convert_xml_special_chars
(
psz
);
if
(
psz
)
free
(
psz
);
free
(
psz
);
if
(
*
psz_temp
)
{
fprintf
(
p_file
,
"
\t\t\t
<album>%s</album>
\n
"
,
psz_temp
);
...
...
@@ -187,24 +185,22 @@ static void xspf_export_item( playlist_item_t *p_item, FILE *p_file,
free
(
psz_temp
);
/* -> the track number */
psz
=
input_item_GetTrackNum
(
p_item
->
p_input
)
?
strdup
(
input_item_GetTrackNum
(
p_item
->
p_input
)
)
:
strdup
(
""
);
psz
=
input_item_GetTrackNum
(
p_item
->
p_input
);
if
(
psz
==
NULL
)
psz
=
strdup
(
""
);
if
(
psz
)
{
if
(
*
psz
)
{
fprintf
(
p_file
,
"
\t\t\t
<trackNum>%i</trackNum>
\n
"
,
atoi
(
psz
)
);
}
free
(
psz
);
}
free
(
psz
);
/* -> the description */
psz
=
input_item_GetDescription
(
p_item
->
p_input
)
?
strdup
(
input_item_GetDescription
(
p_item
->
p_input
)
)
:
strdup
(
""
);
psz
=
input_item_GetDescription
(
p_item
->
p_input
);
if
(
psz
==
NULL
)
psz
=
strdup
(
""
);
psz_temp
=
convert_xml_special_chars
(
psz
);
if
(
psz
)
free
(
psz
);
free
(
psz
);
if
(
*
psz_temp
)
{
fprintf
(
p_file
,
"
\t\t\t
<annotation>%s</annotation>
\n
"
,
psz_temp
);
...
...
modules/visualization/goom.c
View file @
662ed774
...
...
@@ -416,12 +416,10 @@ static char *TitleGet( vlc_object_t *p_this )
if
(
p_input
)
{
if
(
!
EMPTY_STR
(
input_item_GetTitle
(
input_GetItem
(
p_input
)
)
)
)
{
psz_title
=
strdup
(
input_item_GetTitle
(
input_GetItem
(
p_input
)
)
);
}
else
psz_title
=
strdup
(
input_item_GetTitle
(
input_GetItem
(
p_input
)
)
);
if
(
EMPTY_STR
(
psz_title
)
)
{
free
(
psz_title
);
char
*
psz
=
strrchr
(
input_GetItem
(
p_input
)
->
psz_uri
,
'/'
);
if
(
psz
)
...
...
src/input/control.c
View file @
662ed774
...
...
@@ -152,7 +152,7 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args )
p_cat
=
malloc
(
sizeof
(
info_category_t
)
);
if
(
!
p_cat
)
{
vlc_mutex_lock
(
&
p_input
->
p
->
input
.
p_item
->
lock
);
vlc_mutex_
un
lock
(
&
p_input
->
p
->
input
.
p_item
->
lock
);
return
VLC_EGENERIC
;
}
p_cat
->
psz_name
=
strdup
(
psz_cat
);
...
...
@@ -180,7 +180,7 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args )
p_info
=
malloc
(
sizeof
(
info_t
)
);
if
(
!
p_info
)
{
vlc_mutex_lock
(
&
p_input
->
p
->
input
.
p_item
->
lock
);
vlc_mutex_
un
lock
(
&
p_input
->
p
->
input
.
p_item
->
lock
);
return
VLC_EGENERIC
;
}
...
...
src/input/es_out.c
View file @
662ed774
...
...
@@ -487,12 +487,10 @@ static void EsOutProgramSelect( es_out_t *out, es_out_pgrm_t *p_pgrm )
}
/* Update now playing */
vlc_mutex_lock
(
&
p_input
->
p
->
input
.
p_item
->
lock
);
input_item_SetNowPlaying
(
p_input
->
p
->
input
.
p_item
,
p_pgrm
->
psz_now_playing
);
input_item_SetPublisher
(
p_input
->
p
->
input
.
p_item
,
p_pgrm
->
psz_publisher
);
vlc_mutex_unlock
(
&
p_input
->
p
->
input
.
p_item
->
lock
);
var_SetBool
(
p_sys
->
p_input
,
"intf-change"
,
VLC_TRUE
);
}
...
...
@@ -672,11 +670,7 @@ static void EsOutProgramMeta( es_out_t *out, int i_group, vlc_meta_t *p_meta )
if
(
psz_provider
)
{
if
(
p_sys
->
p_pgrm
==
p_pgrm
)
{
vlc_mutex_lock
(
&
p_input
->
p
->
input
.
p_item
->
lock
);
input_item_SetPublisher
(
p_input
->
p
->
input
.
p_item
,
psz_provider
);
vlc_mutex_unlock
(
&
p_input
->
p
->
input
.
p_item
->
lock
);
}
input_Control
(
p_input
,
INPUT_ADD_INFO
,
psz_cat
,
input_MetaTypeToLocalizedString
(
vlc_meta_Publisher
),
psz_provider
);
}
char
**
ppsz_all_keys
=
vlc_dictionary_all_keys
(
&
p_meta
->
extra_tags
);
...
...
@@ -798,10 +792,8 @@ static void EsOutProgramEpg( es_out_t *out, int i_group, vlc_epg_t *p_epg )
if
(
p_epg
->
p_current
&&
p_epg
->
p_current
->
psz_name
&&
*
p_epg
->
p_current
->
psz_name
)
p_pgrm
->
psz_now_playing
=
strdup
(
p_epg
->
p_current
->
psz_name
);
vlc_mutex_lock
(
&
p_input
->
p
->
input
.
p_item
->
lock
);
if
(
p_pgrm
==
p_sys
->
p_pgrm
)
input_item_SetNowPlaying
(
p_input
->
p
->
input
.
p_item
,
p_pgrm
->
psz_now_playing
);
vlc_mutex_unlock
(
&
p_input
->
p
->
input
.
p_item
->
lock
);
if
(
p_pgrm
->
psz_now_playing
)
{
...
...
src/input/input.c
View file @
662ed774
...
...
@@ -254,9 +254,7 @@ static input_thread_t *Create( vlc_object_t *p_parent, input_item_t *p_item,
input_Control
(
p_input
,
INPUT_DEL_INFO
,
_
(
VLC_META_INFO_CAT
),
_
(
VLC_META_NOW_PLAYING
)
);
vlc_mutex_lock
(
&
p_item
->
lock
);
input_item_SetNowPlaying
(
p_item
,
NULL
);
vlc_mutex_unlock
(
&
p_item
->
lock
);
/* */
if
(
p_input
->
b_preparsing
)
...
...
@@ -2505,39 +2503,44 @@ static void InputMetaUser( input_thread_t *p_input, vlc_meta_t *p_meta )
static
void
InputUpdateMeta
(
input_thread_t
*
p_input
,
vlc_meta_t
*
p_meta
)
{
input_item_t
*
p_item
=
p_input
->
p
->
input
.
p_item
;
char
*
psz_saved_arturl
=
NULL
;
const
char
*
psz_arturl
=
NULL
;
char
*
psz_arturl
=
NULL
;
char
*
psz_title
=
NULL
;
int
i
;
int
i_arturl_event
=
VLC_FALSE
;
if
(
!
p_meta
)
return
;
psz_arturl
=
input_item_GetArtURL
(
p_item
);
vlc_mutex_lock
(
&
p_item
->
lock
);
if
(
vlc_meta_Get
(
p_meta
,
vlc_meta_Title
)
&&
!
p_item
->
b_fixed_name
)
psz_title
=
strdup
(
vlc_meta_Get
(
p_meta
,
vlc_meta_Title
)
);
if
(
input_item_GetArtURL
(
p_item
)
)
psz_saved_arturl
=
strdup
(
input_item_GetArtURL
(
p_item
)
);
vlc_meta_Merge
(
p_item
->
p_meta
,
p_meta
);
if
(
psz_saved_arturl
&&
*
psz_saved_arturl
)
input_item_SetArtURL
(
p_item
,
psz_saved_arturl
);
if
(
psz_arturl
&&
*
psz_arturl
)
{
vlc_meta_Set
(
p_item
->
p_meta
,
vlc_meta_ArtworkURL
,
psz_arturl
);
i_arturl_event
=
VLC_TRUE
;
}
free
(
psz_saved_arturl
);
vlc_meta_Delete
(
p_meta
);
psz_arturl
=
input_item_GetArtURL
(
p_item
);
if
(
psz_arturl
&&
!
strncmp
(
psz_arturl
,
"attachment://"
,
strlen
(
"attachment"
)
)
)
{
/* Don't look for art cover if sout
* XXX It can change when sout has meta data support */
if
(
p_input
->
p
->
p_sout
&&
!
p_input
->
b_preparsing
)
input_item_SetArtURL
(
p_item
,
""
);
{
vlc_meta_Set
(
p_item
->
p_meta
,
vlc_meta_ArtworkURL
,
""
);
i_arturl_event
=
VLC_TRUE
;
}
else
input_ExtractAttachmentAndCacheArt
(
p_input
);
}
free
(
psz_arturl
);
input_item_SetPreparsed
(
p_item
,
VLC_TRUE
);
...
...
@@ -2550,6 +2553,16 @@ static void InputUpdateMeta( input_thread_t *p_input, vlc_meta_t *p_meta )
}
vlc_mutex_unlock
(
&
p_item
->
lock
);
if
(
i_arturl_event
==
VLC_TRUE
)
{
vlc_event_t
event
;
/* Notify interested third parties */
event
.
type
=
vlc_InputItemMetaChanged
;
event
.
u
.
input_item_meta_changed
.
meta_type
=
vlc_meta_ArtworkURL
;
vlc_event_send
(
&
p_item
->
event_manager
,
&
event
);
}
if
(
psz_title
)
{
input_Control
(
p_input
,
INPUT_SET_NAME
,
psz_title
);
...
...
src/input/meta.c
View file @
662ed774
This diff is collapsed.
Click to expand it.
src/playlist/control.c
View file @
662ed774
...
...
@@ -454,16 +454,20 @@ int playlist_PlayItem( playlist_t *p_playlist, playlist_item_t *p_item )
{
vlc_bool_t
b_has_art
;
vlc_mutex_lock
(
&
p_input
->
lock
);
/* p_input->p_meta should not be null after a successfull CreateThread */
b_has_art
=
!
EMPTY_STR
(
input_item_GetArtURL
(
p_input
)
);
vlc_mutex_unlock
(
&
p_input
->
lock
);
char
*
psz_arturl
,
*
psz_name
;
psz_arturl
=
input_item_GetArtURL
(
p_input
);
psz_name
=
input_item_GetName
(
p_input
);
/* p_input->p_meta should not be null after a successfull CreateThread*/
b_has_art
=
!
EMPTY_STR
(
psz_arturl
);
if
(
!
b_has_art
)
{
PL_DEBUG
(
"requesting art for %s"
,
p
_input
->
p
sz_name
);
PL_DEBUG
(
"requesting art for %s"
,
psz_name
);
playlist_AskForArtEnqueue
(
p_playlist
,
p_input
);
}
free
(
psz_arturl
);
free
(
psz_name
);
}
val
.
i_int
=
p_input
->
i_id
;
...
...
src/playlist/engine.c
View file @
662ed774
...
...
@@ -527,6 +527,8 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj )
* This only checks for meta, not for art
* \todo don't do this for things we won't get meta for, like vids
*/
char
*
psz_arturl
=
input_item_GetArtURL
(
p_current
);
char
*
psz_name
=
input_item_GetName
(
p_current
);
if
(
!
input_MetaSatisfied
(
p_playlist
,
p_current
,
&
i_m
,
&
i_o
)
)
{
preparse_item_t
p
;
...
...
@@ -542,11 +544,10 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj )
}
/* We already have all needed meta, but we need art right now */
else
if
(
p_playlist
->
p_fetcher
->
i_art_policy
==
ALBUM_ART_ALL
&&
EMPTY_STR
(
input_item_GetArtURL
(
p_current
)
)
)
EMPTY_STR
(
psz_arturl
)
)
{
preparse_item_t
p
;
PL_DEBUG
(
"meta ok for %s, need to fetch art"
,
p_current
->
psz_name
);
PL_DEBUG
(
"meta ok for %s, need to fetch art"
,
psz_name
);
p
.
p_item
=
p_current
;
p
.
b_fetch_art
=
VLC_TRUE
;
vlc_mutex_lock
(
&
p_playlist
->
p_fetcher
->
object_lock
);
...
...
@@ -559,10 +560,11 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj )
else
{
PL_DEBUG
(
"no fetch required for %s (art currently %s)"
,
p_current
->
psz_name
,
input_item_GetArtURL
(
p_current
));
psz_name
,
psz_arturl
);
vlc_gc_decref
(
p_current
);
}
free
(
psz_name
);
free
(
psz_arturl
);
PL_UNLOCK
;
}
else
...
...
src/playlist/item.c
View file @
662ed774
...
...
@@ -657,17 +657,19 @@ static void GoAndPreparse( playlist_t *p_playlist, int i_mode,
vlc_cond_signal
(
&
p_playlist
->
object_wait
);
}
/* Preparse if PREPARSE or SPREPARSE & not enough meta */
char
*
psz_artist
=
input_item_GetArtist
(
p_item_cat
->
p_input
);
char
*
psz_album
=
input_item_GetAlbum
(
p_item_cat
->
p_input
);
if
(
p_playlist
->
b_auto_preparse
&&
(
i_mode
&
PLAYLIST_PREPARSE
||
(
i_mode
&
PLAYLIST_SPREPARSE
&&
(
EMPTY_STR
(
input_item_GetArtist
(
p_item_cat
->
p_input
)
)
||
(
EMPTY_STR
(
input_item_GetAlbum
(
p_item_cat
->
p_input
)
)
)
)
(
EMPTY_STR
(
psz_artist
)
||
(
EMPTY_STR
(
psz_album
)
)
)
)
)
)
playlist_PreparseEnqueue
(
p_playlist
,
p_item_cat
->
p_input
);
/* If we already have it, signal it */
else
if
(
!
EMPTY_STR
(
input_item_GetArtist
(
p_item_cat
->
p_input
)
)
&&
!
EMPTY_STR
(
input_item_GetAlbum
(
p_item_cat
->
p_input
)
)
)
else
if
(
!
EMPTY_STR
(
psz_artist
)
&&
!
EMPTY_STR
(
psz_album
)
)
input_item_SetPreparsed
(
p_item_cat
->
p_input
,
VLC_TRUE
);
free
(
psz_artist
);
free
(
psz_album
);
}
/* Add the playlist item to the requested node and fire a notification */
...
...
src/text/strings.c
View file @
662ed774
...
...
@@ -638,18 +638,23 @@ char *str_format_time( const char *tformat )
}
#define INSERT_STRING( check, string ) \
if( check
&& string )
\
if( check
)
\
{ \
int len = strlen( string ); \
dst = realloc( dst, \
i_size = i_size + len + 1 ); \
strncpy( d, string, len+1 ); \
d += len; \
} \
else \
{ \
*d = '-'; \
d++; \
psz_meta = string; \
if( string ) \
{ \
int len = strlen( psz_meta ); \
dst = realloc( dst, \
i_size = i_size + len + 1 ); \
strncpy( d, psz_meta, len+1 ); \
d += len; \
free( psz_meta ); \
} \
else \
{ \
*d = '-'; \
d++; \
} \
}
char
*
__str_format_meta
(
vlc_object_t
*
p_object
,
const
char
*
string
)
{
...
...
@@ -681,6 +686,7 @@ char *__str_format_meta( vlc_object_t *p_object, const char *string )
{
switch
(
*
s
)
{
char
*
psz_meta
;
/* used by INSERT_STRING */
case
'a'
:
INSERT_STRING
(
p_item
,
input_item_GetArtist
(
p_item
)
);
break
;
...
...
src/video_output/video_output.c
View file @
662ed774
...
...
@@ -1642,10 +1642,14 @@ static void DisplayTitleOnOSD( vout_thread_t *p_vout )
{
i_now
=
mdate
();
i_stop
=
i_now
+
(
mtime_t
)(
p_vout
->
i_title_timeout
*
1000
);
if
(
!
EMPTY_STR
(
input_item_GetNowPlaying
(
input_GetItem
(
p_input
)))
)
char
*
psz_nowplaying
=
input_item_GetNowPlaying
(
input_GetItem
(
p_input
)
);
char
*
psz_artist
=
input_item_GetArtist
(
input_GetItem
(
p_input
)
);
char
*
psz_name
=
input_item_GetName
(
input_GetItem
(
p_input
)
);
if
(
!
EMPTY_STR
(
psz_nowplaying
)
)
{
vout_ShowTextAbsolute
(
p_vout
,
DEFAULT_CHAN
,
input_item_GetNowPlaying
(
input_GetItem
(
p_input
))
,
NULL
,
psz_nowplaying
,
NULL
,
p_vout
->
i_title_position
,
30
+
p_vout
->
fmt_in
.
i_width
-
p_vout
->
fmt_in
.
i_visible_width
...
...
@@ -1653,17 +1657,14 @@ static void DisplayTitleOnOSD( vout_thread_t *p_vout )
20
+
p_vout
->
fmt_in
.
i_y_offset
,
i_now
,
i_stop
);
}
else
if
(
!
EMPTY_STR
(
input_item_GetArtist
(
input_GetItem
(
p_input
))
)
)
else
if
(
!
EMPTY_STR
(
psz_artist
)
)
{
char
*
psz_string
=
NULL
;
psz_string
=
malloc
(
strlen
(
input_GetItem
(
p_input
)
->
psz_name
)
)
+
strlen
(
input_item_GetArtist
(
input_GetItem
(
p_input
))
);
psz_string
=
malloc
(
strlen
(
psz_name
)
+
strlen
(
psz_artist
)
);
if
(
psz_string
)
{
sprintf
(
psz_string
,
"%s - %s"
,
input_GetItem
(
p_input
)
->
psz_name
,
input_item_GetArtist
(
input_GetItem
(
p_input
))
);
sprintf
(
psz_string
,
"%s - %s"
,
psz_name
,
psz_artist
);
vout_ShowTextAbsolute
(
p_vout
,
DEFAULT_CHAN
,
psz_string
,
NULL
,
...
...
@@ -1679,7 +1680,7 @@ static void DisplayTitleOnOSD( vout_thread_t *p_vout )
else
{
vout_ShowTextAbsolute
(
p_vout
,
DEFAULT_CHAN
,
input_GetItem
(
p_input
)
->
psz_name
,
NULL
,
psz_name
,
NULL
,
p_vout
->
i_title_position
,
30
+
p_vout
->
fmt_in
.
i_width
-
p_vout
->
fmt_in
.
i_visible_width
...
...
@@ -1688,5 +1689,8 @@ static void DisplayTitleOnOSD( vout_thread_t *p_vout )
i_now
,
i_stop
);
}
vlc_object_release
(
p_input
);
free
(
psz_artist
);
free
(
psz_name
);
free
(
psz_nowplaying
);
}
}
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