From 01af02aaa3d5d0e541aca63f371e8ae43e542d81 Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 22 Nov 2001 15:43:24 +0000 Subject: added demux_info git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@3072 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/aviheader.c | 1 + libmpdemux/demux_mov.c | 27 ++++++++++++++++++++++----- libmpdemux/demuxer.c | 26 ++++++++++++++++++++------ libmpdemux/demuxer.h | 6 +++--- 4 files changed, 46 insertions(+), 14 deletions(-) (limited to 'libmpdemux') 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); -- cgit v1.2.3