[Avidemux-svn-commit] r3343 - branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska
mean at BerliOS
mean at mail.berlios.de
Sat Jul 7 20:38:04 CEST 2007
Author: mean
Date: 2007-07-07 20:38:03 +0200 (Sat, 07 Jul 2007)
New Revision: 3343
Modified:
branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ADM_ebml.h
branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ADM_mkvIndexer.cpp
branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ADM_mkv_audio.cpp
branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ebml.cpp
Log:
[MKV] some cosmetics : progress bar when indexing clusters, use DIA_working + dont trust header in case of AC3 and extract infos from the actual stream
Modified: branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ADM_ebml.h
===================================================================
--- branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ADM_ebml.h 2007-07-07 17:07:57 UTC (rev 3342)
+++ branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ADM_ebml.h 2007-07-07 18:38:03 UTC (rev 3343)
@@ -62,6 +62,7 @@
uint64_t tell(void);
uint8_t seek(uint64_t pos);
uint8_t finished(void);
+ uint64_t getFileSize(void) {return _size;};
uint8_t find(ADM_MKV_SEARCHTYPE search,
MKV_ELEM_ID prim,MKV_ELEM_ID second,uint32_t *len,uint32_t rewind=1);
uint8_t simplefind(MKV_ELEM_ID prim,uint32_t *len,uint32_t rewind=1);
Modified: branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ADM_mkvIndexer.cpp
===================================================================
--- branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ADM_mkvIndexer.cpp 2007-07-07 17:07:57 UTC (rev 3342)
+++ branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ADM_mkvIndexer.cpp 2007-07-07 18:38:03 UTC (rev 3343)
@@ -31,6 +31,7 @@
#include "mkv_tags.h"
#include "ADM_userInterfaces/ADM_commonUI/DIA_idx_pg.h"
+#include "ADM_userInterfaces/ADM_commonUI/DIA_working.h"
#define VIDEO _tracks[0]
/**
\fn videoIndexer
@@ -45,7 +46,7 @@
const char *ss;
parser->seek(0);
- DIA_progressIndexing *work=new DIA_progressIndexing("Matroska Images");
+ DIA_working *work=new DIA_working("Matroska Images");
// Start with a small index, it will grow automatically afterward
for(int i=0;i<_nbAudioTrack+1;i++)
{
@@ -53,7 +54,7 @@
_tracks[i]._index=new mkvIndex[_tracks[i]._indexMax];
}
//************
- work->update(0,_nbClusters,0,0,0,0);
+ work->update(0);
for(int clusters=0;clusters<_nbClusters;clusters++)
{
parser->seek(_clusters[clusters].pos);
@@ -61,7 +62,7 @@
int thiscluster=0;
while(!cluster.finished())
{
- work->update(clusters,_nbClusters,VIDEO._nbIndex,0,0,0);
+ work->update(clusters,_nbClusters);
cluster.readElemId(&id,&len);
if(!ADM_searchMkvTag( (MKV_ELEM_ID)id,&ss,&type))
{
@@ -403,22 +404,19 @@
_nbClusters=0;
// Search segment
-
- parser->seek(0x7000000000LL); //Hackish, fixme
- fileSize=parser->tell();
- parser->seek(0);
-
+ fileSize=parser->getFileSize();
if(!parser->simplefind(MKV_SEGMENT,&vlen,1))
{
printf("[MKV] cluster indexer, cannot find CLUSTER atom\n");
return 0;
}
ADM_ebml_file segment(parser,vlen);
- DIA_progressIndexing *work=new DIA_progressIndexing("Matroska clusters");
+ DIA_working *work=new DIA_working("Matroska clusters");
while(segment.simplefind(MKV_CLUSTER,&alen,0))
{
+
// UI update
- work->update(segment.tell()>>10,fileSize>>10,_nbClusters,0,0,0);
+ work->update(segment.tell()>>10,fileSize>>10);
// Grow clusters index if needed
if(_nbClusters==_clustersCeil-1)
{
Modified: branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ADM_mkv_audio.cpp
===================================================================
--- branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ADM_mkv_audio.cpp 2007-07-07 17:07:57 UTC (rev 3342)
+++ branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ADM_mkv_audio.cpp 2007-07-07 18:38:03 UTC (rev 3343)
@@ -28,7 +28,7 @@
#include "ADM_toolkit/toolkit.hxx"
#include "ADM_mkv.h"
-
+#include "ADM_audio/ADM_a52info.h"
#define vprintf(...) {}
/**
@@ -303,6 +303,23 @@
_currentLace=_maxLace=0;
_clusterParser=NULL;
goToCluster(0);
+ /* In case of AC3, do not trust the header...*/
+ if(_wavheader->encoding==WAV_AC3)
+ {
+ uint8_t ac3Buffer[20000];
+ uint32_t len,sample,timecode;
+ if( getPacket(ac3Buffer, &len, &sample,&timecode))
+ {
+ uint32_t fq,br,chan,syncoff;
+ if( ADM_AC3GetInfo(ac3Buffer, len, &fq, &br, &chan,&syncoff) )
+ {
+ _wavheader->channels=chan;
+ _wavheader->frequency=fq;
+ _wavheader->byterate=br;
+ }
+ }
+ goToCluster(0);
+ }
}
/**
\fn goToCluster
Modified: branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ebml.cpp
===================================================================
--- branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ebml.cpp 2007-07-07 17:07:57 UTC (rev 3342)
+++ branches/avidemux_2.4_branch/avidemux/ADM_inputs/ADM_matroska/ebml.cpp 2007-07-07 18:38:03 UTC (rev 3343)
@@ -361,7 +361,7 @@
const char *ss;
- printf("[MKV] Simple Searching for tag %llx\n",prim);
+ vprintf("[MKV] Simple Searching for tag %llx\n",prim);
if(rewind) seek(_begin);
while(!finished())
More information about the Avidemux-svn-commit
mailing list