Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Releases
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
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Stefan Westerfeld
ffmpeg
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
Changes
5
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