summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authoralex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-11-22 15:43:24 +0000
committeralex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-11-22 15:43:24 +0000
commit01af02aaa3d5d0e541aca63f371e8ae43e542d81 (patch)
tree5fdcb931e5612a6f7375bcc04b44b225bfa23d29 /libmpdemux
parent56a7e74663b323c379321020bd787d47007f5c37 (diff)
downloadmpv-01af02aaa3d5d0e541aca63f371e8ae43e542d81.tar.bz2
mpv-01af02aaa3d5d0e541aca63f371e8ae43e542d81.tar.xz
added demux_info
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@3072 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/aviheader.c1
-rw-r--r--libmpdemux/demux_mov.c27
-rw-r--r--libmpdemux/demuxer.c26
-rw-r--r--libmpdemux/demuxer.h6
4 files changed, 46 insertions, 14 deletions
diff --git a/libmpdemux/aviheader.c b/libmpdemux/aviheader.c
index db3526a576..7ac14c4510 100644
--- a/libmpdemux/aviheader.c
+++ b/libmpdemux/aviheader.c
@@ -170,6 +170,7 @@ while(1){
chunksize-=len;
buf[len]=0;
mp_msg(MSGT_HEADER,MSGL_V,"%-10s: %s\n",hdr,buf);
+ demux_info_add(demuxer, hdr, buf);
}
if(chunksize>0) stream_skip(demuxer->stream,chunksize); else
if(chunksize<0) mp_msg(MSGT_HEADER,MSGL_WARN,"chunksize=%d (id=%.4s)\n",chunksize,(char *) &id);
diff --git a/libmpdemux/demux_mov.c b/libmpdemux/demux_mov.c
index a306bc2076..b47be87536 100644
--- a/libmpdemux/demux_mov.c
+++ b/libmpdemux/demux_mov.c
@@ -143,6 +143,7 @@ void mov_build_index(mov_track_t* trak){
#define MOV_TRAK_AUDIO 2
#define MOV_TRAK_FLASH 3
#define MOV_TRAK_GENERIC 4
+#define MOV_TRAK_CODE 5
typedef struct {
off_t moov_start;
@@ -154,7 +155,11 @@ typedef struct {
} mov_priv_t;
#warning "FIXME - mov support is only working perfectly on Little Endian systems?!"
+//#ifdef WORDS_BIGENDIAN
+//#define MOV_FOURCC(a,b,c,d) ((d)|(c<<8)|(b<<16)|(a<<24))
+//#else
#define MOV_FOURCC(a,b,c,d) ((a<<24)|(b<<16)|(c<<8)|(d))
+//#endif
int mov_check_file(demuxer_t* demuxer){
int flags=0;
@@ -227,6 +232,7 @@ static void lschunks(demuxer_t* demuxer,int level,off_t endpos,mov_track_t* trak
//
if(trak){
switch(id){
+ case MOV_FOURCC('f','r','e','e'):
case MOV_FOURCC('u','d','t','a'):
/* here not supported :p */
break;
@@ -441,7 +447,7 @@ static void lschunks(demuxer_t* demuxer,int level,off_t endpos,mov_track_t* trak
}
case MOV_FOURCC('c','o','d','e'):
{
-#warning Implement atom 'code' for FLASH
+#warning "Implement atom 'code' for FLASH support"
}
default:
id = bswap_32(id);
@@ -525,7 +531,7 @@ static void lschunks(demuxer_t* demuxer,int level,off_t endpos,mov_track_t* trak
case MOV_TRAK_GENERIC:
mp_msg(MSGT_DEMUX, MSGL_INFO, "Generic track - not completly understood! (id: %d)\n",
trak->id);
-#warning Also this contains the FLASH data
+#warning "Also this contains the FLASH data"
#if 0
mp_msg(MSGT_DEMUX, MSGL_INFO, "Extracting samples to files (possibly this is an flash anim)\n");
{
@@ -692,9 +698,11 @@ static void lschunks(demuxer_t* demuxer,int level,off_t endpos,mov_track_t* trak
switch(udta_id)
{
case MOV_FOURCC(0xa9,'a','u','t'):
+ demux_info_add(demuxer, "author", &text[2]);
mp_msg(MSGT_DEMUX, MSGL_INFO, " Author: %s\n", &text[2]);
break;
case MOV_FOURCC(0xa9,'c','p','y'):
+ demux_info_add(demuxer, "copyright", &text[2]);
mp_msg(MSGT_DEMUX, MSGL_INFO, " Copyright: %s\n", &text[2]);
break;
case MOV_FOURCC(0xa9,'i','n','f'):
@@ -702,6 +710,7 @@ static void lschunks(demuxer_t* demuxer,int level,off_t endpos,mov_track_t* trak
break;
case MOV_FOURCC('n','a','m','e'):
case MOV_FOURCC(0xa9,'n','a','m'):
+ demux_info_add(demuxer, "name", &text[2]);
mp_msg(MSGT_DEMUX, MSGL_INFO, " Name: %s\n", &text[2]);
break;
case MOV_FOURCC(0xa9,'A','R','T'):
@@ -711,12 +720,14 @@ static void lschunks(demuxer_t* demuxer,int level,off_t endpos,mov_track_t* trak
mp_msg(MSGT_DEMUX, MSGL_INFO, " Director: %s\n", &text[2]);
break;
case MOV_FOURCC(0xa9,'c','m','t'):
+ demux_info_add(demuxer, "comments", &text[2]);
mp_msg(MSGT_DEMUX, MSGL_INFO, " Comment: %s\n", &text[2]);
break;
case MOV_FOURCC(0xa9,'r','e','q'):
mp_msg(MSGT_DEMUX, MSGL_INFO, " Requirements: %s\n", &text[2]);
break;
case MOV_FOURCC(0xa9,'s','w','r'):
+ demux_info_add(demuxer, "encoder", &text[2]);
mp_msg(MSGT_DEMUX, MSGL_INFO, " Software: %s\n", &text[2]);
break;
case MOV_FOURCC(0xa9,'d','a','y'):
@@ -799,9 +810,15 @@ if(trak->samplesize){
if(trak->pos>=trak->chunks_size) return 0; // EOF
stream_seek(demuxer->stream,trak->chunks[trak->pos].pos);
pts=(float)(trak->chunks[trak->pos].sample*trak->duration)/(float)trak->timescale;
- x=trak->chunks[trak->pos].size;
-// x=trak->chunks[trak->pos].size*trak->samplesize;
- if(trak->samplesize!=1) printf("WARNING! Samplesize=%d \n",trak->samplesize);
+ if(trak->samplesize!=1)
+ {
+ mp_msg(MSGT_DEMUX, MSGL_WARN, "WARNING! Samplesize(%d) != 1\n",
+ trak->samplesize);
+ x=trak->chunks[trak->pos].size*trak->samplesize;
+ }
+ else
+ x=trak->chunks[trak->pos].size;
+ printf("X = %d\n", x);
if(trak->stdata_len>=36){
// extended stsd header - works for CBR MP3:
x/=(trak->stdata[30]<<8)+trak->stdata[31]; // samples/packet
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index c60a40f7fd..bc72a890d2 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -652,7 +652,7 @@ int demux_info_add(demuxer_t *demuxer, char *opt, char *param)
return(1);
}
- if (!strcasecmp(opt, "encoder"))
+ if (!strcasecmp(opt, "encoder") || !strcasecmp(opt, "software"))
{
if (info->encoder)
{
@@ -664,7 +664,7 @@ int demux_info_add(demuxer_t *demuxer, char *opt, char *param)
return(1);
}
- if (!strcasecmp(opt, "comments"))
+ if (!strcasecmp(opt, "comment") || !strcasecmp(opt, "comments"))
{
if (info->comments)
{
@@ -676,7 +676,19 @@ int demux_info_add(demuxer_t *demuxer, char *opt, char *param)
return(1);
}
- mp_msg(MSGT_DEMUX, MSGL_WARN, "Unknown demuxer info->%s (=%s)!\n",
+ if (!strcasecmp(opt, "copyright"))
+ {
+ if (info->copyright)
+ {
+ mp_msg(MSGT_DEMUX, MSGL_WARN, "Demuxer info->copyright already present\n!");
+ return(0);
+ }
+ info->copyright = malloc(strlen(param));
+ strcpy(info->copyright, param);
+ return(1);
+ }
+
+ mp_msg(MSGT_DEMUX, MSGL_DBG2, "Unknown demuxer info->%s (=%s)!\n",
opt, param);
return(1);
}
@@ -685,16 +697,18 @@ int demux_info_print(demuxer_t *demuxer)
{
demuxer_info_t *info = &demuxer->info;
- if (info->name || info->author || info->encoder || info->comments)
+ if (info->name || info->author || info->encoder || info->comments || info->copyright)
{
mp_msg(MSGT_DEMUX, MSGL_INFO, "Clip info: \n");
if (info->name)
mp_msg(MSGT_DEMUX, MSGL_INFO, " Name: %s\n", info->name);
if (info->author)
mp_msg(MSGT_DEMUX, MSGL_INFO, " Author: %s\n", info->author);
- if (info->encoder)
- mp_msg(MSGT_DEMUX, MSGL_INFO, " Encoder: %s\n", info->encoder);
+ if (info->comments)
+ mp_msg(MSGT_DEMUX, MSGL_INFO, " Copyright: %s\n", info->comments);
if (info->comments)
mp_msg(MSGT_DEMUX, MSGL_INFO, " Comments: %s\n", info->comments);
+ if (info->encoder)
+ mp_msg(MSGT_DEMUX, MSGL_INFO, " Encoder: %s\n", info->encoder);
}
}
diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h
index cd28db4df7..a2ddfd5b1b 100644
--- a/libmpdemux/demuxer.h
+++ b/libmpdemux/demuxer.h
@@ -61,6 +61,7 @@ typedef struct demuxer_info_st {
char *author;
char *encoder;
char *comments;
+ char *copyright;
} demuxer_info_t;
typedef struct demuxer_st {
@@ -166,6 +167,5 @@ extern int index_mode; // -1=untouched 0=don't use index 1=use (geneate) inde
extern int force_ni;
extern int pts_from_bps;
-
-
-
+int demux_info_add(demuxer_t *demuxer, char *opt, char *param);
+int demux_info_print(demuxer_t *demuxer);