Consume repeated viewer demand when delivering its reply
This commit is contained in:
1 parent
68fb937063
commit
ea5d1fcd45
3 files changed
+45
-5
No files matched your search
@@ -173,20 +173,48 @@ int main(void) {
|
||||
CHECK(stream_member_load(inst, group, inst->node_id, &after_switch, NULL) == STREAM_OK);
|
||||
CHECK(after_switch.published && after_switch.source.source_epoch == member.source.source_epoch);
|
||||
/* Повторные запросы готовят один ответ; получение ответа не создаёт скрытую следующую копию. */
|
||||
debug_set_category_level(DEBUG_CATEGORY_STREAM, DEBUG_LEVEL_DEBUG);
|
||||
for (unsigned i = 0; i < 5; i++)
|
||||
CHECK(android_stream_feed(1, 1, 800000 + i * 40000, 0, video, sizeof(video), &next_format) == 1);
|
||||
for (unsigned i = 0; i < 50; i++) { CHECK(android_stream_read_request(2, 700000, 1, -1) == 0); test_clock_poll(ua, 100); }
|
||||
output = android_stream_pull(2, &size); CHECK(output && output[0] == 1 && stream_read_be(output + 8, 8) == 800000); u_free(output);
|
||||
/* AVAILABLE между pull и отменой demand раньше выдавал второй кадр при занятом decoder input. */
|
||||
CHECK(android_stream_feed(1, 1, 1000000, 0, video, sizeof(video), &next_format) == 1);
|
||||
test_clock_run_for(ua, 1000);
|
||||
output = android_stream_pull(2, &size);
|
||||
DEBUG_INFO(DEBUG_CATEGORY_STREAM, "demand regression: new data after reply, unsolicited_kind=%d", output ? output[0] : 0);
|
||||
CHECK(!output);
|
||||
test_clock_run_for(ua, 1000); CHECK(!android_stream_pull(2, &size));
|
||||
CHECK(android_stream_read_request(2, 700000, 0, -1) == 0); test_clock_run_for(ua, 1000);
|
||||
CHECK(!android_stream_pull(2, &size));
|
||||
for (unsigned frame = 1; frame < 5; frame++) {
|
||||
for (unsigned frame = 1; frame < 6; frame++) {
|
||||
output = NULL;
|
||||
for (unsigned i = 0; i < 1000 && !output; i++) {
|
||||
CHECK(android_stream_read_request(2, 700000, 1, -1) == 0); test_clock_poll(ua, 100); output = android_stream_pull(2, &size);
|
||||
}
|
||||
CHECK(output && output[0] == 1 && stream_read_be(output + 8, 8) == 800000 + frame * 40000); u_free(output);
|
||||
}
|
||||
/* Пустой pull не отменяет WAIT: уже запрошенный кадр приходит после появления данных. */
|
||||
CHECK(android_stream_read_request(2, 1000000, 1, -1) == 0); test_clock_run_for(ua, 1000);
|
||||
CHECK(!android_stream_pull(2, &size));
|
||||
CHECK(android_stream_feed(1, 1, 1040000, 0, video, sizeof(video), &next_format) == 1);
|
||||
test_clock_run_for(ua, 1000);
|
||||
output = android_stream_pull(2, &size);
|
||||
CHECK(output && output[0] == 1 && stream_read_be(output + 8, 8) == 1040000); u_free(output);
|
||||
/* Отмена WAIT сохраняет следующий кадр, а запрос только аудио не забирает видео. */
|
||||
CHECK(android_stream_read_request(2, 1040000, 1, -1) == 0); test_clock_run_for(ua, 1000);
|
||||
CHECK(!android_stream_pull(2, &size)); CHECK(android_stream_read_request(2, 1040000, 0, -1) == 0);
|
||||
CHECK(android_stream_feed(1, 1, 1080000, 0, video, sizeof(video), &next_format) == 1);
|
||||
CHECK(feed(1, 0, 220000, 0, (const uint8_t *)"ops", 3) == 1); test_clock_run_for(ua, 1000);
|
||||
CHECK(!android_stream_pull(2, &size));
|
||||
CHECK(android_stream_read_request(2, 1040000, 0, 80000) == 0); test_clock_run_for(ua, 1000);
|
||||
output = android_stream_pull(2, &size);
|
||||
CHECK(output && output[0] == 2 && stream_read_be(output + 8, 8) == 220000); u_free(output);
|
||||
CHECK(android_stream_read_request(2, 1040000, 1, -1) == 0); test_clock_run_for(ua, 1000);
|
||||
output = android_stream_pull(2, &size);
|
||||
CHECK(output && output[0] == 1 && stream_read_be(output + 8, 8) == 1080000); u_free(output);
|
||||
DEBUG_INFO(DEBUG_CATEGORY_STREAM, "PASS demand regression: one reply, WAIT survives empty pull, cancellation and audio-only preserve video");
|
||||
debug_set_category_level(DEBUG_CATEGORY_STREAM, DEBUG_LEVEL_INFO);
|
||||
android_stream_stop(1); u_free(wait_event(2, 5, &size)); android_stream_stop(2); u_free(wait_event(1, 5, &size));
|
||||
while ((output = android_stream_pull(2, &size))) u_free(output);
|
||||
CHECK(!strcmp(source_snapshot, "[]"));
|
||||
|
||||
Reference in new issue
Block a user