[matroska] r1006 - trunk/DvdMenuXtractor
[email protected] Wed, 5 Jan 2005 17:14:41 +0300 (MSK)
Newsgroups
gmane.comp.multimedia.matroska.cvs
Message-ID
<[email protected] >
Author: robux4
Date: 2005-01-05 17:14:41 +0300 (Wed, 05 Jan 2005)
New Revision: 1006
Modified:
trunk/DvdMenuXtractor/DvdMenuXtractor.cpp
trunk/DvdMenuXtractor/README.txt
trunk/DvdMenuXtractor/VobParser.cpp
trunk/DvdMenuXtractor/VobParser.h
Log:
DMX: only use the files existing in the mkvmerge command-line
Modified: trunk/DvdMenuXtractor/DvdMenuXtractor.cpp
===================================================================
--- trunk/DvdMenuXtractor/DvdMenuXtractor.cpp 2005-01-05 13:12:35 UTC (rev 1005)
+++ trunk/DvdMenuXtractor/DvdMenuXtractor.cpp 2005-01-05 14:14:41 UTC (rev 1006)
@@ -73,7 +73,7 @@
wxString outputDirectory;
wxString mtxDirectory;
const wxString APPLICATION_NAME = "DVDMenuXtractor: DMX - a fair-use tool";
-const wxString APPLICATION_VERSION = "0.6.4";
+const wxString APPLICATION_VERSION = "0.7.0";
// ----------------------------------------------------------------------------
@@ -617,7 +617,7 @@
m_txtDemuxLog->AppendText("Processing " + newFilename + "\n");
- wxString MtxFilename = outputDirectory + newFilename + ".cmd";
+ wxString MtxFilename = outputDirectory + newFilename + ".bat";
wxFile MtxCommandFile;
MtxCommandFile.Create(MtxFilename, true, wxS_DEFAULT | wxS_IXUSR | wxS_IXGRP | wxS_IXOTH);
#if !defined(WIN32)
@@ -625,14 +625,14 @@
MtxCommandFile.Write(ShellString.c_str(), ShellString.Length());
#endif
#if defined(WIN32)
- wxString MtxCommandString = "\"" + mtxDirectory + "mkvmerge\" -o " + outputDirectory+newFilename + ".mkv ";
+ wxString MtxCommandString = "\"" + mtxDirectory + "mkvmerge\" -o " + outputDirectory+newFilename + ".mkv";
#else
- wxString MtxCommandString = mtxDirectory + "mkvmerge -o " + outputDirectory+newFilename + ".mkv ";
+ wxString MtxCommandString = mtxDirectory + "mkvmerge -o " + outputDirectory+newFilename + ".mkv";
#endif
- MtxCommandString += "--track-name 0:\"video\" --timecodes 0:" + outputDirectory+newFilename + "_m2v.tmc " + outputDirectory+newFilename + ".m2v";
+ wxString MtxCommandStringTemp = " --track-name 0:\"video\" --timecodes 0:" + outputDirectory+newFilename + "_m2v.tmc " + outputDirectory+newFilename + ".m2v";
- Demuxer * _muxer = new VideoDemuxWriter(outputDirectory + newFilename, _fps);
- if (!demuxer.AddDemuxer(VIDEO_STREAM, _muxer))
+ Writer * _muxer = new VideoDemuxWriter(outputDirectory + newFilename, _fps);
+ if (!demuxer.AddDemuxer(VIDEO_STREAM, _muxer, MtxCommandStringTemp))
delete _muxer;
size_t _stream;
@@ -664,37 +664,33 @@
switch (_audioTracks.Item(_stream)->GetData()->audio_format)
{
case 0:
+ MtxTempString += "_ac3.tmc " + outputDirectory+newFilename+_langName + ".ac3";
_muxer = new AC3DemuxWriter(outputDirectory + newFilename+_langName, 0x80 + _ID);
- if (!demuxer.AddDemuxer(SUBSTREAM_AC3_LOW + _ID, _muxer))
+ if (!demuxer.AddDemuxer(SUBSTREAM_AC3_LOW + _ID, _muxer, MtxTempString))
delete _muxer;
- else
- MtxCommandString += MtxTempString + "_ac3.tmc " + outputDirectory+newFilename+_langName + ".ac3";
break;
case 2:
case 3:
+ MtxTempString += "_mpa.tmc " + outputDirectory+newFilename+_langName + ".mpa";
_muxer = new MPADemuxWriter(outputDirectory + newFilename+_langName, 0xC0 + _ID);
- if (!demuxer.AddDemuxer(AUDIO_STREAM + _ID, _muxer))
+ if (!demuxer.AddDemuxer(AUDIO_STREAM + _ID, _muxer, MtxTempString))
delete _muxer;
- else
- MtxCommandString += MtxTempString + "_mpa.tmc " + outputDirectory+newFilename+_langName + ".mpa";
break;
case 4:
// TODO possibly other LPCM formats ?
+ MtxTempString += "_wav.tmc " + outputDirectory+newFilename+_langName + ".wav";
_muxer = new LPCMDemuxWriter(outputDirectory + newFilename+_langName, 0xA0 + _ID, 48000, 16, 2);
- if (!demuxer.AddDemuxer(SUBSTREAM_PCM_LOW + _ID, _muxer))
+ if (!demuxer.AddDemuxer(SUBSTREAM_PCM_LOW + _ID, _muxer, MtxTempString))
delete _muxer;
- else
- MtxCommandString += MtxTempString + "_wav.tmc " + outputDirectory+newFilename+_langName + ".wav";
break;
case 6:
+ MtxTempString += "_dts.tmc " + outputDirectory+newFilename+_langName + ".dts";
_muxer = new DTSDemuxWriter(outputDirectory + newFilename+_langName, 0x88 + _ID);
- if (!demuxer.AddDemuxer(SUBSTREAM_DTS_LOW + _ID, _muxer))
+ if (!demuxer.AddDemuxer(SUBSTREAM_DTS_LOW + _ID, _muxer, MtxTempString))
delete _muxer;
- else
- MtxCommandString += MtxTempString + "_dts.tmc " + outputDirectory+newFilename+_langName + ".dts";
break;
default:
@@ -728,25 +724,19 @@
MtxTempString += newFilename+_langName + "\" --language 0:";
MtxTempString += wxString::Format("%c%c ", _attr->lang_code >> 8, _attr->lang_code & 0xFF);
}
+ MtxTempString += outputDirectory+newFilename+_langName + ".idx";
_muxer = new SubDemuxWriter(outputDirectory + newFilename+_langName, 0x20 + _IDs.Item(_IDidx), _width, _height, _palette, _attr->lang_code, _attr->lang_extension == 9);
- if (!demuxer.AddDemuxer(SUBSTREAM_SUB_LOW + _IDs.Item(_IDidx), _muxer))
+ if (!demuxer.AddDemuxer(SUBSTREAM_SUB_LOW + _IDs.Item(_IDidx), _muxer, MtxTempString))
delete _muxer;
- else
- MtxCommandString += MtxTempString + outputDirectory+newFilename+_langName + ".idx";
}
}
// create a possible button demuxer too
+ MtxCommandStringTemp = " --track-name 0:\"btn-" + newFilename + "\" --timecodes 0:" + outputDirectory+newFilename + "_btn.tmc " + outputDirectory+newFilename + ".btn";
_muxer = new BtnDemuxWriter(outputDirectory + newFilename, _width, _height);
- if (!demuxer.AddDemuxer(SUBSTREAM_PCI, _muxer))
+ if (!demuxer.AddDemuxer(SUBSTREAM_PCI, _muxer, MtxCommandStringTemp))
delete _muxer;
- else
- MtxCommandString += " --track-name 0:\"btn-" + newFilename + "\" --timecodes 0:" + outputDirectory+newFilename + "_btn.tmc " + outputDirectory+newFilename + ".btn";
}
- MtxCommandString += " --chapters " + outputDirectory+newFilename + "_menu.xml";
- MtxCommandFile.Write(MtxCommandString.c_str(), MtxCommandString.Length());
- MtxCommandFile.Close();
-
m_gaDemuxProgress->SetValue(0);
m_gaDemuxProgress->SetRange(aVobParser.GetPacketCount() >> 8);
while(aVobParser.ParseNextPacket(*IfoFile))
@@ -754,6 +744,17 @@
m_gaDemuxProgress->SetValue(aVobParser.GetPacketIndex() >> 8);
wxYield();
}
+
+ // create the command line using the list of used files
+ for (_stream = 0; _stream < 256; _stream++)
+ {
+ if (demuxer.FileExists(_stream))
+ MtxCommandString += demuxer.GetString(_stream);
+ }
+ MtxCommandString += " --chapters " + outputDirectory+newFilename + "_menu.xml";
+ MtxCommandFile.Write(MtxCommandString);
+ MtxCommandFile.Close();
+
m_txtDemuxLog->AppendText("Done demuxing " + newFilename + "\n");
}
catch(VobParserException e)
Modified: trunk/DvdMenuXtractor/README.txt
===================================================================
--- trunk/DvdMenuXtractor/README.txt 2005-01-05 13:12:35 UTC (rev 1005)
+++ trunk/DvdMenuXtractor/README.txt 2005-01-05 14:14:41 UTC (rev 1006)
@@ -1,9 +1,9 @@
TODO :
* support infinite still frames in the chapter XML file
-* detect when a file was empty and therefore not written
* make use of the cancel buttons
* store the palette for subs
* verify (and fix) the frame and cluster timecodes from mkvmerge
+* remove the AC3 and MPEG2 decoders from the build
* generate the d2v file ?
* allow skipping DVD parts when extracting (VMG, VTSM, VTS)
* allow selection of stream output (audio & subs languages)
Modified: trunk/DvdMenuXtractor/VobParser.cpp
===================================================================
--- trunk/DvdMenuXtractor/VobParser.cpp 2005-01-05 13:12:35 UTC (rev 1005)
+++ trunk/DvdMenuXtractor/VobParser.cpp 2005-01-05 14:14:41 UTC (rev 1006)
@@ -78,11 +78,12 @@
Reset();
}
-bool CompositeDemuxWriter::AddDemuxer(uint8_t streamID, Demuxer * demuxer)
+bool CompositeDemuxWriter::AddDemuxer(uint8_t streamID, Writer * demuxer, wxString & CommandLine)
{
if (m_muxers[streamID] != NULL)
return false;
m_muxers[streamID] = demuxer;
+ m_strings[streamID] = CommandLine;
return true;
}
Modified: trunk/DvdMenuXtractor/VobParser.h
===================================================================
--- trunk/DvdMenuXtractor/VobParser.h 2005-01-05 13:12:35 UTC (rev 1005)
+++ trunk/DvdMenuXtractor/VobParser.h 2005-01-05 14:14:41 UTC (rev 1006)
@@ -13,7 +13,6 @@
#include "dvdread/ifo_read.h"
#include "wx/wx.h"
-#include "wx/hashmap.h"
// ============================================================================
@@ -195,7 +194,7 @@
// ----------------------------------------------------------------------------
-class Writer
+class Writer : public Demuxer
{
public:
Writer(const char* filenamePrefix, const char* extension, double fps)
@@ -223,6 +222,11 @@
WriteTimecodeInfo(start_time, end_time, ftell(m_file), debug);
fwrite(buff, 1, size, m_file);
}
+
+ bool FileExists() const {
+ return m_file != NULL;
+ }
+
protected:
inline FILE* GetTimecodeFile()
{
@@ -262,7 +266,7 @@
// ----------------------------------------------------------------------------
-class VideoDemuxWriter : public Demuxer, public Writer
+class VideoDemuxWriter : public Writer
{
public:
VideoDemuxWriter(const char* filenamePrefix, double fps)
@@ -286,7 +290,7 @@
// ----------------------------------------------------------------------------
-class AC3DemuxWriter : public Demuxer, public Writer
+class AC3DemuxWriter : public Writer
{
public:
AC3DemuxWriter(const char* filenamePrefix, const uint8_t streamID)
@@ -314,7 +318,7 @@
// ----------------------------------------------------------------------------
-class DTSDemuxWriter : public Demuxer, public Writer
+class DTSDemuxWriter : public Writer
{
public:
DTSDemuxWriter(const char* filenamePrefix, const uint8_t streamID)
@@ -359,7 +363,7 @@
size_t m_size_position1,m_size_position2, m_size;
};
-class LPCMDemuxWriter : public Demuxer, public WavWriter
+class LPCMDemuxWriter : public WavWriter
{
public:
LPCMDemuxWriter(const char* filenamePrefix, const uint8_t streamID, uint32_t sample_rate, uint8_t bit_depth, uint8_t channel_nb)
@@ -387,7 +391,7 @@
// ----------------------------------------------------------------------------
-class MPADemuxWriter : public Demuxer, public Writer
+class MPADemuxWriter : public Writer
{
public:
MPADemuxWriter(const char* filenamePrefix, const uint8_t streamID) :
@@ -405,7 +409,7 @@
// ----------------------------------------------------------------------------
-class SubDemuxWriter : public Demuxer, public Writer
+class SubDemuxWriter : public Writer
{
public:
SubDemuxWriter(const char* filenamePrefix, const uint8_t streamID, uint16_t width, uint16_t height, const uint32_t * palette, uint16_t language, bool forced)
@@ -437,7 +441,7 @@
// ----------------------------------------------------------------------------
-class BtnDemuxWriter : public Demuxer, public Writer
+class BtnDemuxWriter : public Writer
{
public:
BtnDemuxWriter(const char* filenamePrefix, uint16_t width, uint16_t height)
@@ -487,13 +491,22 @@
public:
CompositeDemuxWriter();
~CompositeDemuxWriter();
- bool AddDemuxer(uint8_t streamID, Demuxer * demuxer);
+ bool AddDemuxer(uint8_t streamID, Writer * demuxer, wxString & CommandLine);
void ProcessStream(uint8_t streamID, uint8_t* buff, uint32_t size, int32_t start_time, int32_t end_time, wxString & debug);
void Reset();
void SetBoundary(uint32_t start_timecode, uint32_t duration, const CellListElem *cell);
+ bool FileExists(uint8_t streamID) const {
+ return (m_muxers[streamID] != NULL && m_muxers[streamID]->FileExists());
+ }
+
+ const wxString & GetString(uint8_t streamID) const {
+ return m_strings[streamID];
+ }
+
protected:
- Demuxer * m_muxers[256];
+ Writer * m_muxers[256];
+ wxString m_strings[256];
};
// ----------------------------------------------------------------------------