aboutsummaryrefslogtreecommitdiffhomepage
path: root/libmpdemux/demuxer.c
diff options
context:
space:
mode:
authorGravatar Uoti Urpala <uau@glyph.nonexistent.invalid>2011-01-17 15:47:57 +0200
committerGravatar Uoti Urpala <uau@glyph.nonexistent.invalid>2011-01-17 15:47:57 +0200
commite342a81d6f5d13b83753050af79feab4fd702925 (patch)
tree841aad72180b76546484e1aca14d3b17eee46502 /libmpdemux/demuxer.c
parent0b59e33b4e17fae9e0c318fcfeabba52e57dda4a (diff)
cleanup: move demux packet functions from demuxer.h to demuxer.c
There's no reason why the demux packet functions would need to be inlined, so move them from the header to the .c file.
Diffstat (limited to 'libmpdemux/demuxer.c')
-rw-r--r--libmpdemux/demuxer.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index dc5d8858bc..85f8e875ee 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -177,6 +177,69 @@ const demuxer_desc_t *const demuxer_list[] = {
NULL
};
+struct demux_packet *new_demux_packet(int len)
+{
+ struct demux_packet *dp = malloc(sizeof(struct demux_packet));
+ dp->len = len;
+ dp->next = NULL;
+ dp->pts = MP_NOPTS_VALUE;
+ dp->endpts = MP_NOPTS_VALUE;
+ dp->stream_pts = MP_NOPTS_VALUE;
+ dp->pos = 0;
+ dp->flags = 0;
+ dp->refcount = 1;
+ dp->master = NULL;
+ dp->buffer = NULL;
+ if (len > 0 && (dp->buffer = malloc(len + MP_INPUT_BUFFER_PADDING_SIZE)))
+ memset(dp->buffer + len, 0, 8);
+ else
+ dp->len = 0;
+ return dp;
+}
+
+void resize_demux_packet(struct demux_packet *dp, int len)
+{
+ if (len > 0) {
+ dp->buffer = realloc(dp->buffer, len + 8);
+ } else {
+ free(dp->buffer);
+ dp->buffer = NULL;
+ }
+ dp->len = len;
+ if (dp->buffer)
+ memset(dp->buffer + len, 0, 8);
+ else
+ dp->len = 0;
+}
+
+struct demux_packet *clone_demux_packet(struct demux_packet *pack)
+{
+ struct demux_packet *dp = malloc(sizeof(struct demux_packet));
+ while (pack->master)
+ pack = pack->master; // find the master
+ memcpy(dp, pack, sizeof(struct demux_packet));
+ dp->next = NULL;
+ dp->refcount = 0;
+ dp->master = pack;
+ pack->refcount++;
+ return dp;
+}
+
+void free_demux_packet(struct demux_packet *dp)
+{
+ if (dp->master == NULL) { //dp is a master packet
+ dp->refcount--;
+ if (dp->refcount == 0) {
+ free(dp->buffer);
+ free(dp);
+ }
+ return;
+ }
+ // dp is a clone:
+ free_demux_packet(dp->master);
+ free(dp);
+}
+
void free_demuxer_stream(demux_stream_t *ds)
{
ds_free_packs(ds);