mirror of
https://gitlab.com/mbunkus/mkvtoolnix.git
synced 2024-10-22 07:21:21 +00:00
mkvmerge: rerender track headers: handle required size > void and not data written yet
Fixes ##1485.
This commit is contained in:
parent
276f7e04a2
commit
9097f64d56
@ -1,3 +1,9 @@
|
||||
2015-10-22 Moritz Bunkus <moritz@bunkus.org>
|
||||
|
||||
* mkvmerge: bug fix: fixed an endless loop when updating track
|
||||
headers caused by the fix for "Re-rendering track headers:
|
||||
data_size != 0 not implemented yet". Fixes #1485.
|
||||
|
||||
2015-10-21 Moritz Bunkus <moritz@bunkus.org>
|
||||
|
||||
* Released v8.5.1.
|
||||
|
@ -778,12 +778,12 @@ shrink_void_and_rerender_track_headers(int64_t new_void_size) {
|
||||
auto old_void_pos = s_void_after_track_headers->GetElementPosition();
|
||||
auto projected_new_void_pos = g_kax_tracks->GetElementPosition() + g_kax_tracks->ElementSize();
|
||||
|
||||
s_out->save_pos(g_kax_tracks->GetElementPosition());
|
||||
s_out->setFilePointer(g_kax_tracks->GetElementPosition());
|
||||
|
||||
g_kax_tracks->Render(*s_out, false);
|
||||
render_void(new_void_size);
|
||||
|
||||
s_out->restore_pos();
|
||||
s_out->setFilePointer(0, seek_end);
|
||||
|
||||
mxdebug_if(s_debug_rerender_track_headers,
|
||||
boost::format("[rerender] Normal case, only shrinking void down to %1%, new position %2% projected %9% new full size %3% new end %4% s_out size %5% old void start pos %6% tracks pos %7% tracks size %8%\n")
|
||||
@ -810,15 +810,17 @@ rerender_track_headers() {
|
||||
auto new_tracks_end_pos = g_kax_tracks->GetElementPosition() + g_kax_tracks->ElementSize();
|
||||
auto data_start_pos = s_void_after_track_headers->GetElementPosition() + s_void_after_track_headers->ElementSize(true);
|
||||
auto data_size = s_out->get_size() - data_start_pos;
|
||||
auto new_void_size = data_start_pos >= (new_tracks_end_pos + 4) ? data_start_pos - new_tracks_end_pos : 1024;
|
||||
|
||||
if (data_size && (new_tracks_end_pos >= (data_start_pos - 3))) {
|
||||
if (data_size && (new_tracks_end_pos >= (data_start_pos - 3))) {
|
||||
auto delta = 1024 + new_tracks_end_pos - data_start_pos;
|
||||
data_start_pos += delta;
|
||||
new_void_size = 1024;
|
||||
|
||||
relocate_written_data(data_start_pos - delta, delta);
|
||||
}
|
||||
|
||||
shrink_void_and_rerender_track_headers(data_start_pos - new_tracks_end_pos);
|
||||
shrink_void_and_rerender_track_headers(new_void_size);
|
||||
}
|
||||
|
||||
/** \brief Render all attachments into the output file at the current position
|
||||
|
@ -352,3 +352,4 @@ T_503pcm_in_mkv_varying_samples_per_packet:81c000712108e2a604c8a30b7677606f:pass
|
||||
T_504dts_96_24_identification:1837ab5b411944e143f9dae6fe6436d8-bb7c41b5aa1b57f18741b792897b0b59-90994a65c6f828ecfead9bd6473453a2:passed:20151006-223804:2.278995107
|
||||
T_505cisco_talos_can_0036:bf0fedc494cf99a0920d7a6e69edf952-6ef415b0f84d3e5dd435244362a37584:passed:20151020-161153:0.071686357
|
||||
T_506cisco_talos_can_0037:5461288548eac976164cd13f01bc9426-ed695caee29b1456da8629d38321ec9c-92b7169fc05ddf54c46816869c108f31-54a55a6d87bd4c08269891efb03980b3-fef3d018523c7d1fbed763f6666c1ae2-ac584cc44854f9396739df6e93d78acc-b415b2ef2a6dddf5d89733446fae2970-dd53fee23372c569d35e0b2918d86239:passed:20151020-161234:0.319298931
|
||||
T_507rerender_track_headers:7b16f08b7858a1d332516a6fb25a184b-ac9514a1f09f26ac0cb2f527ec2de0b7:passed:20151022-104930:2.573204876
|
||||
|
7
tests/test-507rerender_track_headers.rb
Executable file
7
tests/test-507rerender_track_headers.rb
Executable file
@ -0,0 +1,7 @@
|
||||
#!/usr/bin/ruby -w
|
||||
|
||||
# T_507rerender_track_headers
|
||||
describe "mkvmerge / rerender track headers"
|
||||
|
||||
test_merge "data/h265/rerender-track-headers-broken.hevc"
|
||||
test_merge "data/mkv/complex.mkv", :args => "--debug textsubs_force_rerender=8:16"
|
Loading…
Reference in New Issue
Block a user