diff options
author | Reynaldo H. Verdejo Pinochet <r.verdejo@sisa.samsung.com> | 2014-02-13 15:03:52 -0300 |
---|---|---|
committer | Reynaldo H. Verdejo Pinochet <r.verdejo@sisa.samsung.com> | 2014-02-14 14:31:42 -0300 |
commit | 87079bd055e3c6e97c0c04c9a26157f99478bdba (patch) | |
tree | 14c6d317918d6550d107a90d90e2b418573c3046 /ffserver.c | |
parent | 720530e52aec24cd46d16e5c84052d7c1018e5ba (diff) | |
download | ffmpeg-87079bd055e3c6e97c0c04c9a26157f99478bdba.tar.gz |
ffserver: merge RTSP's teardown & pause routines
They were basically the same.
Signed-off-by: Reynaldo H. Verdejo Pinochet <r.verdejo@sisa.samsung.com>
Diffstat (limited to 'ffserver.c')
-rw-r--r-- | ffserver.c | 45 |
1 files changed, 14 insertions, 31 deletions
diff --git a/ffserver.c b/ffserver.c index bed71b64c2..c2d2180e8c 100644 --- a/ffserver.c +++ b/ffserver.c @@ -287,8 +287,7 @@ static void rtsp_cmd_describe(HTTPContext *c, const char *url); static void rtsp_cmd_options(HTTPContext *c, const char *url); static void rtsp_cmd_setup(HTTPContext *c, const char *url, RTSPMessageHeader *h); static void rtsp_cmd_play(HTTPContext *c, const char *url, RTSPMessageHeader *h); -static void rtsp_cmd_pause(HTTPContext *c, const char *url, RTSPMessageHeader *h); -static void rtsp_cmd_teardown(HTTPContext *c, const char *url, RTSPMessageHeader *h); +static void rtsp_cmd_interrupt(HTTPContext *c, const char *url, RTSPMessageHeader *h, int pause_only); /* SDP handling */ static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer, @@ -2962,9 +2961,9 @@ static int rtsp_parse_request(HTTPContext *c) else if (!strcmp(cmd, "PLAY")) rtsp_cmd_play(c, url, header); else if (!strcmp(cmd, "PAUSE")) - rtsp_cmd_pause(c, url, header); + rtsp_cmd_interrupt(c, url, header, 1); else if (!strcmp(cmd, "TEARDOWN")) - rtsp_cmd_teardown(c, url, header); + rtsp_cmd_interrupt(c, url, header, 0); else rtsp_reply_error(c, RTSP_STATUS_METHOD); @@ -3318,7 +3317,7 @@ static void rtsp_cmd_play(HTTPContext *c, const char *url, RTSPMessageHeader *h) avio_printf(c->pb, "\r\n"); } -static void rtsp_cmd_pause(HTTPContext *c, const char *url, RTSPMessageHeader *h) +static void rtsp_cmd_interrupt(HTTPContext *c, const char *url, RTSPMessageHeader *h, int pause_only) { HTTPContext *rtp_c; @@ -3328,29 +3327,14 @@ static void rtsp_cmd_pause(HTTPContext *c, const char *url, RTSPMessageHeader *h return; } - if (rtp_c->state != HTTPSTATE_SEND_DATA && - rtp_c->state != HTTPSTATE_WAIT_FEED) { - rtsp_reply_error(c, RTSP_STATUS_STATE); - return; - } - - rtp_c->state = HTTPSTATE_READY; - rtp_c->first_pts = AV_NOPTS_VALUE; - /* now everything is OK, so we can send the connection parameters */ - rtsp_reply_header(c, RTSP_STATUS_OK); - /* session ID */ - avio_printf(c->pb, "Session: %s\r\n", rtp_c->session_id); - avio_printf(c->pb, "\r\n"); -} - -static void rtsp_cmd_teardown(HTTPContext *c, const char *url, RTSPMessageHeader *h) -{ - HTTPContext *rtp_c; - - rtp_c = find_rtp_session_with_url(url, h->session_id); - if (!rtp_c) { - rtsp_reply_error(c, RTSP_STATUS_SESSION); - return; + if (pause_only) { + if (rtp_c->state != HTTPSTATE_SEND_DATA && + rtp_c->state != HTTPSTATE_WAIT_FEED) { + rtsp_reply_error(c, RTSP_STATUS_STATE); + return; + } + rtp_c->state = HTTPSTATE_READY; + rtp_c->first_pts = AV_NOPTS_VALUE; } /* now everything is OK, so we can send the connection parameters */ @@ -3359,11 +3343,10 @@ static void rtsp_cmd_teardown(HTTPContext *c, const char *url, RTSPMessageHeader avio_printf(c->pb, "Session: %s\r\n", rtp_c->session_id); avio_printf(c->pb, "\r\n"); - /* abort the session */ - close_connection(rtp_c); + if (!pause_only) + close_connection(rtp_c); } - /********************************************************************/ /* RTP handling */ |