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
0da465f6
Commit
0da465f6
authored
Jan 22, 2010
by
Rafaël Carré
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
libvlc: Get ES descriptions for media
parent
8f4a554c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
104 additions
and
0 deletions
+104
-0
include/vlc/libvlc_media.h
include/vlc/libvlc_media.h
+42
-0
src/control/media.c
src/control/media.c
+61
-0
src/libvlc.sym
src/libvlc.sym
+1
-0
No files found.
include/vlc/libvlc_media.h
View file @
0da465f6
...
@@ -103,6 +103,13 @@ typedef enum libvlc_media_option_t
...
@@ -103,6 +103,13 @@ typedef enum libvlc_media_option_t
libvlc_media_option_unique
=
0x100
libvlc_media_option_unique
=
0x100
}
libvlc_media_option_t
;
}
libvlc_media_option_t
;
typedef
enum
libvlc_es_type_t
{
libvlc_es_unknown
=
-
1
,
libvlc_es_audio
=
0
,
libvlc_es_video
=
1
,
libvlc_es_text
=
2
,
}
libvlc_es_type_t
;
/** defgroup libvlc_media_stats_t libvlc_media_stats_t
/** defgroup libvlc_media_stats_t libvlc_media_stats_t
* \ingroup libvlc_media
* \ingroup libvlc_media
...
@@ -140,6 +147,26 @@ typedef struct libvlc_media_stats_t
...
@@ -140,6 +147,26 @@ typedef struct libvlc_media_stats_t
}
libvlc_media_stats_t
;
}
libvlc_media_stats_t
;
/** @}*/
/** @}*/
typedef
struct
libvlc_media_es_t
{
/* Codec fourcc */
uint32_t
i_codec
;
libvlc_es_type_t
i_type
;
/* Codec specific */
int
i_profile
;
int
i_level
;
/* Audio specific */
unsigned
i_channels
;
unsigned
i_rate
;
/* Video specific */
unsigned
i_height
;
unsigned
i_width
;
}
libvlc_media_es_t
;
/**
/**
* Create a media with the given MRL.
* Create a media with the given MRL.
...
@@ -363,6 +390,21 @@ VLC_PUBLIC_API void
...
@@ -363,6 +390,21 @@ VLC_PUBLIC_API void
VLC_PUBLIC_API
void
*
VLC_PUBLIC_API
void
*
libvlc_media_get_user_data
(
libvlc_media_t
*
p_md
);
libvlc_media_get_user_data
(
libvlc_media_t
*
p_md
);
/**
* Get media descriptor's elementary streams description
*
* Note, you need to play the media _one_ time with --sout="#description"
* Not doing this will result in an empty array, and doing it more than once
* will duplicate the entries in the array each time.
*
* \param p_md media descriptor object
* \param p_es adress to store an allocated array of Elementary Streams descriptions (must be freed by the caller)
*
* return the number of Elementary Streams
*/
VLC_PUBLIC_API
int
libvlc_media_get_es
(
libvlc_media_t
*
p_md
,
libvlc_media_es_t
**
pp_es
);
/** @}*/
/** @}*/
# ifdef __cplusplus
# ifdef __cplusplus
...
...
src/control/media.c
View file @
0da465f6
...
@@ -636,3 +636,64 @@ libvlc_media_get_user_data( libvlc_media_t * p_md )
...
@@ -636,3 +636,64 @@ libvlc_media_get_user_data( libvlc_media_t * p_md )
assert
(
p_md
);
assert
(
p_md
);
return
p_md
->
p_user_data
;
return
p_md
->
p_user_data
;
}
}
/**************************************************************************
* Get media descriptor's elementary streams description
**************************************************************************/
int
libvlc_media_get_es
(
libvlc_media_t
*
p_md
,
libvlc_media_es_t
**
pp_es
)
{
assert
(
p_md
);
input_item_t
*
p_input_item
=
p_md
->
p_input_item
;
vlc_mutex_lock
(
&
p_input_item
->
lock
);
const
int
i_es
=
p_input_item
->
i_es
;
*
pp_es
=
(
i_es
>
0
)
?
malloc
(
i_es
*
sizeof
(
libvlc_media_es_t
)
)
:
NULL
;
if
(
!
pp_es
)
/* no ES, or OOM */
{
vlc_mutex_unlock
(
&
p_input_item
->
lock
);
return
0
;
}
/* Fill array */
for
(
int
i
=
0
;
i
<
i_es
;
i
++
)
{
libvlc_media_es_t
*
p_mes
=
*
pp_es
+
i
;
const
es_format_t
*
p_es
=
p_input_item
->
es
[
i
];
p_mes
->
i_channels
=
p_mes
->
i_rate
=
0
;
p_mes
->
i_width
=
p_mes
->
i_height
=
0
;
p_mes
->
i_codec
=
p_es
->
i_codec
;
p_mes
->
i_profile
=
p_es
->
i_profile
;
p_mes
->
i_level
=
p_es
->
i_level
;
switch
(
p_es
->
i_cat
)
{
case
UNKNOWN_ES
:
default:
p_mes
->
i_type
=
libvlc_es_unknown
;
break
;
case
VIDEO_ES
:
p_mes
->
i_type
=
libvlc_es_video
;
p_mes
->
i_height
=
p_es
->
video
.
i_height
;
p_mes
->
i_width
=
p_es
->
video
.
i_width
;
break
;
case
AUDIO_ES
:
p_mes
->
i_type
=
libvlc_es_audio
;
p_mes
->
i_channels
=
p_es
->
audio
.
i_channels
;
p_mes
->
i_rate
=
p_es
->
audio
.
i_rate
;
break
;
case
SPU_ES
:
p_mes
->
i_type
=
libvlc_es_text
;
break
;
}
}
vlc_mutex_unlock
(
&
p_input_item
->
lock
);
return
i_es
;
}
src/libvlc.sym
View file @
0da465f6
...
@@ -61,6 +61,7 @@ libvlc_media_discoverer_release
...
@@ -61,6 +61,7 @@ libvlc_media_discoverer_release
libvlc_media_duplicate
libvlc_media_duplicate
libvlc_media_event_manager
libvlc_media_event_manager
libvlc_media_get_duration
libvlc_media_get_duration
libvlc_media_get_es
libvlc_media_get_meta
libvlc_media_get_meta
libvlc_media_get_mrl
libvlc_media_get_mrl
libvlc_media_get_state
libvlc_media_get_state
...
...
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