stsaz / fmedia

fast audio player/recorder/converter
BSD 2-Clause "Simplified" License
216 stars 21 forks source link

Падение при попытке воспроизведения файла в Windows #5

Closed ghost closed 6 years ago

ghost commented 7 years ago

OS: Windows 10

D:\fmedia>fmedia --debug --dev=5 ../Sounds/Hello.wav
fmedia v0.29
00:00:27.105 debug core: received signal: 1
00:00:27.105 debug core: reading config file D:\fmedia\fmedia.conf
00:00:27.105 debug core: loading module net.dll
00:00:27.112 debug core: loading module mixer.dll
00:00:27.117 debug core: loading module soxr.dll
00:00:27.128 debug core: loading module plist.dll
00:00:27.134 debug core: loading module tui.dll
00:00:27.139 debug core: loading module mp4.dll
00:00:27.145 debug core: loading module avi.dll
00:00:27.151 debug core: loading module mkv.dll
00:00:27.156 debug core: loading module ogg.dll
00:00:27.162 debug core: loading module wav.dll
00:00:27.167 debug core: loading module mpeg.dll
00:00:27.179 debug core: loading module mpc.dll
00:00:27.190 debug core: loading module vorbis.dll
00:00:27.206 debug core: loading module opus.dll
00:00:27.218 debug core: loading module flac.dll
00:00:27.229 debug core: loading module alac.dll
00:00:27.241 debug core: loading module aac.dll
00:00:27.252 debug core: loading module wavpack.dll
00:00:27.263 debug core: loading module ape.dll
00:00:27.276 debug core: loading module wasapi.dll
00:00:27.282 debug core: received signal: 2
00:00:27.282 debug que: received command:que-new, param:00000000
00:00:27.282 debug que: received command:que-sel, param:00000000
00:00:27.282 debug core: task:0078ff68, cmd:1, active:0, handler:00402e70, param:00000000
00:00:27.283 debug core: received signal: 3
00:00:27.283 debug que: received command:add, param:0062f530
00:00:27.283 debug que: added: (0: 0-0) ../Sounds/Hello.wav
00:00:27.283 debug que: received command:meta-set, param:007b28c0
00:00:27.283 debug que: received command:play, param:007b28c0
00:00:27.283 debug track: *1:   setval: input = ../Sounds/Hello.wav
00:00:27.284 debug track: *1:   setval: playdev_name = 5
00:00:27.284 debug track: *1:   setval: queue_item = 8071360
00:00:27.284 debug track: received command:4, trk:007b3a90
00:00:27.284 debug track: *1:   chain: #queue.track -> #file.in -> wav.in -> #soundmod.until -> tui.tui -> #soundmod.gain -> #soundmod.conv -> wasapi.out
00:00:27.284 debug track: *1:   properties: e0de8e610000000080c08d6100000000903a7b0000000000000000000000000000cf8e61000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000cf8e6100000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000
00:00:27.284 debug track: *1:   creating context for #queue.track...
00:00:27.284 debug track: *1:   context for #queue.track created
00:00:27.285 debug track: *1:   creating context for #file.in...
00:00:27.326 debug file: *1:    opened ../Sounds/Hello.wav (37 kbytes)
00:00:27.326 debug track: *1:   context for #file.in created
00:00:27.326 debug file: *1:    buf#0: async read, offset:0
00:00:27.326 debug file: *1:    buf#0: read 38766 bytes at offset 0
00:00:27.327 debug file: *1:    reading's done
00:00:27.327 debug file: *1:    returning buf#0  offset:0  seek:0
00:00:27.327 debug track: *1:   creating context for wav.in...
00:00:27.327 debug track: *1:   context for wav.in created
00:00:27.327 debug track: *1:   creating context for #soundmod.until...
00:00:27.327 debug track: *1:   #soundmod.until is skipped
00:00:27.327 debug track: *1:   creating context for tui.tui...
00:00:27.328 debug track: *1:   context for tui.tui created

" - " ../Sounds/Hello.wav 0.04 MB, 0:00.878 (19,360 samples), 353 kbps, WAVE, 22050 Hz, int16, mono

