|
|
| alextaylor |
| Posted: Oct 1 2004, 10:33 AM |
 |
|
Unregistered

|
I'm running v1.5.10.1 (build 2366). I loaded what I believe to be a standard MPEG2 elementary video stream into VirtualDubMod. The stream appears to behave normally, except that when I tried to open the 'File information' dialog, I got the following crash:
VirtualDub crash report -- build 2366 (release) --------------------------------------
Disassembly: 004b5060: 8bec mov ebp, esp 004b5062: 56 push esi 004b5063: ff7508 push dword ptr [ebp+08] 004b5066: 8bf1 mov esi, ecx 004b5068: e870530c00 call _strdup (0057a3dd) 004b506d: 85c0 test eax, eax 004b506f: 59 pop ecx 004b5070: 894608 mov [esi+08], eax 004b5073: 7516 jnz InputFilenameNode::InputFilenameNode+2c (004b508b) 004b5075: 8d4d08 lea ecx, [ebp+08] 004b5078: e8d0330700 call MyMemoryError::MyMemoryError (0052844d) 004b507d: 6860c25b00 push 005bc260 004b5082: 8d4508 lea eax, [ebp+08] 004b5085: 50 push eax 004b5086: e8801a0b00 call _CxxThrowException@8 (00566b0b) 004b508b: 8bc6 mov eax, esi 004b508d: 5e pop esi 004b508e: 5d pop ebp 004b508f: c20400 ret 0004 004b5092: ff7108 push dword ptr [ecx+08] 004b5095: e854100b00 call free (005660ee) 004b509a: 59 pop ecx 004b509b: c3 ret 004b509c: 55 push ebp 004b509d: 8bec mov ebp, esp 004b509f: 53 push ebx 004b50a0: 56 push esi 004b50a1: be76696473 mov esi, 73646976 004b50a6: 397508 cmp [ebp+08], esi 004b50a9: 57 push edi 004b50aa: 8b7d0c mov edi, [ebp+0c] 004b50ad: 750a jnz InputFile::GetSource+1d (004b50b9) 004b50af: 85ff test edi, edi 004b50b1: 7505 jnz InputFile::GetSource+1c (004b50b8) 004b50b3: 8b4118 mov eax, [ecx+18] 004b50b6: eb64 jmp InputFile::GetSource+80 (004b511c) 004b50b8: 4f dec edi 004b50b9: 8b410c mov eax, [ecx+0c] 004b50bc: 8b4910 mov ecx, [ecx+10] 004b50bf: 3bc1 cmp eax, ecx 004b50c1: 7457 jz InputFile::GetSource+7e (004b511a) 004b50c3: ba000f0000 mov edx, 00000f00 004b50c8: 397508 cmp [ebp+08], esi 004b50cb: 7430 jz InputFile::GetSource+61 (004b50fd) 004b50cd: 817d0861756473 cmp dword ptr [ebp+08], 73647561 004b50d4: 7418 jz InputFile::GetSource+52 (004b50ee) 004b50d6: 817d0874787473 cmp dword ptr [ebp+08], 73747874 004b50dd: 7534 jnz InputFile::GetSource+77 (004b5113) 004b50df: 8b18 mov ebx, [eax] 004b50e1: 8b5b10 mov ebx, [ebx+10] 004b50e4: 23da and ebx, edx 004b50e6: 81fb00030000 cmp ebx, 00000300 004b50ec: eb1c jmp InputFile::GetSource+6e (004b510a) 004b50ee: 8b18 mov ebx, [eax] 004b50f0: 8b5b10 mov ebx, [ebx+10] <-- FAULT 004b50f3: 23da and ebx, edx 004b50f5: 81fb00020000 cmp ebx, 00000200 004b50fb: eb0d jmp InputFile::GetSource+6e (004b510a) 004b50fd: 8b18 mov ebx, [eax] 004b50ff: 8b5b10 mov ebx, [ebx+10] 004b5102: 23da and ebx, edx 004b5104: 81fb00010000 cmp ebx, 00000100 004b510a: 7507 jnz InputFile::GetSource+77 (004b5113) 004b510c: 8bdf mov ebx, edi 004b510e: 4f dec edi 004b510f: 85db test ebx, ebx 004b5111: 7410 jz InputFile::GetSource+87 (004b5123) 004b5113: 83c004 add eax, 04 004b5116: 3bc1 cmp eax, ecx 004b5118: 75ae jnz InputFile::GetSource+2c (004b50c8) 004b511a: 33c0 xor eax, eax 004b511c: 5f pop edi 004b511d: 5e pop esi 004b511e: 5b pop ebx 004b511f: 5d pop ebp 004b5120: c20800 ret 0008 004b5123: 8b00 mov eax, [eax] 004b5125: ebf5 jmp InputFile::GetSource+80 (004b511c) 004b5127: 56 push esi 004b5128: 8b742408 mov esi, [esp+08] 004b512c: 85f6 test esi, esi 004b512e: 7505 jnz InputFile::GetSource+0e (004b5135) 004b5130: 8b4118 mov eax, [ecx+18] 004b5133: eb25 jmp InputFile::GetSource+33 (004b515a) 004b5135: 8b510c mov edx, [ecx+0c] 004b5138: 85d2 test edx, edx 004b513a: 7504 jnz InputFile::GetSource+19 (004b5140) 004b513c: 33c0 xor eax, eax 004b513e: eb08 jmp InputFile::GetSource+21 (004b5148) 004b5140: 8b4110 mov eax, [ecx+10] 004b5143: 2bc2 sub eax, edx 004b5145: c1f802 sar eax, 02 004b5148: 8d56ff lea edx, [esi-01] 004b514b: 3bd0 cmp edx, eax 004b514d: 7309 jnc InputFile::GetSource+31 (004b5158) 004b514f: 8b410c mov eax, [ecx+0c] 004b5152: 8b44b0fc mov eax, [eax+esi*4-04] 004b5156: eb02 jmp InputFile::GetSource+33 (004b515a) 004b5158: 33c0 xor eax, eax 004b515a: 5e pop esi 004b515b: c20400 ret 0004 004b515e: b8 db b8 004b515f: c2 db c2
Windows 5.1 (Windows XP build 2600) [Service Pack 2]
EAX = 00f82cd0 EBX = 00000000 ECX = 00f82cd4 EDX = 00000f00 EBP = 0012f7a8 DS:ESI = 0023:73646976 ES:EDI = 0023:00000000 SS:ESP = 0023:0012f79c CS:EIP = 001b:004b50f0 FS = 003b GS = 0000 EFLAGS = 00210246 FPUCW = ffff027f FPUTW = ffffffff
MM0 = 00000006804df06b MM1 = 0012fd5c00000001 MM2 = 0012fc340012fd40 MM3 = 0000003bee39a9f0 MM4 = 0012fe4000000000 MM5 = 002002020000001b MM6 = 8000000000000000 MM7 = 8000000000000000
Crash reason: Access Violation
Crash context: An out-of-bounds memory access (access violation) occurred in module 'VirtualDubMod'.
Thread traces:
Thread 00000988 (Main thread) C:\Dvpt\VDub_1.5.x\VirtualDubMod15\VirtualDub\source\Init.cpp(344) C:\Dvpt\VDub_1.5.x\VirtualDubMod15\VirtualDub\source\Init.cpp(387) C:\Dvpt\VDub_1.5.x\VirtualDubMod15\VirtualDub\source\Init.cpp(407) C:\Dvpt\VDub_1.5.x\VirtualDubMod15\VirtualDub\source\Init.cpp(467) C:\Dvpt\VDub_1.5.x\VirtualDubMod15\VirtualDub\source\VideoSource.cpp(646) C:\Dvpt\VDub_1.5.x\VirtualDubMod15\VirtualDub\source\VideoSource.cpp(676) C:\Dvpt\VDub_1.5.x\VirtualDubMod15\VirtualDub\source\FilterSystem.cpp(429) C:\Dvpt\VDub_1.5.x\VirtualDubMod15\VirtualDub\source\FilterSystem.cpp(569)
Thread call stack:004b50f0: InputFile::GetSource() 00448a93: InputFileMPEG::InfoDialog() 0048db74: VDProject::ShowInputInfo() 00491744: VDProjectUI::MenuHit() 77d4ecd2: USER32!IsCharAlphaW [77d40000+ebc0+112] 77d4ecd2: USER32!IsCharAlphaW [77d40000+ebc0+112] 77d56ddb: USER32!EndDialog [77d40000+16cc9+112] 77d56deb: USER32!EndDialog [77d40000+16cc9+122] 7c90eae3: ntdll!KiUserCallbackDispatcher [7c900000+ead0+13] 77d494e3: USER32!GetWindowLongA [77d40000+947c+67] 77d494b0: USER32!GetWindowLongA [77d40000+947c+34] 77d4b94c: USER32!IsWindow [77d40000+b7db+171] 77d4b813: USER32!IsWindow [77d40000+b7db+38] 77d4b2a1: USER32!DefWindowProcW [77d40000+b1e5+bc] 5ad73c20: uxtheme!DrawThemeText [5ad70000+3031+bef] 5ad8e300: uxtheme!GetThemeTextMetrics [5ad70000+1de50+4b0] 5ad73995: uxtheme!DrawThemeText [5ad70000+3031+964] 5ad71adb: uxtheme!00001adb 5ad71b3d: uxtheme!00001b3d 77d48bb1: USER32!GetWindowThreadProcessId [77d40000+8a58+159] 77d4b274: USER32!DefWindowProcW [77d40000+b1e5+8f] 77d4b250: USER32!DefWindowProcW [77d40000+b1e5+6b] 77d4b250: USER32!DefWindowProcW [77d40000+b1e5+6b] 00493fe4: VDProjectUI::MainWndProc() 5ad73b1b: uxtheme!DrawThemeText [5ad70000+3031+aea] 00493eff: VDProjectUI::StaticWndProc() 77d48709: USER32!GetDC [77d40000+8697+72] 77d48bb1: USER32!GetWindowThreadProcessId [77d40000+8a58+159] 77d48832: USER32!GetDC [77d40000+8697+19b] 77d487ff: USER32!GetDC [77d40000+8697+168] 5ad73cd0: uxtheme!DrawThemeText [5ad70000+3031+c9f] 5ad8d046: uxtheme!GetThemeRect [5ad70000+dffa+f04c] 77d487ff: USER32!GetDC [77d40000+8697+168] 77d4b368: USER32!DefWindowProcW [77d40000+b1e5+183] 77d4b373: USER32!DefWindowProcW [77d40000+b1e5+18e] 77d4b373: USER32!DefWindowProcW [77d40000+b1e5+18e] 77d4b3b4: USER32!DefWindowProcW [77d40000+b1e5+1cf] 77d4b3c4: USER32!DefWindowProcW [77d40000+b1e5+1df] 7c90eae3: ntdll!KiUserCallbackDispatcher [7c900000+ead0+13] 77d494e3: USER32!GetWindowLongA [77d40000+947c+67] 77d484bc: USER32!000084bc 77d4b8b6: USER32!IsWindow [77d40000+b7db+db] 77d484bc: USER32!000084bc 77d48564: USER32!00008564 77d4b2a1: USER32!DefWindowProcW [77d40000+b1e5+bc] 5ad73c20: uxtheme!DrawThemeText [5ad70000+3031+bef] 5ad987b4: uxtheme!GetThemeTextMetrics [5ad70000+1de50+a964] 5ad73995: uxtheme!DrawThemeText [5ad70000+3031+964] 5ad71adb: uxtheme!00001adb 5ad71b3d: uxtheme!00001b3d 77d48bb1: USER32!GetWindowThreadProcessId [77d40000+8a58+159] 77d4b274: USER32!DefWindowProcW [77d40000+b1e5+8f] 77d4b250: USER32!DefWindowProcW [77d40000+b1e5+6b] 00494563: VDProjectUI::MainWndProc() 77d4eda9: USER32!CallNextHookEx [77d40000+ed6e+3b] 74730e6c: MSCTF!TF_UninitSystem [74720000+10469+a03] 74730e71: MSCTF!TF_UninitSystem [74720000+10469+a08] 747309a9: MSCTF!TF_UninitSystem [74720000+10469+540] 00493eff: VDProjectUI::StaticWndProc() 77d48709: USER32!GetDC [77d40000+8697+72] 77d487eb: USER32!GetDC [77d40000+8697+154] 77d489a5: USER32!GetWindowLongW [77d40000+887e+127] 77d4cff8: USER32!PeekMessageA [77d40000+cefd+fb] 77d4bccc: USER32!DispatchMessageA [77d40000+bcbd+f] 00482ef4: WinMain@16() 00566f34: atexit() 00568b9e: WinMainCRTStartup() 7c816d4f: kernel32!RegisterWaitForInputIdle [7c800000+16d06+49]
-- End of report
Any thoughts?
Incidentally, as an aside, VirtualDubMod is not displaying all the frames in the clip. This particular clip has burnt-in timecoding, and the penultimate frame is not being displayed. I know that the frame exists, since I've run the clip through my own MPEG decoder. Has anyone else encountered this kind of thing before?
|
 |
