Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
61974537
Commit
61974537
authored
Jan 01, 2018
by
Josh de Kock
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavf/rtp: replace linked list with array
parent
7e8eba2d
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
100 additions
and
81 deletions
+100
-81
allformats.c
libavformat/allformats.c
+0
-4
rdt.c
libavformat/rdt.c
+1
-8
rdt.h
libavformat/rdt.h
+0
-5
rtpdec.c
libavformat/rtpdec.c
+77
-61
rtpdec.h
libavformat/rtpdec.h
+22
-3
No files found.
libavformat/allformats.c
View file @
61974537
...
...
@@ -282,10 +282,6 @@ static void register_all(void)
REGISTER_DEMUXER
(
SDR2
,
sdr2
);
REGISTER_DEMUXER
(
SDS
,
sds
);
REGISTER_DEMUXER
(
SDX
,
sdx
);
#if CONFIG_RTPDEC
ff_register_rtp_dynamic_payload_handlers
();
ff_register_rdt_dynamic_payload_handlers
();
#endif
REGISTER_DEMUXER
(
SEGAFILM
,
segafilm
);
REGISTER_MUXER
(
SEGMENT
,
segment
);
REGISTER_MUXER
(
SEGMENT
,
stream_segment
);
...
...
libavformat/rdt.c
View file @
61974537
...
...
@@ -554,7 +554,7 @@ rdt_close_context (PayloadContext *rdt)
}
#define RDT_HANDLER(n, s, t) \
static RTPDynamicProtocolHandler
rdt_ ## n ## _handler = { \
RTPDynamicProtocolHandler ff_
rdt_ ## n ## _handler = { \
.enc_name = s, \
.codec_type = t, \
.codec_id = AV_CODEC_ID_NONE, \
...
...
@@ -570,10 +570,3 @@ RDT_HANDLER(live_audio, "x-pn-multirate-realaudio-live", AVMEDIA_TYPE_AUDIO);
RDT_HANDLER
(
video
,
"x-pn-realvideo"
,
AVMEDIA_TYPE_VIDEO
);
RDT_HANDLER
(
audio
,
"x-pn-realaudio"
,
AVMEDIA_TYPE_AUDIO
);
void
ff_register_rdt_dynamic_payload_handlers
(
void
)
{
ff_register_dynamic_payload_handler
(
&
rdt_video_handler
);
ff_register_dynamic_payload_handler
(
&
rdt_audio_handler
);
ff_register_dynamic_payload_handler
(
&
rdt_live_video_handler
);
ff_register_dynamic_payload_handler
(
&
rdt_live_audio_handler
);
}
libavformat/rdt.h
View file @
61974537
...
...
@@ -59,11 +59,6 @@ void ff_rdt_parse_close(RDTDemuxContext *s);
void
ff_rdt_calc_response_and_checksum
(
char
response
[
41
],
char
chksum
[
9
],
const
char
*
challenge
);
/**
* Register RDT-related dynamic payload handlers with our cache.
*/
void
ff_register_rdt_dynamic_payload_handlers
(
void
);
/**
* Add subscription information to Subscribe parameter string.
*
...
...
libavformat/rtpdec.c
View file @
61974537
...
...
@@ -69,88 +69,104 @@ static RTPDynamicProtocolHandler t140_dynamic_handler = { /* RFC 4103 */
.
codec_id
=
AV_CODEC_ID_TEXT
,
};
static
RTPDynamicProtocolHandler
*
rtp_first_dynamic_payload_handler
=
NULL
;
extern
RTPDynamicProtocolHandler
ff_rdt_video_handler
;
extern
RTPDynamicProtocolHandler
ff_rdt_audio_handler
;
extern
RTPDynamicProtocolHandler
ff_rdt_live_video_handler
;
extern
RTPDynamicProtocolHandler
ff_rdt_live_audio_handler
;
static
const
RTPDynamicProtocolHandler
*
rtp_dynamic_protocol_handler_list
[]
=
{
/* rtp */
&
ff_ac3_dynamic_handler
,
&
ff_amr_nb_dynamic_handler
,
&
ff_amr_wb_dynamic_handler
,
&
ff_dv_dynamic_handler
,
&
ff_g726_16_dynamic_handler
,
&
ff_g726_24_dynamic_handler
,
&
ff_g726_32_dynamic_handler
,
&
ff_g726_40_dynamic_handler
,
&
ff_g726le_16_dynamic_handler
,
&
ff_g726le_24_dynamic_handler
,
&
ff_g726le_32_dynamic_handler
,
&
ff_g726le_40_dynamic_handler
,
&
ff_h261_dynamic_handler
,
&
ff_h263_1998_dynamic_handler
,
&
ff_h263_2000_dynamic_handler
,
&
ff_h263_rfc2190_dynamic_handler
,
&
ff_h264_dynamic_handler
,
&
ff_hevc_dynamic_handler
,
&
ff_ilbc_dynamic_handler
,
&
ff_jpeg_dynamic_handler
,
&
ff_mp4a_latm_dynamic_handler
,
&
ff_mp4v_es_dynamic_handler
,
&
ff_mpeg_audio_dynamic_handler
,
&
ff_mpeg_audio_robust_dynamic_handler
,
&
ff_mpeg_video_dynamic_handler
,
&
ff_mpeg4_generic_dynamic_handler
,
&
ff_mpegts_dynamic_handler
,
&
ff_ms_rtp_asf_pfa_handler
,
&
ff_ms_rtp_asf_pfv_handler
,
&
ff_qcelp_dynamic_handler
,
&
ff_qdm2_dynamic_handler
,
&
ff_qt_rtp_aud_handler
,
&
ff_qt_rtp_vid_handler
,
&
ff_quicktime_rtp_aud_handler
,
&
ff_quicktime_rtp_vid_handler
,
&
ff_rfc4175_rtp_handler
,
&
ff_svq3_dynamic_handler
,
&
ff_theora_dynamic_handler
,
&
ff_vc2hq_dynamic_handler
,
&
ff_vorbis_dynamic_handler
,
&
ff_vp8_dynamic_handler
,
&
ff_vp9_dynamic_handler
,
&
gsm_dynamic_handler
,
&
l24_dynamic_handler
,
&
opus_dynamic_handler
,
&
realmedia_mp3_dynamic_handler
,
&
speex_dynamic_handler
,
&
t140_dynamic_handler
,
/* rdt */
&
ff_rdt_video_handler
,
&
ff_rdt_audio_handler
,
&
ff_rdt_live_video_handler
,
&
ff_rdt_live_audio_handler
,
NULL
,
};
void
ff_register_dynamic_payload_handler
(
RTPDynamicProtocolHandler
*
handler
)
const
RTPDynamicProtocolHandler
*
ff_rtp_handler_iterate
(
void
**
opaque
)
{
handler
->
next
=
rtp_first_dynamic_payload_handler
;
rtp_first_dynamic_payload_handler
=
handler
;
}
uintptr_t
i
=
(
uintptr_t
)
*
opaque
;
const
RTPDynamicProtocolHandler
*
r
=
rtp_dynamic_protocol_handler_list
[
i
];
void
ff_register_rtp_dynamic_payload_handlers
(
void
)
{
ff_register_dynamic_payload_handler
(
&
ff_ac3_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_amr_nb_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_amr_wb_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_dv_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_g726_16_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_g726_24_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_g726_32_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_g726_40_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_g726le_16_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_g726le_24_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_g726le_32_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_g726le_40_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_h261_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_h263_1998_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_h263_2000_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_h263_rfc2190_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_h264_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_hevc_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_ilbc_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_jpeg_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_mp4a_latm_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_mp4v_es_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_mpeg_audio_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_mpeg_audio_robust_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_mpeg_video_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_mpeg4_generic_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_mpegts_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_ms_rtp_asf_pfa_handler
);
ff_register_dynamic_payload_handler
(
&
ff_ms_rtp_asf_pfv_handler
);
ff_register_dynamic_payload_handler
(
&
ff_qcelp_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_qdm2_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_qt_rtp_aud_handler
);
ff_register_dynamic_payload_handler
(
&
ff_qt_rtp_vid_handler
);
ff_register_dynamic_payload_handler
(
&
ff_quicktime_rtp_aud_handler
);
ff_register_dynamic_payload_handler
(
&
ff_quicktime_rtp_vid_handler
);
ff_register_dynamic_payload_handler
(
&
ff_rfc4175_rtp_handler
);
ff_register_dynamic_payload_handler
(
&
ff_svq3_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_theora_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_vc2hq_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_vorbis_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_vp8_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
ff_vp9_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
gsm_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
l24_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
opus_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
realmedia_mp3_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
speex_dynamic_handler
);
ff_register_dynamic_payload_handler
(
&
t140_dynamic_handler
);
if
(
r
)
*
opaque
=
(
void
*
)(
i
+
1
);
return
r
;
}
RTPDynamicProtocolHandler
*
ff_rtp_handler_find_by_name
(
const
char
*
name
,
enum
AVMediaType
codec_type
)
{
RTPDynamicProtocolHandler
*
handler
;
for
(
handler
=
rtp_first_dynamic_payload_
handler
;
handler
;
handler
=
handler
->
next
)
void
*
i
=
0
;
const
RTPDynamicProtocolHandler
*
handler
;
while
(
handler
=
ff_rtp_handler_iterate
(
&
i
))
{
if
(
handler
->
enc_name
&&
!
av_strcasecmp
(
name
,
handler
->
enc_name
)
&&
codec_type
==
handler
->
codec_type
)
return
handler
;
}
return
NULL
;
}
RTPDynamicProtocolHandler
*
ff_rtp_handler_find_by_id
(
int
id
,
enum
AVMediaType
codec_type
)
{
RTPDynamicProtocolHandler
*
handler
;
for
(
handler
=
rtp_first_dynamic_payload_
handler
;
handler
;
handler
=
handler
->
next
)
void
*
i
=
0
;
const
RTPDynamicProtocolHandler
*
handler
;
while
(
handler
=
ff_rtp_handler_iterate
(
&
i
))
{
if
(
handler
->
static_payload_id
&&
handler
->
static_payload_id
==
id
&&
codec_type
==
handler
->
codec_type
)
return
handler
;
}
return
NULL
;
}
...
...
libavformat/rtpdec.h
View file @
61974537
...
...
@@ -192,9 +192,30 @@ struct RTPDemuxContext {
PayloadContext
*
dynamic_protocol_context
;
};
void
ff_register_dynamic_payload_handler
(
RTPDynamicProtocolHandler
*
handler
);
/**
* Iterate over all registered rtp dynamic protocol handlers.
*
* @param opaque a pointer where libavformat will store the iteration state. Must
* point to NULL to start the iteration.
*
* @return the next registered rtp dynamic protocol handler or NULL when the iteration is
* finished
*/
const
RTPDynamicProtocolHandler
*
ff_rtp_handler_iterate
(
void
**
opaque
);
/**
* Find a registered rtp dynamic protocol handler with the specified name.
*
* @param name name of the requested rtp dynamic protocol handler
* @return A rtp dynamic protocol handler if one was found, NULL otherwise.
*/
RTPDynamicProtocolHandler
*
ff_rtp_handler_find_by_name
(
const
char
*
name
,
enum
AVMediaType
codec_type
);
/**
* Find a registered rtp dynamic protocol handler with a matching codec ID.
*
* @param id AVCodecID of the requested rtp dynamic protocol handler.
* @return A rtp dynamic protocol handler if one was found, NULL otherwise.
*/
RTPDynamicProtocolHandler
*
ff_rtp_handler_find_by_id
(
int
id
,
enum
AVMediaType
codec_type
);
...
...
@@ -209,8 +230,6 @@ int ff_parse_fmtp(AVFormatContext *s,
PayloadContext
*
data
,
const
char
*
attr
,
const
char
*
value
));
void
ff_register_rtp_dynamic_payload_handlers
(
void
);
/**
* Close the dynamic buffer and make a packet from it.
*/
...
...
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