[......................................................................] 0:00 / 0:0000:00:27.328 debug tui.tui: *1:
samples: +19360 [19360] at 0
00:00:27.328 debug track: *1:   creating context for #soundmod.gain...
00:00:27.328 debug track: *1:   context for #soundmod.gain created
00:00:27.328 debug track: *1:   creating context for #soundmod.conv...
00:00:27.329 debug track: *1:   context for #soundmod.conv created
00:00:27.329 debug track: *1:   creating context for wasapi.out...
00:00:27.329 debug track: *1:   context for wasapi.out created
00:00:27.331 debug wasapi.out: *1:      opening device #5, fmt:int16/22050/1, excl:0
00:00:27.336 debug track: *1:   added module soxr.conv to chain
00:00:27.336 debug conv: *1:    PCM conversion: int16/1/22050/i -> float32/2/22050/ni
00:00:27.336 debug track: *1:   creating context for soxr.conv...
00:00:27.336 debug track: *1:   context for soxr.conv created
00:00:27.337 debug soxr: *1:    PCM conversion: float32/2/22050/ni -> int16/2/96000/i
00:00:27.339 debug wasapi.out: *1:      opening device #5, fmt:int16/96000/2, excl:0
00:00:27.348 debug core: timer:0078bff0  interval:125  handler:6abc14c0  param:007a8110
00:00:27.348 debug core: started kernel timer  interval:125
00:00:27.348 debug wasapi: *1:  opened buffer 500ms, 96000Hz, excl:0
00:00:27.348 debug wasapi: *1:  written 177408 bytes (92% filled)
00:00:27.349 debug wasapi: *1:  written 14592 bytes (100% filled)
00:00:27.473 debug wasapi: *1:  written 57600 bytes (100% filled)
00:00:27.598 debug wasapi: *1:  written 46080 bytes (100% filled)
00:00:27.723 debug wasapi: *1:  written 27456 bytes (88% filled)
00:00:27.723 debug tui.tui: *1: samples: +0 [19360] at 0

00:00:27.724 debug wasapi: *1:  written 14016 bytes (95% filled)
00:00:28.225 debug track: *1:   closing...
00:00:28.225 debug core: timer:0078bff0  interval:0  handler:6abc14c0  param:007a8110
00:00:28.225 debug core: stopped kernel timer
00:00:28.226 debug core: task:007a8140, cmd:0, active:0, handler:618dc080, param:007b3a90
00:00:28.226 debug que: no next file in playlist
00:00:28.226 debug track: received command:10, trk:00000000
00:00:28.226 debug core: received signal: 4
00:00:28.227 debug track: *1:   time: 0.066669.  #queue.track: 0.000316 (0%), #file.in: 0.041493 (62%), wav.in: 0.000337 (0%), #soundmod.until: 0.000000 (0%), tui.tui: 0.001274 (1%), #soundmod.gain: 0.000321 (0%), #soundmod.conv: 0.000672 (1%), wasapi.out: 0.018755 (28%), soxr.conv: 0.003501 (5%)
00:00:28.227 debug track: *1:   closed
00:00:28.227 debug track: received command:8, trk:00000000
00:00:28.227 debug core: task:007b19b0, cmd:0, active:0, handler:618ca0d0, param:00000000

Звук воспроизводится, приложение зависает, и через примерно 5 секунд ошибка Windows:

Имя сбойного приложения: fmedia.exe, версия: 0.29.0.0, метка времени: 0x011cbd40
Имя сбойного модуля: ntdll.dll, версия: 10.0.15063.447, метка времени: 0xa329d3a8
Код исключения: 0xc0000374
Смещение ошибки: 0x00000000000f775f
Идентификатор сбойного процесса: 0x6bc
Время запуска сбойного приложения: 0x01d32a73a09976a4
Путь сбойного приложения: D:\fmedia\fmedia.exe
Путь сбойного модуля: C:\Windows\SYSTEM32\ntdll.dll
Идентификатор отчета: 98845f19-6a3e-42f0-ae76-1bf0820552d8
Полное имя сбойного пакета: 
Код приложения, связанного со сбойным пакетом: 

Возможно мне не хватает какого-то фреймворка/библиотеки?

stsaz commented 7 years ago

Возможно мне не хватает какого-то фреймворка/библиотеки? Вряд ли, т.к. в таком случае ничего бы не работало и не запускалось.