| fccHandler |
| Posted: Oct 1 2004, 05:20 PM |
 |
|
Administrator n00b
  
Group: Moderators
Posts: 3961
Member No.: 280
Joined: 13-September 02

|
Does it crash in VirtualDub-MPEG2?
-------------------- May the FOURCC be with you... |
 |
| alextaylor |
| Posted: Oct 1 2004, 05:33 PM |
 |
|
Unregistered

|
No, it's fine.
I've just tried VDM with another m2v stream, and this time the program just vanished when I tried to get the dialog up.
|
 |
| fccHandler |
| Posted: Oct 1 2004, 06:18 PM |
 |
|
Administrator n00b
  
Group: Moderators
Posts: 3961
Member No.: 280
Joined: 13-September 02

|
I asked because supposedly VirtualDubMod's MPEG-2 decoder is based on my VirtualDub-MPEG2 code, thus if the fault was in my code then I could fix it. Unfortunately it must be something specific to VirtualDubMod (which I'm not too familiar with). Sorry.
-------------------- May the FOURCC be with you... |
 |
| alextaylor |
| Posted: Oct 1 2004, 07:32 PM |
 |
|
Unregistered

|
| QUOTE (fccHandler @ Oct 1 2004, 07:18 PM) | | I asked because supposedly VirtualDubMod's MPEG-2 decoder is based on my VirtualDub-MPEG2 code, thus if the fault was in my code then I could fix it. Unfortunately it must be something specific to VirtualDubMod (which I'm not too familiar with). Sorry. | Fair enough :-)
VDub-MPEG does however have the problem I mentioned with the missing frame - any idea what could be causing that? |
 |
