Add seq and rtptime params to record/flush with a view to using these for timing and device suspension

git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/coling@2500 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
Colin Guthrie 2008-06-09 21:59:41 +00:00
parent 651da7d095
commit 5f527dc479
3 changed files with 21 additions and 9 deletions

View file

@ -90,6 +90,9 @@ struct pa_raop_client {
pa_socket_client *sc; pa_socket_client *sc;
int fd; int fd;
uint16_t seq;
uint32_t rtptime;
pa_raop_client_cb_t callback; pa_raop_client_cb_t callback;
void* userdata; void* userdata;
pa_raop_client_closed_cb_t closed_callback; pa_raop_client_closed_cb_t closed_callback;
@ -317,7 +320,7 @@ static void rtsp_cb(pa_rtsp_client *rtsp, pa_rtsp_state state, pa_headerlist* he
} else { } else {
pa_log_warn("Audio Jack Status missing"); pa_log_warn("Audio Jack Status missing");
} }
pa_rtsp_record(c->rtsp); pa_rtsp_record(c->rtsp, &c->seq, &c->rtptime);
break; break;
} }
@ -403,8 +406,6 @@ void pa_raop_client_free(pa_raop_client* c)
} }
static void noop(PA_GCC_UNUSED void* p) {}
int pa_raop_client_encode_sample(pa_raop_client* c, pa_memchunk* raw, pa_memchunk* encoded) int pa_raop_client_encode_sample(pa_raop_client* c, pa_memchunk* raw, pa_memchunk* encoded)
{ {
uint16_t len; uint16_t len;

View file

@ -47,6 +47,8 @@
#include <pulsecore/strbuf.h> #include <pulsecore/strbuf.h>
#include <pulsecore/poll.h> #include <pulsecore/poll.h>
#include <pulsecore/ioline.h> #include <pulsecore/ioline.h>
#include <pulsecore/time-smoother.h>
#include <pulsecore/rtclock.h>
#include "rtsp_client.h" #include "rtsp_client.h"
@ -467,9 +469,10 @@ int pa_rtsp_setup(pa_rtsp_client* c) {
} }
int pa_rtsp_record(pa_rtsp_client* c) { int pa_rtsp_record(pa_rtsp_client* c, uint16_t* seq, uint32_t* rtptime) {
pa_headerlist* headers; pa_headerlist* headers;
int rv; int rv;
char *info;
pa_assert(c); pa_assert(c);
if (!c->session) { if (!c->session) {
@ -477,9 +480,14 @@ int pa_rtsp_record(pa_rtsp_client* c) {
return -1; return -1;
} }
/* Todo: Generate these values randomly as per spec */
*seq = *rtptime = 0;
headers = pa_headerlist_new(); headers = pa_headerlist_new();
pa_headerlist_puts(headers, "Range", "npt=0-"); pa_headerlist_puts(headers, "Range", "npt=0-");
pa_headerlist_puts(headers, "RTP-Info", "seq=0;rtptime=0"); info = pa_sprintf_malloc("seq=%u;rtptime=%u", *seq, *rtptime);
pa_headerlist_puts(headers, "RTP-Info", info);
pa_xfree(info);
c->state = STATE_RECORD; c->state = STATE_RECORD;
rv = rtsp_exec(c, "RECORD", NULL, NULL, 1, headers); rv = rtsp_exec(c, "RECORD", NULL, NULL, 1, headers);
@ -506,14 +514,17 @@ int pa_rtsp_setparameter(pa_rtsp_client *c, const char* param) {
} }
int pa_rtsp_flush(pa_rtsp_client *c) { int pa_rtsp_flush(pa_rtsp_client *c, uint16_t seq, uint32_t rtptime) {
pa_headerlist* headers; pa_headerlist* headers;
int rv; int rv;
char *info;
pa_assert(c); pa_assert(c);
headers = pa_headerlist_new(); headers = pa_headerlist_new();
pa_headerlist_puts(headers, "RTP-Info", "seq=0;rtptime=0"); info = pa_sprintf_malloc("seq=%u;rtptime=%u", seq, rtptime);
pa_headerlist_puts(headers, "RTP-Info", info);
pa_xfree(info);
c->state = STATE_FLUSH; c->state = STATE_FLUSH;
rv = rtsp_exec(c, "FLUSH", NULL, NULL, 1, headers); rv = rtsp_exec(c, "FLUSH", NULL, NULL, 1, headers);

View file

@ -66,10 +66,10 @@ void pa_rtsp_remove_header(pa_rtsp_client *c, const char* key);
int pa_rtsp_announce(pa_rtsp_client* c, const char* sdp); int pa_rtsp_announce(pa_rtsp_client* c, const char* sdp);
int pa_rtsp_setup(pa_rtsp_client* c); int pa_rtsp_setup(pa_rtsp_client* c);
int pa_rtsp_record(pa_rtsp_client* c); int pa_rtsp_record(pa_rtsp_client* c, uint16_t* seq, uint32_t* rtptime);
int pa_rtsp_teardown(pa_rtsp_client* c); int pa_rtsp_teardown(pa_rtsp_client* c);
int pa_rtsp_setparameter(pa_rtsp_client* c, const char* param); int pa_rtsp_setparameter(pa_rtsp_client* c, const char* param);
int pa_rtsp_flush(pa_rtsp_client* c); int pa_rtsp_flush(pa_rtsp_client* c, uint16_t seq, uint32_t rtptime);
#endif #endif