Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
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-1.1
Commits
3d7cbf17
Commit
3d7cbf17
authored
Dec 05, 2008
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Display codec meta data.
parent
d81aac69
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
58 additions
and
13 deletions
+58
-13
src/input/decoder.c
src/input/decoder.c
+26
-3
src/input/decoder.h
src/input/decoder.h
+7
-5
src/input/es_out.c
src/input/es_out.c
+25
-5
No files found.
src/input/decoder.c
View file @
3d7cbf17
...
@@ -39,6 +39,7 @@
...
@@ -39,6 +39,7 @@
#include <vlc_sout.h>
#include <vlc_sout.h>
#include <vlc_codec.h>
#include <vlc_codec.h>
#include <vlc_osd.h>
#include <vlc_osd.h>
#include <vlc_meta.h>
#include <vlc_interface.h>
#include <vlc_interface.h>
#include "audio_output/aout_internal.h"
#include "audio_output/aout_internal.h"
...
@@ -103,6 +104,7 @@ struct decoder_owner_sys_t
...
@@ -103,6 +104,7 @@ struct decoder_owner_sys_t
/* */
/* */
bool
b_fmt_description
;
bool
b_fmt_description
;
es_format_t
fmt_description
;
es_format_t
fmt_description
;
vlc_meta_t
*
p_description
;
/* fifo */
/* fifo */
block_fifo_t
*
p_fifo
;
block_fifo_t
*
p_fifo
;
...
@@ -600,7 +602,7 @@ void input_DecoderFrameNext( decoder_t *p_dec, mtime_t *pi_duration )
...
@@ -600,7 +602,7 @@ void input_DecoderFrameNext( decoder_t *p_dec, mtime_t *pi_duration )
vlc_mutex_unlock
(
&
p_owner
->
lock
);
vlc_mutex_unlock
(
&
p_owner
->
lock
);
}
}
bool
input_DecoderHasFormatChanged
(
decoder_t
*
p_dec
,
es_format_t
*
p_fmt
)
bool
input_DecoderHasFormatChanged
(
decoder_t
*
p_dec
,
es_format_t
*
p_fmt
,
vlc_meta_t
**
pp_meta
)
{
{
decoder_owner_sys_t
*
p_owner
=
p_dec
->
p_owner
;
decoder_owner_sys_t
*
p_owner
=
p_dec
->
p_owner
;
bool
b_changed
;
bool
b_changed
;
...
@@ -611,6 +613,17 @@ bool input_DecoderHasFormatChanged( decoder_t *p_dec, es_format_t *p_fmt )
...
@@ -611,6 +613,17 @@ bool input_DecoderHasFormatChanged( decoder_t *p_dec, es_format_t *p_fmt )
{
{
if
(
p_fmt
)
if
(
p_fmt
)
es_format_Copy
(
p_fmt
,
&
p_owner
->
fmt_description
);
es_format_Copy
(
p_fmt
,
&
p_owner
->
fmt_description
);
if
(
pp_meta
)
{
*
pp_meta
=
NULL
;
if
(
p_owner
->
p_description
)
{
*
pp_meta
=
vlc_meta_New
();
if
(
*
pp_meta
)
vlc_meta_Merge
(
*
pp_meta
,
p_owner
->
p_description
);
}
}
p_owner
->
b_fmt_description
=
false
;
p_owner
->
b_fmt_description
=
false
;
}
}
vlc_mutex_unlock
(
&
p_owner
->
lock
);
vlc_mutex_unlock
(
&
p_owner
->
lock
);
...
@@ -799,6 +812,7 @@ static decoder_t * CreateDecoder( input_thread_t *p_input,
...
@@ -799,6 +812,7 @@ static decoder_t * CreateDecoder( input_thread_t *p_input,
p_owner
->
b_fmt_description
=
false
;
p_owner
->
b_fmt_description
=
false
;
es_format_Init
(
&
p_owner
->
fmt_description
,
UNKNOWN_ES
,
0
);
es_format_Init
(
&
p_owner
->
fmt_description
,
UNKNOWN_ES
,
0
);
p_owner
->
p_description
=
NULL
;
p_owner
->
b_paused
=
false
;
p_owner
->
b_paused
=
false
;
p_owner
->
pause
.
i_date
=
0
;
p_owner
->
pause
.
i_date
=
0
;
...
@@ -2058,6 +2072,8 @@ static void DeleteDecoder( decoder_t * p_dec )
...
@@ -2058,6 +2072,8 @@ static void DeleteDecoder( decoder_t * p_dec )
if
(
p_dec
->
p_description
)
if
(
p_dec
->
p_description
)
vlc_meta_Delete
(
p_dec
->
p_description
);
vlc_meta_Delete
(
p_dec
->
p_description
);
es_format_Clean
(
&
p_owner
->
fmt_description
);
es_format_Clean
(
&
p_owner
->
fmt_description
);
if
(
p_owner
->
p_description
)
vlc_meta_Delete
(
p_owner
->
p_description
);
if
(
p_owner
->
p_packetizer
)
if
(
p_owner
->
p_packetizer
)
{
{
...
@@ -2088,10 +2104,17 @@ static void DecoderUpdateFormatLocked( decoder_t *p_dec )
...
@@ -2088,10 +2104,17 @@ static void DecoderUpdateFormatLocked( decoder_t *p_dec )
vlc_assert_locked
(
&
p_owner
->
lock
);
vlc_assert_locked
(
&
p_owner
->
lock
);
es_format_Clean
(
&
p_owner
->
fmt_description
);
p_owner
->
b_fmt_description
=
true
;
p_owner
->
b_fmt_description
=
true
;
/* Copy es_format */
es_format_Clean
(
&
p_owner
->
fmt_description
);
es_format_Copy
(
&
p_owner
->
fmt_description
,
&
p_dec
->
fmt_out
);
es_format_Copy
(
&
p_owner
->
fmt_description
,
&
p_dec
->
fmt_out
);
/* Move p_description */
if
(
p_owner
->
p_description
&&
p_dec
->
p_description
)
vlc_meta_Delete
(
p_owner
->
p_description
);
p_owner
->
p_description
=
p_dec
->
p_description
;
p_dec
->
p_description
=
NULL
;
}
}
static
vout_thread_t
*
aout_request_vout
(
void
*
p_private
,
static
vout_thread_t
*
aout_request_vout
(
void
*
p_private
,
vout_thread_t
*
p_vout
,
video_format_t
*
p_fmt
)
vout_thread_t
*
p_vout
,
video_format_t
*
p_fmt
)
...
...
src/input/decoder.h
View file @
3d7cbf17
...
@@ -90,11 +90,13 @@ void input_DecoderIsCcPresent( decoder_t *, bool pb_present[4] );
...
@@ -90,11 +90,13 @@ void input_DecoderIsCcPresent( decoder_t *, bool pb_present[4] );
void
input_DecoderFrameNext
(
decoder_t
*
p_dec
,
mtime_t
*
pi_duration
);
void
input_DecoderFrameNext
(
decoder_t
*
p_dec
,
mtime_t
*
pi_duration
);
/**
/**
* This function will return true if the ES format has changed since the last call
* This function will return true if the ES format or meta data have changed since
* and will do a copy of the current es_format_t if p_fmt is not NULL. This copy
* the last call. In which case, it will do a copy of the current es_format_t if p_fmt
* MUST be free by es_format_Clean.
* is not NULL and will do a copy of the current description if pp_meta is non NULL.
* Otherwise it will return false and will not initialize p_fmt.
* The es_format_t MUST be freed by es_format_Clean and *pp_meta MUST be freed by
* vlc_meta_Delete.
* Otherwise it will return false and will not initialize p_fmt and *pp_meta.
*/
*/
bool
input_DecoderHasFormatChanged
(
decoder_t
*
p_dec
,
es_format_t
*
p_fmt
);
bool
input_DecoderHasFormatChanged
(
decoder_t
*
p_dec
,
es_format_t
*
p_fmt
,
vlc_meta_t
**
pp_meta
);
#endif
#endif
src/input/es_out.c
View file @
3d7cbf17
...
@@ -169,7 +169,7 @@ static int EsOutControl( es_out_t *, int i_query, va_list );
...
@@ -169,7 +169,7 @@ static int EsOutControl( es_out_t *, int i_query, va_list );
static
void
EsOutDelete
(
es_out_t
*
);
static
void
EsOutDelete
(
es_out_t
*
);
static
void
EsOutSelect
(
es_out_t
*
,
es_out_id_t
*
es
,
bool
b_force
);
static
void
EsOutSelect
(
es_out_t
*
,
es_out_id_t
*
es
,
bool
b_force
);
static
void
EsOutUpdateInfo
(
es_out_t
*
,
es_out_id_t
*
es
,
const
es_format_t
*
);
static
void
EsOutUpdateInfo
(
es_out_t
*
,
es_out_id_t
*
es
,
const
es_format_t
*
,
const
vlc_meta_t
*
);
static
int
EsOutSetRecord
(
es_out_t
*
,
bool
b_record
);
static
int
EsOutSetRecord
(
es_out_t
*
,
bool
b_record
);
static
bool
EsIsSelected
(
es_out_id_t
*
es
);
static
bool
EsIsSelected
(
es_out_id_t
*
es
);
...
@@ -1443,7 +1443,7 @@ static es_out_id_t *EsOutAdd( es_out_t *out, const es_format_t *fmt )
...
@@ -1443,7 +1443,7 @@ static es_out_id_t *EsOutAdd( es_out_t *out, const es_format_t *fmt )
break
;
break
;
}
}
EsOutUpdateInfo
(
out
,
es
,
&
es
->
fmt
);
EsOutUpdateInfo
(
out
,
es
,
&
es
->
fmt
,
NULL
);
vlc_mutex_unlock
(
&
p_sys
->
lock
);
vlc_mutex_unlock
(
&
p_sys
->
lock
);
...
@@ -1849,10 +1849,14 @@ static int EsOutSend( es_out_t *out, es_out_id_t *es, block_t *p_block )
...
@@ -1849,10 +1849,14 @@ static int EsOutSend( es_out_t *out, es_out_id_t *es, block_t *p_block )
input_DecoderDecode
(
es
->
p_dec
,
p_block
);
input_DecoderDecode
(
es
->
p_dec
,
p_block
);
es_format_t
fmt_dsc
;
es_format_t
fmt_dsc
;
if
(
input_DecoderHasFormatChanged
(
es
->
p_dec
,
&
fmt_dsc
)
)
vlc_meta_t
*
p_meta_dsc
;
if
(
input_DecoderHasFormatChanged
(
es
->
p_dec
,
&
fmt_dsc
,
&
p_meta_dsc
)
)
{
{
EsOutUpdateInfo
(
out
,
es
,
&
fmt_dsc
);
EsOutUpdateInfo
(
out
,
es
,
&
fmt_dsc
,
p_meta_dsc
);
es_format_Clean
(
&
fmt_dsc
);
es_format_Clean
(
&
fmt_dsc
);
if
(
p_meta_dsc
)
vlc_meta_Delete
(
p_meta_dsc
);
}
}
/* Check CC status */
/* Check CC status */
...
@@ -2530,7 +2534,7 @@ static int LanguageArrayIndex( char **ppsz_langs, char *psz_lang )
...
@@ -2530,7 +2534,7 @@ static int LanguageArrayIndex( char **ppsz_langs, char *psz_lang )
* EsOutUpdateInfo:
* EsOutUpdateInfo:
* - add meta info to the playlist item
* - add meta info to the playlist item
****************************************************************************/
****************************************************************************/
static
void
EsOutUpdateInfo
(
es_out_t
*
out
,
es_out_id_t
*
es
,
const
es_format_t
*
fmt
)
static
void
EsOutUpdateInfo
(
es_out_t
*
out
,
es_out_id_t
*
es
,
const
es_format_t
*
fmt
,
const
vlc_meta_t
*
p_meta
)
{
{
es_out_sys_t
*
p_sys
=
out
->
p_sys
;
es_out_sys_t
*
p_sys
=
out
->
p_sys
;
input_thread_t
*
p_input
=
p_sys
->
p_input
;
input_thread_t
*
p_input
=
p_sys
->
p_input
;
...
@@ -2671,5 +2675,21 @@ static void EsOutUpdateInfo( es_out_t *out, es_out_id_t *es, const es_format_t *
...
@@ -2671,5 +2675,21 @@ static void EsOutUpdateInfo( es_out_t *out, es_out_id_t *es, const es_format_t *
break
;
break
;
}
}
/* Append generic meta */
if
(
p_meta
)
{
char
**
ppsz_all_keys
=
vlc_dictionary_all_keys
(
&
p_meta
->
extra_tags
);
for
(
int
i
=
0
;
ppsz_all_keys
&&
ppsz_all_keys
[
i
];
i
++
)
{
char
*
psz_key
=
ppsz_all_keys
[
i
];
char
*
psz_value
=
vlc_dictionary_value_for_key
(
&
p_meta
->
extra_tags
,
psz_key
);
if
(
psz_value
)
input_Control
(
p_input
,
INPUT_ADD_INFO
,
psz_cat
,
_
(
psz_key
),
_
(
psz_value
)
);
free
(
psz_key
);
}
free
(
ppsz_all_keys
);
}
free
(
psz_cat
);
free
(
psz_cat
);
}
}
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