[matroska] r1041 - trunk/DvdMenuXtractor
[email protected] Tue, 18 Jan 2005 22:49:54 +0300 (MSK)
Newsgroups
gmane.comp.multimedia.matroska.cvs
Message-ID
<[email protected] >
Author: robux4
Date: 2005-01-18 22:49:54 +0300 (Tue, 18 Jan 2005)
New Revision: 1041
Modified:
trunk/DvdMenuXtractor/DvdMenuXtractor.cpp
trunk/DvdMenuXtractor/README.txt
trunk/DvdMenuXtractor/VobParser.cpp
Log:
DMX: save the Segment Info related stuff in a separate XML file
Modified: trunk/DvdMenuXtractor/DvdMenuXtractor.cpp
===================================================================
--- trunk/DvdMenuXtractor/DvdMenuXtractor.cpp 2005-01-18 13:24:48 UTC (rev 1040)
+++ trunk/DvdMenuXtractor/DvdMenuXtractor.cpp 2005-01-18 19:49:54 UTC (rev 1041)
@@ -49,6 +49,8 @@
const char OutputDirSaved[] = "OutputDirectory";
const char InputDirSaved[] = "InputDirectory";
const char MtxDirSaved[] = "MtxDirectory";
+const char ChapterSuffix[] = "_menu.xml";
+const char InfoSuffix[] = "_info.xml";
// ----------------------------------------------------------------------------
@@ -628,7 +630,6 @@
#else
MtxCommandString = mtxDirectory + "mkvmerge -o " + outputDirectory+newFilename + ".mkv";
#endif
- MtxCommandString += " --family-uid \"" + encodeHex(m_FamilyUID, 16, true) + "\"";
if (aVobParser != NULL)
{
@@ -780,13 +781,14 @@
bool addChapters;
if (language)
- addChapters = GenerateXMLScriptMenu(outputDirectory+newFilename + "_menu.xml", title);
+ addChapters = GenerateXMLScriptMenu(outputDirectory+newFilename, title);
else
- addChapters = GenerateXMLScript(outputDirectory+newFilename + "_menu.xml", title);
+ addChapters = GenerateXMLScript(outputDirectory+newFilename, title);
if (addChapters)
{
- MtxCommandString += " --chapters " + outputDirectory+newFilename + "_menu.xml";
+ MtxCommandString += " --chapters " + outputDirectory+newFilename + ChapterSuffix;
+ MtxCommandString += " --infos " + outputDirectory+newFilename + InfoSuffix;
}
MtxCommandFile.Write(MtxCommandString);
@@ -1184,14 +1186,11 @@
return start_time;
}
- wxString encodeHex(const unsigned char * buffer, unsigned int size, bool prefix = false)
+ wxString encodeHex(const unsigned char * buffer, unsigned int size)
{
wxString result;
for (unsigned int i=0; i<size; i++)
- if (prefix)
- result += wxString::Format("0x%02x ", buffer[i]);
- else
- result += wxString::Format("%02x ", buffer[i]);
+ result += wxString::Format("%02x ", buffer[i]);
return result;
}
@@ -1217,24 +1216,39 @@
static unsigned char _PrivateTT[] = {0x28, 0x00, 0x00};
wxString line, editionUID = CreateUID();
- // Get sub directory
- wxTextFile XmlFile(Filename);
+
+ // segment file
+ wxTextFile XmlFileSeg(Filename + InfoSuffix);
+ XmlFileSeg.Create();
+ XmlFileSeg.AddLine("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
+ XmlFileSeg.AddLine("<!DOCTYPE Chapters SYSTEM \"matroskainfos.dtd\">");
+ XmlFileSeg.AddLine("");
+
+ int lvl = 0;
+
+ XmlFileSeg.AddLine("<Info>");
+ lvl++;
+ XmlFileSeg.AddLine(IndentString(lvl)+"<FamilyUID>" + encodeHex(m_FamilyUID, 16) + "</FamilyUID>");
+ XmlFileSeg.AddLine(IndentString(lvl)+"<Links>");
+ lvl++;
+ XmlFileSeg.AddLine(IndentString(lvl)+"<LinkEditionUID>"+editionUID+"</LinkEditionUID>");
+ XmlFileSeg.AddLine(IndentString(lvl)+"<LinkCodec>1</LinkCodec>");
+ XmlFileSeg.AddLine(IndentString(lvl)+wxString::Format("<LinkID format=\"hex\">%02x 00</LinkID>", title));
+ lvl--;
+ XmlFileSeg.AddLine(IndentString(lvl)+"</Links>");
+ lvl--;
+ XmlFileSeg.AddLine("</Info>");
+ XmlFileSeg.Write();
+
+ // chapter file
+ wxTextFile XmlFile(Filename + ChapterSuffix);
XmlFile.Create();
XmlFile.AddLine("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
XmlFile.AddLine("<!DOCTYPE Chapters SYSTEM \"matroskachapters.dtd\">");
XmlFile.AddLine("");
- int lvl = 0;
-
XmlFile.AddLine("<Chapters>");
lvl++;
- XmlFile.AddLine(IndentString(lvl)+"<Links>");
- lvl++;
- XmlFile.AddLine(IndentString(lvl)+"<LinkEditionUID>"+editionUID+"</LinkEditionUID>");
- XmlFile.AddLine(IndentString(lvl)+"<LinkCodec>1</LinkCodec>");
- XmlFile.AddLine(IndentString(lvl)+wxString::Format("<LinkID format=\"hex\">%02x 00</LinkID>", title));
- lvl--;
- XmlFile.AddLine(IndentString(lvl)+"</Links>");
XmlFile.AddLine(IndentString(lvl)+"<EditionEntry>");
lvl++;
XmlFile.AddLine(IndentString(lvl)+"<EditionUID>"+editionUID+"</EditionUID>");
@@ -1306,25 +1320,39 @@
uint64_t start_timeH = uint64_t(-1);
wxString line, editionUID = CreateUID();
- // Get sub directory
- wxTextFile XmlFile(Filename);
+ // segment file
+ wxTextFile XmlFileSeg(Filename + InfoSuffix);
+ XmlFileSeg.Create();
+ XmlFileSeg.AddLine("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
+ XmlFileSeg.AddLine("<!DOCTYPE Chapters SYSTEM \"matroskainfos.dtd\">");
+ XmlFileSeg.AddLine("");
+
+ int lvl = 0;
+
+ XmlFileSeg.AddLine("<Info>");
+ lvl++;
+ XmlFileSeg.AddLine(IndentString(lvl)+"<FamilyUID>" + encodeHex(m_FamilyUID, 16) + "</FamilyUID>");
+ XmlFileSeg.AddLine(IndentString(lvl)+"<Links>");
+ lvl++;
+ XmlFileSeg.AddLine(IndentString(lvl)+"<LinkEditionUID>"+editionUID+"</LinkEditionUID>");
+ XmlFileSeg.AddLine(IndentString(lvl)+"<LinkCodec>1</LinkCodec>");
+ XmlFileSeg.AddLine(IndentString(lvl)+wxString::Format("<LinkID format=\"hex\">%02x 01</LinkID>", title));
+ lvl--;
+ XmlFileSeg.AddLine(IndentString(lvl)+"</Links>");
+ lvl--;
+ XmlFileSeg.AddLine("</Info>");
+ XmlFileSeg.Write();
+
+ // chapter file
+ wxTextFile XmlFile(Filename + ChapterSuffix);
XmlFile.Create();
XmlFile.AddLine("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
XmlFile.AddLine("<!DOCTYPE Chapters SYSTEM \"matroskachapters.dtd\">");
XmlFile.AddLine("");
- int lvl = 0;
-
// VTS content
XmlFile.AddLine("<Chapters>");
lvl++;
- XmlFile.AddLine(IndentString(lvl)+"<Links>");
- lvl++;
- XmlFile.AddLine(IndentString(lvl)+"<LinkEditionUID>"+editionUID+"</LinkEditionUID>");
- XmlFile.AddLine(IndentString(lvl)+"<LinkCodec>1</LinkCodec>");
- XmlFile.AddLine(IndentString(lvl)+wxString::Format("<LinkID format=\"hex\">%02x 01</LinkID>", title));
- lvl--;
- XmlFile.AddLine(IndentString(lvl)+"</Links>");
XmlFile.AddLine(IndentString(lvl)+"<EditionEntry>");
lvl++;
XmlFile.AddLine(IndentString(lvl)+"<EditionUID>"+editionUID+"</EditionUID>");
Modified: trunk/DvdMenuXtractor/README.txt
===================================================================
--- trunk/DvdMenuXtractor/README.txt 2005-01-18 13:24:48 UTC (rev 1040)
+++ trunk/DvdMenuXtractor/README.txt 2005-01-18 19:49:54 UTC (rev 1041)
@@ -1,5 +1,4 @@
TODO :
-* finish the LinkID (with the correct definition)
* get the PTT handling back and correct...
* generate the d2v file ?
* allow skipping DVD parts when extracting (VMG, VTSM, VTS)
Modified: trunk/DvdMenuXtractor/VobParser.cpp
===================================================================
--- trunk/DvdMenuXtractor/VobParser.cpp 2005-01-18 13:24:48 UTC (rev 1040)
+++ trunk/DvdMenuXtractor/VobParser.cpp 2005-01-18 19:49:54 UTC (rev 1041)
@@ -34,6 +34,8 @@
unsigned int indent_lvl = 0;
unsigned int indent_off = 0;
+#define USE_DEBUG_LOG 1
+
#if USE_DEBUG_LOG
void inc_lvl() { indent_lvl += INDENT_UNIT; }