summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authoreugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-01-12 01:12:36 +0000
committereugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-01-12 01:12:36 +0000
commitc0e1f353e08ec31da7e133d6773ea66e6dea0a22 (patch)
treecd004e88d4b4a0776c4d52105687af12d40ac486 /libmpdemux
parent0d36212f39d5be3963ffd22a950612e368e1cf54 (diff)
downloadmpv-c0e1f353e08ec31da7e133d6773ea66e6dea0a22.tar.bz2
mpv-c0e1f353e08ec31da7e133d6773ea66e6dea0a22.tar.xz
Add demuxer interface for attachments.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25685 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demuxer.c22
-rw-r--r--libmpdemux/demuxer.h14
2 files changed, 36 insertions, 0 deletions
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index 2bf76199fc..48119f97ba 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -339,6 +339,14 @@ skip_streamfree:
free(demuxer->chapters[i].name);
free(demuxer->chapters);
}
+ if (demuxer->attachments) {
+ for (i=0; i<demuxer->num_attachments; i++) {
+ free(demuxer->attachments[i].name);
+ free(demuxer->attachments[i].type);
+ free(demuxer->attachments[i].data);
+ }
+ free(demuxer->attachments);
+ }
free(demuxer);
}
@@ -1122,6 +1130,20 @@ int demuxer_switch_video(demuxer_t *demuxer, int index){
return index;
}
+int demuxer_add_attachment(demuxer_t* demuxer, const char* name,
+ const char* type, const void* data, size_t size) {
+ if (!(demuxer->num_attachments & 31))
+ demuxer->attachments = realloc(demuxer->attachments, (demuxer->num_attachments + 32) * sizeof(demux_attachment_t));
+
+ demuxer->attachments[demuxer->num_attachments].name = strdup(name);
+ demuxer->attachments[demuxer->num_attachments].type = strdup(type);
+ demuxer->attachments[demuxer->num_attachments].data = malloc(size);
+ memcpy(demuxer->attachments[demuxer->num_attachments].data, data, size);
+ demuxer->attachments[demuxer->num_attachments].data_size = size;
+
+ return demuxer->num_attachments ++;
+}
+
int demuxer_add_chapter(demuxer_t* demuxer, const char* name, uint64_t start, uint64_t end){
if (demuxer->chapters == NULL)
demuxer->chapters = malloc (32*sizeof(*demuxer->chapters));
diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h
index 814329a8fc..250b14f9a0 100644
--- a/libmpdemux/demuxer.h
+++ b/libmpdemux/demuxer.h
@@ -174,6 +174,14 @@ typedef struct demux_chapter_s
char* name;
} demux_chapter_t;
+typedef struct demux_attachment_s
+{
+ char* name;
+ char* type;
+ void* data;
+ unsigned int data_size;
+} demux_attachment_t;
+
typedef struct demuxer_st {
demuxer_desc_t *desc; ///< Demuxer description structure
off_t filepos; // input stream current pos.
@@ -199,6 +207,9 @@ typedef struct demuxer_st {
demux_chapter_t* chapters;
int num_chapters;
+ demux_attachment_t* attachments;
+ int num_attachments;
+
void* priv; // fileformat-dependent data
char** info;
} demuxer_t;
@@ -384,6 +395,9 @@ extern int demuxer_type_by_filename(char* filename);
extern void demuxer_help(void);
extern int get_demuxer_type_from_name(char *demuxer_name, int *force);
+int demuxer_add_attachment(demuxer_t* demuxer, const char* name,
+ const char* type, const void* data, size_t size);
+
int demuxer_add_chapter(demuxer_t* demuxer, const char* name, uint64_t start, uint64_t end);
int demuxer_seek_chapter(demuxer_t *demuxer, int chapter, int mode, float *seek_pts, int *num_chapters, char **chapter_name);