From 37085788e4d25b9eba65e850b80c8184b51b0ad3 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 5 Jul 2014 16:59:44 +0200 Subject: demux: minor simplification to internal API Also some other unrelated minor changes. --- demux/demux.c | 30 +++++++++++------------------- demux/demux.h | 4 +--- demux/demux_disc.c | 2 +- demux/demux_lavf.c | 2 +- demux/demux_mf.c | 2 +- demux/demux_mkv.c | 8 ++++---- demux/demux_raw.c | 2 +- demux/demux_subreader.c | 2 +- 8 files changed, 21 insertions(+), 31 deletions(-) (limited to 'demux') diff --git a/demux/demux.c b/demux/demux.c index 63b936b820..de896bdc14 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -80,6 +80,7 @@ const demuxer_desc_t *const demuxer_list[] = { }; struct demux_stream { + struct demuxer *demuxer; int selected; // user wants packets from this stream int eof; // end of demuxed stream? (true if all buffer empty) int packs; // number of packets in buffer @@ -125,6 +126,7 @@ struct sh_stream *new_sh_stream(demuxer_t *demuxer, enum stream_type type) .demuxer_id = demuxer_id, // may be overwritten by demuxer .ds = talloc_zero(sh, struct demux_stream), }; + sh->ds->demuxer = demuxer; MP_TARRAY_APPEND(demuxer, demuxer->streams, demuxer->num_streams, sh); switch (sh->type) { case STREAM_VIDEO: sh->video = talloc_zero(demuxer, struct sh_video); break; @@ -174,14 +176,14 @@ static int count_bytes(struct demuxer *demux, enum stream_type type) } // Returns the same value as demuxer->fill_buffer: 1 ok, 0 EOF/not selected. -int demuxer_add_packet(demuxer_t *demuxer, struct sh_stream *stream, - demux_packet_t *dp) +int demux_add_packet(struct sh_stream *stream, demux_packet_t *dp) { struct demux_stream *ds = stream ? stream->ds : NULL; if (!dp || !ds || !ds->selected) { talloc_free(dp); return 0; } + struct demuxer *demuxer = ds->demuxer; dp->stream = stream->index; dp->next = NULL; @@ -196,12 +198,7 @@ int demuxer_add_packet(demuxer_t *demuxer, struct sh_stream *stream, // first packet in stream ds->head = ds->tail = dp; } - /* ds_get_packets() can set ds->eof to 1 when another stream runs out of - * buffer space. That makes sense because in that situation the calling - * code should not count on being able to demux more packets from this - * stream. (Can happen with e.g. badly interleaved files.) - * In this case, we didn't necessarily reach EOF, and new packet can - * appear. */ + // obviously not true anymore ds->eof = 0; // For video, PTS determination is not trivial, but for other media types @@ -209,10 +206,12 @@ int demuxer_add_packet(demuxer_t *demuxer, struct sh_stream *stream, if (stream->type != STREAM_VIDEO && dp->pts == MP_NOPTS_VALUE) dp->pts = dp->dts; - MP_DBG(demuxer, "DEMUX: Append packet to %s, len=%d pts=%5.3f pos=%"PRIi64" " - "[packs: A=%d V=%d S=%d]\n", stream_type_name(stream->type), - dp->len, dp->pts, dp->pos, count_packs(demuxer, STREAM_AUDIO), - count_packs(demuxer, STREAM_VIDEO), count_packs(demuxer, STREAM_SUB)); + if (mp_msg_test(demuxer->log, MSGL_DEBUG)) { + MP_DBG(demuxer, "DEMUX: Append packet to %s, len=%d pts=%5.3f pos=" + "%"PRIi64" [A=%d V=%d S=%d]\n", stream_type_name(stream->type), + dp->len, dp->pts, dp->pos, count_packs(demuxer, STREAM_AUDIO), + count_packs(demuxer, STREAM_VIDEO), count_packs(demuxer, STREAM_SUB)); + } return 1; } @@ -318,13 +317,6 @@ bool demux_has_packet(struct sh_stream *sh) return sh && sh->ds->head; } -// Same as demux_has_packet, but to be called internally by demuxers, as -// opposed to the user of the demuxer. -bool demuxer_stream_has_packets_queued(struct demuxer *d, struct sh_stream *stream) -{ - return demux_has_packet(stream); -} - // Return whether EOF was returned with an earlier packet read. bool demux_stream_eof(struct sh_stream *sh) { diff --git a/demux/demux.h b/demux/demux.h index 1a639794eb..1c1f33ca75 100644 --- a/demux/demux.h +++ b/demux/demux.h @@ -226,8 +226,7 @@ typedef struct { void free_demuxer(struct demuxer *demuxer); -int demuxer_add_packet(demuxer_t *demuxer, struct sh_stream *stream, - demux_packet_t *dp); +int demux_add_packet(struct sh_stream *stream, demux_packet_t *dp); struct demux_packet *demux_read_packet(struct sh_stream *sh); double demux_get_next_pts(struct sh_stream *sh); @@ -267,7 +266,6 @@ struct sh_stream *demuxer_stream_by_demuxer_id(struct demuxer *d, enum stream_type t, int id); bool demuxer_stream_is_selected(struct demuxer *d, struct sh_stream *stream); -bool demuxer_stream_has_packets_queued(struct demuxer *d, struct sh_stream *stream); bool demux_matroska_uid_cmp(struct matroska_segment_uid *a, struct matroska_segment_uid *b); diff --git a/demux/demux_disc.c b/demux/demux_disc.c index 2901bb596b..00bee15865 100644 --- a/demux/demux_disc.c +++ b/demux/demux_disc.c @@ -193,7 +193,7 @@ static int d_fill_buffer(demuxer_t *demuxer) pkt->stream_pts = pts; } - demuxer_add_packet(demuxer, sh, pkt); + demux_add_packet(sh, pkt); return 1; } diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index 1a16eecaf9..94f3e27c8f 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -815,7 +815,7 @@ static int demux_lavf_fill_buffer(demuxer_t *demux) } else if (dp->dts != MP_NOPTS_VALUE) { priv->last_pts = dp->dts * AV_TIME_BASE; } - demuxer_add_packet(demux, stream, dp); + demux_add_packet(stream, dp); return 1; } diff --git a/demux/demux_mf.c b/demux/demux_mf.c index fa5908c493..1a91d3f124 100644 --- a/demux/demux_mf.c +++ b/demux/demux_mf.c @@ -79,7 +79,7 @@ static int demux_mf_fill_buffer(demuxer_t *demuxer) memcpy(dp->buffer, data.start, data.len); dp->pts = mf->curr_frame / mf->sh->fps; dp->keyframe = true; - demuxer_add_packet(demuxer, demuxer->streams[0], dp); + demux_add_packet(demuxer->streams[0], dp); } talloc_free(data.start); } diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index dbd0c04609..54d57dea82 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -1984,7 +1984,7 @@ static void handle_realvideo(demuxer_t *demuxer, mkv_track_t *track, dp->pos = mkv_d->last_filepos; dp->keyframe = keyframe; - demuxer_add_packet(demuxer, track->stream, dp); + demux_add_packet(track->stream, dp); } static void handle_realaudio(demuxer_t *demuxer, mkv_track_t *track, @@ -2094,7 +2094,7 @@ static void handle_realaudio(demuxer_t *demuxer, mkv_track_t *track, track->audio_timestamp[x * apk_usize / w]; dp->pos = track->audio_filepos; // all equal dp->keyframe = !x; // Mark first packet as keyframe - demuxer_add_packet(demuxer, track->stream, dp); + demux_add_packet(track->stream, dp); } } } else { // Not a codec that requires reordering @@ -2107,7 +2107,7 @@ static void handle_realaudio(demuxer_t *demuxer, mkv_track_t *track, dp->pos = mkv_d->last_filepos; dp->keyframe = keyframe; - demuxer_add_packet(demuxer, track->stream, dp); + demux_add_packet(track->stream, dp); } return; error: @@ -2426,7 +2426,7 @@ static int handle_block(demuxer_t *demuxer, struct block_info *block_info) if (track->ms_compat) MPSWAP(double, dp->pts, dp->dts); dp->duration = block_duration / 1e9; - demuxer_add_packet(demuxer, stream, dp); + demux_add_packet(stream, dp); } talloc_free_children(track->parser_tmp); } diff --git a/demux/demux_raw.c b/demux/demux_raw.c index 888b7ecfa0..57d93e6b49 100644 --- a/demux/demux_raw.c +++ b/demux/demux_raw.c @@ -232,7 +232,7 @@ static int raw_fill_buffer(demuxer_t *demuxer) int len = stream_read(demuxer->stream, dp->buffer, dp->len); demux_packet_shorten(dp, len); - demuxer_add_packet(demuxer, demuxer->streams[0], dp); + demux_add_packet(demuxer->streams[0], dp); return 1; } diff --git a/demux/demux_subreader.c b/demux/demux_subreader.c index 89e9645f0e..0fb23c22d3 100644 --- a/demux/demux_subreader.c +++ b/demux/demux_subreader.c @@ -800,7 +800,7 @@ static int d_fill_buffer(struct demuxer *demuxer) struct priv *p = demuxer->priv; struct demux_packet *dp = demux_packet_list_fill(p->pkts, p->num_pkts, &p->current); - return demuxer_add_packet(demuxer, p->sh, dp); + return demux_add_packet(p->sh, dp); } static void d_seek(struct demuxer *demuxer, float secs, int flags) -- cgit v1.2.3