Notify media readers when indexed playback data becomes available
This commit is contained in:
1 parent
5c12ba253e
commit
75bd6f1ce1
2 files changed
+8
-2
No files matched your search
+7
-1
@@ -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);
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
Reference in new issue
Block a user