- enum CodecID codec_id;
-
- // may be null
- int (*parse_sdp_a_line) (AVFormatContext *s,
- int st_index,
- PayloadContext *priv_data,
- const char *line); ///< Parse the a= line from the sdp field
- PayloadContext *(*open) (void); ///< allocate any data needed by the rtp parsing for this dynamic data.
- void (*close)(PayloadContext *protocol_data); ///< free any data needed by the rtp parsing for this dynamic data.
- DynamicPayloadPacketHandlerProc parse_packet; ///< parse handler for this dynamic packet.
-
- struct RTPDynamicProtocolHandler_s *next;
+ 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. */
+ int priv_data_size;
+
+ /** Initialize dynamic protocol handler, called after the full rtpmap line is parsed, may be null */
+ int (*init)(AVFormatContext *s, int st_index, PayloadContext *priv_data);
+ /** Parse the a= line from the sdp field */
+ int (*parse_sdp_a_line)(AVFormatContext *s, int st_index,
+ PayloadContext *priv_data, const char *line);
+ /** Free any data needed by the rtp parsing for this dynamic data.
+ * Don't free the protocol_data pointer itself, that is freed by the
+ * caller. This is called even if the init method failed. */
+ void (*close)(PayloadContext *protocol_data);
+ /** Parse handler for this dynamic packet */
+ DynamicPayloadPacketHandlerProc parse_packet;
+ int (*need_keyframe)(PayloadContext *context);
+
+ struct RTPDynamicProtocolHandler *next;