recorder: don't use a magic index for mp_recorder_get_sink()

Although this was sort of elegant, it just seems to complicate things
slightly. Originally, the API meant that you cache mp_recorder_sink
yourself (which would avoid the mess of passing an index around), but
that too seems slightly roundabout.

In a later change, I want to change the set of streams passed to
mp_recorder_create(), and then I'd have to keep track of the index for
each stream, which would suck. With this commit, I can just pass the
unambiguous sh_stream to it, and it will be guaranteed to match the
correct stream.

The disadvantages are barely worth discussing. It's a new linear search
per packet, but usually only 2 to 4 streams are active at a time. Also,
in theory a user could want to write 2 streams using the same sh_stream
(same metadata, just writing different packets or so), but in practice
this is never done.
This commit is contained in:
wm4
2019-09-29 01:39:17 +02:00
parent 2bb5ab07b7
commit a604dc12be
4 changed files with 16 additions and 8 deletions

View File

@@ -328,11 +328,17 @@ void mp_recorder_mark_discontinuity(struct mp_recorder *priv)
}
// Get a stream for writing. The pointer is valid until mp_recorder is
// destroyed. The stream is the index referencing the stream passed to
// mp_recorder_create().
struct mp_recorder_sink *mp_recorder_get_sink(struct mp_recorder *r, int stream)
// destroyed. The stream ptr. is the same as one passed to
// mp_recorder_create() (returns NULL if it wasn't).
struct mp_recorder_sink *mp_recorder_get_sink(struct mp_recorder *r,
struct sh_stream *stream)
{
return stream >= 0 && stream < r->num_streams ? r->streams[stream] : NULL;
for (int n = 0; n < r->num_streams; n++) {
struct mp_recorder_sink *rst = r->streams[n];
if (rst->sh == stream)
return rst;
}
return NULL;
}
// Pass a packet to the given stream. The function does not own the packet, but