[1/2] rtpdec: Add an init function that can do custom codec context initialization

Message ID 1322578791-18818-1-git-send-email-martin@martin.st
State Committed
Commit 258366066479391aa998e3c8e87f70bec559db72
Headers show

Commit Message

Martin Storsjö Nov. 29, 2011, 2:59 p.m.
---
 libavformat/rtpdec.h |    1 +
 libavformat/rtsp.c   |    6 ++++++
 2 files changed, 7 insertions(+), 0 deletions(-)

Comments

Luca Barbato Nov. 30, 2011, 4:18 a.m. | #1
On 29/11/11 15:59, Martin Storsjö wrote:
> @@ -122,6 +122,7 @@ struct RTPDynamicProtocolHandler_s {

Ok.

Patch

diff --git a/libavformat/rtpdec.h b/libavformat/rtpdec.h
index eb1e62d..9e2bfd0 100644
--- a/libavformat/rtpdec.h
+++ b/libavformat/rtpdec.h
@@ -122,6 +122,7 @@  struct RTPDynamicProtocolHandler_s {
                             * require any custom depacketization code. */
 
     // may be null
+    int (*init)(AVFormatContext *s, int st_index, PayloadContext *priv_data); ///< Initialize dynamic protocol handler, called after the full rtpmap line is parsed
     int (*parse_sdp_a_line) (AVFormatContext *s,
                              int st_index,
                              PayloadContext *priv_data,
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index d0e9bbf..1f32050 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -251,6 +251,9 @@  static int sdp_parse_rtpmap(AVFormatContext *s,
     default:
         break;
     }
+    if (rtsp_st->dynamic_handler && rtsp_st->dynamic_handler->init)
+        rtsp_st->dynamic_handler->init(s, st->index,
+                                       rtsp_st->dynamic_protocol_context);
     return 0;
 }
 
@@ -387,6 +390,9 @@  static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
                 handler = ff_rtp_handler_find_by_id(
                               rtsp_st->sdp_payload_type, st->codec->codec_type);
                 init_rtp_handler(handler, rtsp_st, st->codec);
+                if (handler && handler->init)
+                    handler->init(s, st->index,
+                                  rtsp_st->dynamic_protocol_context);
             }
         }
         /* put a default control url */