[matroska] r1041 - trunk/DvdMenuXtractor

[email protected]
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; }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.