| fccHandler |
| Posted: Oct 2 2004, 03:46 AM |
 |
|
Administrator n00b
  
Group: Moderators
Posts: 3961
Member No.: 280
Joined: 13-September 02

|
You say it's missing the penultimate frame? Hmm...
The only possibility I can think of is that the last frame (in coding order) is a B-frame and it's incomplete. If it's even one bit incomplete, the parser will discard it. This should be unlikely though, unless the stream has been deliberately cut.
Is there any way you can slice off the last 50K of your MPEG and make it available for me to download?
-------------------- May the FOURCC be with you... |
 |
| alextaylor |
| Posted: Oct 2 2004, 07:09 AM |
 |
|
Unregistered

|
| QUOTE (fccHandler @ Oct 2 2004, 04:46 AM) | You say it's missing the penultimate frame? Hmm...
The only possibility I can think of is that the last frame (in coding order) is a B-frame and it's incomplete. If it's even one bit incomplete, the parser will discard it. This should be unlikely though, unless the stream has been deliberately cut.
Is there any way you can slice off the last 50K of your MPEG and make it available for me to download? | As far as I can tell, the frame is fine - my decoder doesn't seem to be having any problems with it.
Unfortunately, the stream isn't mine to distribute :-( |
 |
| fccHandler |
| Posted: Oct 2 2004, 03:12 PM |
 |
