rtpdec: Allow setting the need_parsing field in RTPDynamicProtocolHandler
This allows getting rid of quite a bit of boilerplate in depacketizers. The default value (initializing need_parsing to 0, aka AVSTREAM_PARSE_NONE) is the same as it is initialized to by default in AVStream. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
b651c9139e
commit
b7a4c319fd
@ -116,6 +116,7 @@ struct RTPDynamicProtocolHandler {
|
||||
const char *enc_name;
|
||||
enum AVMediaType codec_type;
|
||||
enum AVCodecID codec_id;
|
||||
enum AVStreamParseType need_parsing;
|
||||
int static_payload_id; /* 0 means no payload id is set. 0 is a valid
|
||||
* payload ID (PCMU), too, but that format doesn't
|
||||
* require any custom depacketization code. */
|
||||
|
@ -176,13 +176,16 @@ static int get_sockaddr(const char *buf, struct sockaddr_storage *sock)
|
||||
|
||||
#if CONFIG_RTPDEC
|
||||
static void init_rtp_handler(RTPDynamicProtocolHandler *handler,
|
||||
RTSPStream *rtsp_st, AVCodecContext *codec)
|
||||
RTSPStream *rtsp_st, AVStream *st)
|
||||
{
|
||||
AVCodecContext *codec = st ? st->codec : NULL;
|
||||
if (!handler)
|
||||
return;
|
||||
if (codec)
|
||||
codec->codec_id = handler->codec_id;
|
||||
rtsp_st->dynamic_handler = handler;
|
||||
if (st)
|
||||
st->need_parsing = handler->need_parsing;
|
||||
if (handler->alloc) {
|
||||
rtsp_st->dynamic_protocol_context = handler->alloc();
|
||||
if (!rtsp_st->dynamic_protocol_context)
|
||||
@ -215,7 +218,7 @@ static int sdp_parse_rtpmap(AVFormatContext *s,
|
||||
if (codec->codec_id == AV_CODEC_ID_NONE) {
|
||||
RTPDynamicProtocolHandler *handler =
|
||||
ff_rtp_handler_find_by_name(buf, codec->codec_type);
|
||||
init_rtp_handler(handler, rtsp_st, codec);
|
||||
init_rtp_handler(handler, rtsp_st, st);
|
||||
/* If no dynamic handler was found, check with the list of standard
|
||||
* allocated types, if such a stream for some reason happens to
|
||||
* use a private payload type. This isn't handled in rtpdec.c, since
|
||||
@ -465,7 +468,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
|
||||
/* Even static payload types may need a custom depacketizer */
|
||||
handler = ff_rtp_handler_find_by_id(
|
||||
rtsp_st->sdp_payload_type, st->codec->codec_type);
|
||||
init_rtp_handler(handler, rtsp_st, st->codec);
|
||||
init_rtp_handler(handler, rtsp_st, st);
|
||||
if (handler && handler->init)
|
||||
handler->init(s, st->index,
|
||||
rtsp_st->dynamic_protocol_context);
|
||||
|
Loading…
x
Reference in New Issue
Block a user