io: rename some segment variables

Also initalize a default segment in the node.
This commit is contained in:
Wim Taymans 2019-08-27 21:49:49 +02:00
parent 7c865f5db0
commit 2805713da3
3 changed files with 22 additions and 18 deletions

@ -1 +1 @@
Subproject commit 3daf9f85d27a8af8f73daf975d273c01be1797bd Subproject commit 796278b207e686403638d1c850ce01fa0a0fee48

View file

@ -139,17 +139,17 @@ struct spa_io_segment_video {
* A segment converts a raw clock time to a segment (stream) position. * A segment converts a raw clock time to a segment (stream) position.
* *
* The segment position is valid when the current clock position is between * The segment position is valid when the current clock position is between
* clock_start and clock_start + clock_duration. The position is then * start and start + duration. The position is then
* calculated as: * calculated as:
* *
* (clock_start - clock.position) * rate + position; * (start - clock.position) * rate + position;
* *
* Support for looping is done by specifying a non-zero duration. When the * Support for looping is done by specifying a non-zero duration. When the
* clock reaches clock_start + clock_duration, clock_duration is added to * clock reaches start + duration, duration is added to start and the
* clock_start and the loop repeats. * loop repeats.
* *
* Care has to be taken when the clock.duration extends past the * Care has to be taken when the clock.duration extends past the
* clock_start + clock_duration from the segment; the user should correctly * start + duration from the segment; the user should correctly
* wrap around and partially repeat the loop in the current cycle. * wrap around and partially repeat the loop in the current cycle.
* *
* Extra information can be placed in the segment by setting the valid flags * Extra information can be placed in the segment by setting the valid flags
@ -162,15 +162,15 @@ struct spa_io_segment {
#define SPA_IO_SEGMENT_VALID_BAR (1<<1) #define SPA_IO_SEGMENT_VALID_BAR (1<<1)
#define SPA_IO_SEGMENT_VALID_VIDEO (1<<2) #define SPA_IO_SEGMENT_VALID_VIDEO (1<<2)
uint32_t valid; /**< indicates what fields are valid below */ uint32_t valid; /**< indicates what fields are valid below */
uint64_t clock_start; /**< position against clock position when this uint64_t start; /**< position against clock position when this
* info is active. Can be in the future for * info is active. Can be in the future for
* pending changes. It does not have to be in * pending changes. It does not have to be in
* exact multiples of the clock duration. */ * exact multiples of the clock duration. */
uint64_t clock_duration; /**< duration when this info becomes invalid. If uint64_t duration; /**< duration when this info becomes invalid. If
* the duration is 0, this segment extends to the * the duration is 0, this segment extends to the
* next segment. If the segment becomes invalid and * next segment. If the segment becomes invalid and
* the looping flag is set, the segment is repeats. */ * the looping flag is set, the segment is repeats. */
uint64_t position; /**< The position when the clock == clock_start. */ uint64_t position; /**< The position when the clock == start. */
double rate; /**< overal rate of the graph, can be negative for double rate; /**< overal rate of the graph, can be negative for
* backwards time reporting. */ * backwards time reporting. */
@ -195,7 +195,7 @@ enum spa_io_position_state {
* *
* The position information contains 1 or more segments that convert the * The position information contains 1 or more segments that convert the
* raw clock times to a stream time. They are sorted based on their * raw clock times to a stream time. They are sorted based on their
* clock_start times, and thus the order in which they will activate in * start times, and thus the order in which they will activate in
* the future. This makes it possible to look ahead in the scheduled * the future. This makes it possible to look ahead in the scheduled
* segments and anticipate the changes in the timeline. * segments and anticipate the changes in the timeline.
*/ */

View file

@ -963,6 +963,13 @@ struct pw_node *pw_node_new(struct pw_core *core,
this->rt.activation->position.clock.rate = SPA_FRACTION(1, 48000); this->rt.activation->position.clock.rate = SPA_FRACTION(1, 48000);
this->rt.activation->position.clock.duration = DEFAULT_QUANTUM; this->rt.activation->position.clock.duration = DEFAULT_QUANTUM;
this->rt.activation->position.n_segments = 1;
this->rt.activation->position.segments[0].flags = 0;
this->rt.activation->position.segments[0].valid = SPA_IO_SEGMENT_VALID_POSITION;
this->rt.activation->position.segments[0].start = 0;
this->rt.activation->position.segments[0].duration = 0;
this->rt.activation->position.segments[0].position = 0;
this->rt.activation->position.segments[0].rate = 1.0;
check_properties(this); check_properties(this);
@ -1196,8 +1203,8 @@ static void update_position(struct pw_node *node)
if (change_mask & PW_NODE_ACTIVATION_UPDATE_REPOSITION) { if (change_mask & PW_NODE_ACTIVATION_UPDATE_REPOSITION) {
pw_log_debug("update position:%lu", segment.position); pw_log_debug("update position:%lu", segment.position);
seg->flags = segment.flags; seg->flags = segment.flags;
seg->clock_start = segment.clock_start; seg->start = segment.start;
seg->clock_duration = segment.clock_duration; seg->duration = segment.duration;
seg->position = segment.position; seg->position = segment.position;
seg->rate = segment.rate; seg->rate = segment.rate;
} }
@ -1212,14 +1219,11 @@ static void update_position(struct pw_node *node)
break; break;
} }
} }
if (seg->rate == 0.0) if (seg->start == 0)
seg->rate = 1.0; seg->start = a->position.clock.position;
if (seg->clock_start == 0)
seg->clock_start = a->position.clock.position;
if (a->position.state == SPA_IO_POSITION_STATE_STOPPED) if (a->position.state == SPA_IO_POSITION_STATE_STOPPED)
seg->clock_start += a->position.clock.duration; seg->start += a->position.clock.duration;
} }
static int node_ready(void *data, int status) static int node_ready(void *data, int status)