На моей машине win8.1 баг не воспроизводится с файлом такой же длины. Код исключения 0xc0000374 означает Heap Corruption, т.е. какой-то модуль испортил память процесса.

  1. Попробуйте запустить эту же команду для другого аудио устройства, например "--dev=1" ? fmedia --debug --dev=1 ../Sounds/Hello.wav

  2. Попробуйте сконвертировать файл в .flac и запустить воспроизведение, будет ли проблема при этом? fmedia ../Sounds/Hello.wav -o .flac fmedia Hello.flac

  3. Есть ли у вас возможность приаттачить или выслать мне на почту этот самый .wav файл?

P.S. Вы используете fmedia x86 или x64 версию?

ghost commented 7 years ago
  1. Независимо от устройства всегда после воспроизведения пауза в примерно 5 секунд до закрытия приложения, затем с некоторой вероятностью ошибка 0xc0000374

  2. Конвертация в flac не помогает

  3. Файл прикрепил Hello.zip

  4. Пробовал и x86 и x64, также пробовал более ранние версии, не помогло

Возможно что-то с железом, но в целом система казалась стабильной, проверить на другой возможности нет.

stsaz commented 7 years ago

Понятно, как и следовало ожидать, конкретно с этим файлом у меня fmedia не падает. Возможно связано именно с windows10. А можете посмотреть под дебаггером? Можно сделать так:

  1. Скачайте gdb для windows отсюда (или с другого сайта): ftp://ftp.equation.com/gdb/64/gdb.exe

  2. Скачайте дебаг символы для fmedia: http://fmedia.firmdev.com/fmedia-0.29.1-win-x64-debug.zip

    Распакуйте все файлы .debug в ту папку, где установлен fmedia.

  3. Запустите fmedia под gdb: gdb --args fmedia Hello.wav

    Введите команду для запуска приложения:

    (gdb) r

  4. Когда приложение упадёт, введите команду: (gdb) thread apply all bt

    или можно просто

    (gdb) bt

    Получим call stack. Будем надеяться, что там будет что-то полезное для того, чтобы понять, где именно падает.

ghost commented 7 years ago

TL;DR: без указания --dev зависания и падений нет.

Под GDB приложение не падает и не зависает.

(gdb) r
Starting program: D:\fmedia\fmedia.exe ../Sounds/Hello.wav
[New Thread 1332.0x7f4]
warning: FTH: (1332): *** Fault tolerant heap shim applied to current process. This is usually due to previous crashes. ***
[New Thread 1332.0x1634]
[New Thread 1332.0xabc]
[New Thread 1332.0x2694]
fmedia v0.29
[New Thread 1332.0x18a4]

" - " ../Sounds/Hello.wav 0.04 MB, 0:00.878 (19,360 samples), 353 kbps, WAVE, 22050 Hz, int16, mono

[......................................................................] 0:00 / 0:00[New Thread 1332.0x219c]

[Thread 1332.0x219c exited with code 4294967295]
[Thread 1332.0x1634 exited with code 0]
[Thread 1332.0xabc exited with code 0]
[Thread 1332.0x2694 exited with code 0]
[Thread 1332.0x18a4 exited with code 0]
[Inferior 1 (process 1332) exited normally]
(gdb)

Смущает правда Thread 1332.0x219c exited with code 4294967295.

UPD: Оно не падало из-за того, что не указал аргумент --dev.

(gdb) r
Starting program: D:\fmedia\fmedia.exe "--dev=5" ../Sounds/Hello.wav
[New Thread 1040.0x251c]
warning: FTH: (1040): *** Fault tolerant heap shim applied to current process. This is usually due to previous crashes. ***
[New Thread 1040.0x1020]
[New Thread 1040.0x2564]
[New Thread 1040.0x2408]
warning: Can not parse XML library list; XML support was disabled at compile time
fmedia v0.29
[New Thread 1040.0x28f4]

" - " ../Sounds/Hello.wav 0.04 MB, 0:00.878 (19,360 samples), 353 kbps, WAVE, 22050 Hz, int16, mono

[......................................................................] 0:00 / 0:00[New Thread 1040.0x2b90]

[Thread 1040.0x2b90 exited with code 4294967295]

Thread 5 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1040.0x28f4]
0x0000000069b45de7 in ?? ()
(gdb) q
A debugging session is active.

        Inferior 1 [process 1040] will be killed.

Quit anyway? (y or n) y

Зависает на строке [Thread 1040.0x2b90 exited with code 4294967295]. Результаты thread apply all bt:

(gdb) thread apply all bt

