Browse Source

Notify media readers when indexed playback data becomes available

master
evgeny 5 days ago
parent
commit
75bd6f1ce1
  1. 8
      src/stream/stream.c
  2. 2
      src/stream/stream.h

8
src/stream/stream.c

@ -327,6 +327,12 @@ static void session_media_work(void *arg) {
stream_media_store_finish(s->media);
if (!s->media_failed && s->media_next < s->next_seq) again = 1;
}
if (!s->closing && s->service->callback && !s->service->stopping && s->owners > s->relay_owners) {
struct stream_event event = {.descriptor = s->descriptor, .type = STREAM_EVENT_AVAILABLE, .first_seq = s->media_next};
s->service->dispatching++;
s->service->callback(s->service->inst, &event, s->service->arg);
s->service->dispatching--;
}
s->holds--;
if (s->closing) { if (!s->holds && !s->delivery) session_free(s); }
else if (again) session_media_schedule(s);
@ -334,7 +340,7 @@ static void session_media_work(void *arg) {
/* Индексация не зависит от позиции/паузы плеера и не создаёт отдельную очередь медиаданных. */
static void session_media_schedule(struct stream_session *s) {
if (!s->media || s->media_work || s->closing || s->media_failed || s->service->stopping) return;
if (!s->media || s->media_work || s->closing || s->service->stopping) return;
s->media_work = uasync_call_soon(s->service->inst->ua, s, session_media_work);
if (!s->media_work) DEBUG_ERROR(DEBUG_CATEGORY_STREAM, "media index scheduling failed source=%llx",
(unsigned long long)s->descriptor.source_node_id);

2
src/stream/stream.h

@ -20,7 +20,7 @@ struct stream_service;
struct stream_parameters { uint8_t n, r; uint16_t block_size; }; /* block_size — максимум RS-части. */
enum stream_event_type { STREAM_EVENT_DATA, STREAM_EVENT_GAP, STREAM_EVENT_END, STREAM_EVENT_CLOSED };
enum stream_event_type { STREAM_EVENT_DATA, STREAM_EVENT_GAP, STREAM_EVENT_END, STREAM_EVENT_CLOSED, STREAM_EVENT_AVAILABLE };
enum stream_close_reason {
STREAM_CLOSE_STOPPED, STREAM_CLOSE_GROUP, STREAM_CLOSE_SERVICE, STREAM_CLOSE_SOURCE_CHANGED,
STREAM_CLOSE_MEMBER, STREAM_CLOSE_FAILED

Loading…
Cancel
Save