[matroska] r1117 - trunk/DvdMenuXtractor

[email protected]
Newsgroups gmane.comp.multimedia.matroska.cvs
Message-ID <[email protected]>
Author: robux4
Date: 2005-04-09 22:30:20 +0400 (Sat, 09 Apr 2005)
New Revision: 1117

Modified:
   trunk/DvdMenuXtractor/VobParser.cpp
Log:
DMX: better detection of video gaps at the end of cells, but still not very good...

Modified: trunk/DvdMenuXtractor/VobParser.cpp
===================================================================
--- trunk/DvdMenuXtractor/VobParser.cpp	2005-04-09 18:28:58 UTC (rev 1116)
+++ trunk/DvdMenuXtractor/VobParser.cpp	2005-04-09 18:30:20 UTC (rev 1117)
@@ -664,7 +664,7 @@
 	ParsePESHeaderData();
 
 	m_demuxer.ProcessStream(VIDEO_STREAM, &m_buff[m_index],
-		length - 3 - pes_header_data_content.PES_header_data_len, pktinfo.pts/90, pktinfo.dts/90, wxString::Format("DTS %d PTS %d - %d %d\n", m_startdts/90, m_startpts/90, pktinfo.dts/90, pktinfo.pts/90));
+		length - 3 - pes_header_data_content.PES_header_data_len, pktinfo.dts/90, pktinfo.pts/90, wxString::Format("DTS %d PTS %d - %d %d\n", m_startdts/90, m_startpts/90, pktinfo.dts/90, pktinfo.pts/90));
 }
 
 void VobParser::ParseAudioPacket(int StreamID)
@@ -921,17 +921,8 @@
 
 void VideoDemuxWriter::WriteTimecodeInfo(uint32_t start_time, uint32_t end_time, uint64_t filepos, const wxString & debug)
 {
-	m_TimecodeFile = GetTimecodeFile();
-	if (start_time > m_last_end_timecode)
-	{
-		if (m_last_end_timecode > m_start_timecode)
-			fprintf(m_TimecodeFile, "%lf\n", (m_last_end_timecode - m_start_timecode) / 1000.0);
-		fprintf(m_TimecodeFile, "%lf\n", (m_last_end_timecode - m_last_start_timecode) / 1000.0);
-		fprintf(m_TimecodeFile, "gap,%lf\n", (start_time - m_last_end_timecode) / 1000.0);
-		m_start_timecode = start_time;
-	}
-	m_last_start_timecode = start_time;
-	m_last_end_timecode = end_time;
+	if (end_time > m_last_end_timecode)
+		m_last_end_timecode = end_time;
 }
 
 // ============================================================================
@@ -940,12 +931,19 @@
 {
 	m_TimecodeFile = GetTimecodeFile();
 
+	m_last_end_timecode += 1000.0 / m_fps;
+
 	if (m_end_timecode != 0)
 	{
 		if (m_is_still) {
 			fwrite(" (Still)\n", 1, 9, m_TimecodeFile);
 			fprintf(m_TimecodeFile, "%lf,%lf\n", (m_end_timecode - m_start_timecode) / 1000.0, 1000.0 / (m_end_timecode - m_start_timecode));
 		}
+		else if (m_last_end_timecode < m_end_timecode)
+		{
+			fprintf(m_TimecodeFile, "\n%lf\n", (m_last_end_timecode - m_start_timecode) / 1000.0);
+			fprintf(m_TimecodeFile, "gap,%lf\n", (m_end_timecode - m_last_end_timecode) / 1000.0);
+		}
 		else
 			fprintf(m_TimecodeFile, "\n%lf\n", (m_end_timecode - m_start_timecode) / 1000.0);
 	}
@@ -1073,12 +1071,20 @@
 {
 	m_TimecodeFile = GetTimecodeFile();
 
+	m_last_end_timecode += 1000.0 / m_fps;
+
 	if (m_end_timecode != 0)
 	{
 		if (m_is_still) {
 			fwrite(" (Still)\n", 1, 9, m_TimecodeFile);
 			fprintf(m_TimecodeFile, "%lf,%lf\n", (m_end_timecode - m_start_timecode) / 1000.0, 1000.0 / (m_end_timecode - m_start_timecode));
-		} else
+		}
+		else if (m_last_end_timecode < m_end_timecode)
+		{
+			fprintf(m_TimecodeFile, "\n%lf\n", (m_last_end_timecode - m_start_timecode) / 1000.0);
+			fprintf(m_TimecodeFile, "gap,%lf\n", (m_end_timecode - m_last_end_timecode) / 1000.0);
+		}
+		else
 			fprintf(m_TimecodeFile, "\n%lf\n", (m_end_timecode - m_start_timecode) / 1000.0);
 	}
 }
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.