Thread 5 (Thread 3340.0x20d0):
#0  0x0000000069b45de7 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 4 (Thread 3340.0xaac):
#0  0x00007ff92e8e8c34 in ?? ()
#1  0x00007ff92e881553 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

Thread 3 (Thread 3340.0x26d0):
#0  0x00007ff92e8e8c34 in ?? ()
#1  0x00007ff92e881553 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

Thread 2 (Thread 3340.0x1394):
#0  0x00007ff92e8e8c34 in ?? ()
#1  0x00007ff92e881553 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

Thread 1 (Thread 3340.0x22b4):
#0  0x00007ff92e8e5ef4 in ?? ()
#1  0x00007ff92af3dd20 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
(gdb) set $pc = *(void **)$rsp
(gdb) set $rsp = $rsp + 8
(gdb) bt
#0  0x0000000000000001 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

На всякий случай список девайсов:

D:\fmedia>fmedia --list-dev
fmedia v0.29
Playback/Loopback:
device #1: XF270HU-4 (NVIDIA High Definition Audio)
device #2: ╨ж╨╕╤Д╤А╨╛╨▓╨╛╨╡ ╨░╤Г╨┤╨╕╨╛ (S/PDIF) (2- ╨г╤Б╤В╤А╨╛╨╣╤Б╤В╨▓╨╛ ╤Б ╨┐╨╛╨┤╨┤╨╡╤А╨╢╨║╨╛╨╣ High Definition Audio)
device #3: CABLE Input (VB-Audio Virtual Cable)
device #4: SPDIF-Out (Sound Blaster X-Fi Surround 5.1 Pro)
device #5: Speaker (Sound Blaster X-Fi Surround 5.1 Pro)

Capture:
device #1: CABLE Output (VB-Audio Virtual Cable)
device #2: Line-In/Mic-In (Sound Blaster X-Fi Surround 5.1 Pro)
device #3: What U Hear (Sound Blaster X-Fi Surround 5.1 Pro)

UPD

Логи отличаются утечкой (без --dev от c --dev):

Error #7: LEAK 28 direct bytes 0x0000000002e2c250-0x0000000002e2c26c + 0 indirect bytes
# 0 replace_RtlAllocateHeap               [d:\drmemory_package\common\alloc_replace.c:3770]
# 1 AcLayers.dll!NotifyShims             +0x52a2   (0x00007ff8fb7b6fa3 <AcLayers.dll+0x6fa3>)
# 2 __tmainCRTStartup                     [../crt/crtexe.c:337]
# 3 AEPIC.dll!?                          +0x0      (0x00007ff91aa3201a <AEPIC.dll+0x201a>)
# 4 AEPIC.dll!?                          +0x0      (0x00007ff91aa31f89 <AEPIC.dll+0x1f89>)
# 5 AEPIC.dll!?                          +0x0      (0x00007ff91aa31f39 <AEPIC.dll+0x1f39>)
# 6 AEPIC.dll!PicRetrieveFileInfo        +0x400    (0x00007ff91aa32de1 <AEPIC.dll+0x2de1>)
# 7 wer.dll!WerpAuxmdFree                +0x68e86  (0x00007ff91e2cecc7 <wer.dll+0x7ecc7>)
# 8 wer.dll!WerpAuxmdFree                +0x68a59  (0x00007ff91e2ce89a <wer.dll+0x7e89a>)
# 9 wer.dll!WerpAuxmdFree                +0x6924a  (0x00007ff91e2cf08b <wer.dll+0x7f08b>)
#10 wer.dll!WerpAuxmdFree                +0x5bff2  (0x00007ff91e2c1e33 <wer.dll+0x71e33>)
#11 wer.dll!WerReportCreate              +0x42d    (0x00007ff91e257a2e <wer.dll+0x7a2e>)
stsaz commented 7 years ago

Попробуйте пожалуйста с новой версией, v0.30 ? Там была исправлена проблема с таймерами на Windows, таймер трэды создавались и не закрывались правильно, что приводило к зависаниям. Возможно это как раз то самое.

Про утечку памяти - посмотрю и проверю это в ближайшее время, спасибо! Но это вряд ли может привести к сегфолту.

На всякий случай приаттачил новые дебаг симоволы. fmedia-0.30.2-win-x64-debug.zip

P.S. А output команды fmedia --list-dev >LOG правильно показывает русские символы в файле?