summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demux/demux.c30
-rw-r--r--demux/demux.h4
-rw-r--r--demux/demux_disc.c2
-rw-r--r--demux/demux_lavf.c2
-rw-r--r--demux/demux_mf.c2
-rw-r--r--demux/demux_mkv.c8
-rw-r--r--demux/demux_raw.c2
-rw-r--r--demux/demux_subreader.c2
-rw-r--r--stream/tv.c6
9 files changed, 24 insertions, 34 deletions
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)
diff --git a/stream/tv.c b/stream/tv.c
index 291e20240e..8b33484966 100644
--- a/stream/tv.c
+++ b/stream/tv.c
@@ -298,7 +298,7 @@ static int demux_tv_fill_buffer(demuxer_t *demux)
for (int n = 0; n < demux->num_streams; n++) {
struct sh_stream *sh = demux->streams[n];
- if (!demuxer_stream_has_packets_queued(demux, sh) &&
+ if (!demux_has_packet(sh) &&
demuxer_stream_is_selected(demux, sh))
{
if (sh->type == STREAM_AUDIO)
@@ -319,7 +319,7 @@ static int demux_tv_fill_buffer(demuxer_t *demux)
dp=new_demux_packet(len);
dp->keyframe = true;
dp->pts=tvh->functions->grab_audio_frame(tvh->priv, dp->buffer,len);
- demuxer_add_packet(demux, want_audio, dp);
+ demux_add_packet(want_audio, dp);
}
/* ================== ADD VIDEO PACKET =================== */
@@ -331,7 +331,7 @@ static int demux_tv_fill_buffer(demuxer_t *demux)
dp=new_demux_packet(len);
dp->keyframe = true;
dp->pts=tvh->functions->grab_video_frame(tvh->priv, dp->buffer, len);
- demuxer_add_packet(demux, want_video, dp);
+ demux_add_packet(want_video, dp);
}
if (tvh->tv_param->scan) tv_scan(tvh);