|
Administrator n00b
  
Group: Moderators
Posts: 3961
Member No.: 280
Joined: 13-September 02

|
Who's is it then?
And why are you loading someone else's stream into VirtualDub, alextaylor? 
Anyway, I'm not suggesting that you "distribute" anything. I just need a tiny 50K sample from the end of the stream, so I can duplicate the bug myself and track down the cause of it.
-------------------- May the FOURCC be with you... |
 |
| alextaylor |
| Posted: Oct 2 2004, 03:29 PM |
 |
|
Unregistered

|
| QUOTE (fccHandler @ Oct 2 2004, 04:12 PM) | Who's is it then?
And why are you loading someone else's stream into VirtualDub, alextaylor? 
Anyway, I'm not suggesting that you "distribute" anything. I just need a tiny 50K sample from the end of the stream, so I can duplicate the bug myself and track down the cause of it. | It's a stream I have in the office for a project I'm working on, and I really am not allowed to copy it!
I will take a closer look at the stream structure next week, and see if I can assemble a new stream which produces the same effect and that I can send you :-) |
 |
| fccHandler |
| Posted: Oct 2 2004, 05:16 PM |
 |
|
Administrator n00b
  
Group: Moderators
Posts: 3961
Member No.: 280
Joined: 13-September 02

|
Fair enough.
-------------------- May the FOURCC be with you... |
 |
| alextaylor |
| Posted: Oct 4 2004, 08:55 AM |
 |
|
Unregistered

|
| QUOTE (fccHandler @ Oct 2 2004, 06:16 PM) | Fair enough. | Ok, I've taken a closer look :-)
The final GOP in the stream has the structure (in decode order) IBBPBBPBBPBBPBBPB. The presentation order of these frames is 2, 0, 1, 5, 3, 4, 8, 6, 7, 11, 9, 10, 14, 12, 13, 16, 15. The frame not being displayed by VirtualDub is the last one, presumably because it only has a back-reference. However, both my decoder and PremierePro are able to display this frame without errors. As I recall, while B-frames usually have both a back-reference and a forward-reference, it is legal for them to only have a single reference. How you detect that this is the case I am not sure :-)
The stream is 900 frames; VirtualDub-MPEG2 is reporting it as 899. |
 |
| fccHandler |
| Posted: Oct 5 2004, 01:39 AM |
 |
|
Administrator n00b
  
Group: Moderators
Posts: 3961
Member No.: 280
Joined: 13-September 02

|
| QUOTE (alextaylor @ Oct 4 2004, 04:55 AM) | | As I recall, while B-frames usually have both a back-reference and a forward-reference, it is legal for them to only have a single reference. |
To the MPEG parser, it doesn't matter if the B-frame only refers to a single reference (I agree with you that it's legal). What does matter to the parser is that both past and future references exist for the B-frame. If either potential reference frame is missing or incomplete, the parser assumes that the B-frame(s) relying on them can't be decoded, and discards them.
I can imagine situations where that assumption may be false, but not in the situation you described. Past and future reference frames do exist for your final B-frame; they are the last two P-frames of the GOP. (And you can see that's true in the re-numbered display sequence.)
Therefore, I don't think it's the case that VirtualDub-MPEG2 is discarding the B-frame for lack of existing reference frames. There must be some other reason.
-------------------- May the FOURCC be with you... |
 |
| alextaylor |
| Posted: Oct 5 2004, 07:39 AM |
 |
|
Unregistered

|
| QUOTE (fccHandler @ Oct 5 2004, 02:39 AM) | Past and future reference frames do exist for your final B-frame; they are the last two P-frames of the GOP. (And you can see that's true in the re-numbered display sequence.) | So they do :-) My fault for posting first thing in the morning before I've woken up! |
 |
| dlandelle |
| Posted: Oct 15 2004, 08:12 PM |
 |
|
Unregistered

|
The last "missing frame" is a bit off topic, but I had the same doubt about it.
After verification, I thing everything is OK in VD MPEG2.
little story:
I was creating my MPEG2 stream from a shared memory where bytes happened to arrive (no that ain't no hacking) and I was missing the last DWORD because of a little bug.
Most player had no problem even displaying the last incomplete frame, but VD did not, maybe due to the thorough indexing that is done first ?
The bug being corrected, everything runs fine |
 |
|