Harinlen / cuberok

Automatically exported from code.google.com/p/cuberok
GNU General Public License v3.0
0 stars 1 forks source link

r255, r256 and later revisions break FFmpeg plugin #61

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
Сравниваю, как cuberok играет на r254 и r255 и более 
поздних: на r254 
ffmpeg играет ровно и плавно (я говорю про 
форматы ogg/vorbis и flac в 
первую очередь), на r255 играет только mp3, на ogg 
запинается, на flac 
падает. На более поздних ревизиях не 
падает, но запинается на ogg и flac, 
играет только mp3

Original issue reported on code.google.com by nomen.in...@gmail.com on 17 Jul 2009 at 8:14

GoogleCodeExporter commented 8 years ago

Original comment by nomen.in...@gmail.com on 17 Jul 2009 at 8:15

GoogleCodeExporter commented 8 years ago
В r254 не было упреждающего чтения потока, по 
сему была проблема с остановкой
воспроизведения во время интенсивных 
дисковых операций.

В r255 очередь появилась, но работала не 
полностью адекватно

С r256 очередь считается условно рабочей. 
Если проблема только в производительности,
то нужно попробовать увеличить длину 
очереди и уменьшить паузу при чтении, 
например так:

--- player_ffmpeg.cpp.orig  2009-07-17 16:23:56.687500000 +0400
+++ player_ffmpeg.cpp   2009-07-17 16:24:17.609375000 +0400
@@ -30,7 +30,7 @@
 #include <SDL.h>
 #include <SDL_audio.h>
 #define SDL_AUDIO_BUFFER_SIZE 1024
-#define QUEUESIZE 16
+#define QUEUESIZE 32

 Q_EXPORT_PLUGIN2(player_ffmpeg, PlayerFfmpeg) 

@@ -329,7 +329,7 @@
            av_free_packet(&packet);
        }
        //if(ffmpeg.eofstream) ffmpeg.needToStop = true;
-       SDL_Delay(100);
+       SDL_Delay(30);
    }
    SDL_LockAudio();
    SDL_PauseAudio(1);

Если проблема не с производительностью, а с 
кодеком, то сия операция должна непомочь.
Результатов жду тут.

ЗЫЖ У меня девелоперская машина наверно 
слишком шустрая, сам запинок не замечал.

Original comment by drmoriar...@gmail.com on 17 Jul 2009 at 12:27

GoogleCodeExporter commented 8 years ago
На мощности тоже не могу жаловаться, но 
дома, хоть и в меньшей степени, чем на 
работе, эффект наблюдается. На домашней 
машине патч помог. На работе теперь только 
в 
понедельник проверю. И, как отображено в 
соседнем баге, при выходе cuberok 
сегфолтится:

#0  0xb73e4146 in ?? () from /usr/lib/qt4/libQtCore.so.4
(gdb) bt
#0  0xb73e4146 in ?? () from /usr/lib/qt4/libQtCore.so.4
#1  0x085057b0 in ?? ()
#2  0xbfb4a938 in ?? ()
#3  0x0867a1f8 in ?? ()
#4  0xb751cff4 in ?? () from /usr/lib/qt4/libQtCore.so.4
#5  0x00000008 in ?? ()
#6  0x0860e458 in ?? ()
#7  0xbfb48aa8 in ?? ()
#8  0xb73e2207 in ?? () from /usr/lib/qt4/libQtCore.so.4
#9  0xbfb48a88 in ?? ()
#10 0x00000008 in ?? ()
#11 0x0860e45c in ?? ()
#12 0x0860e45c in ?? ()
#13 0x00000000 in ?? ()
(gdb)              

Понимаю, что толку от такого бэктрейса 
мало, но давно по глупости собрал свою 
генту 
с -fomit-frame-pointer

Original comment by nomen.in...@gmail.com on 17 Jul 2009 at 3:22

GoogleCodeExporter commented 8 years ago
Итак, вот у меня компьютер core2duo
model name      : Intel(R) Core(TM)2 Duo CPU     E8200  @ 2.66GHz
4 Gb оперативной памяти. Диски SATA. 
SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH)
PCI bridge: Intel Corporation 82801I

Звуковая карта, похоже, не при чём.
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio 
Controller 
(rev 02)

В общем, я считаю, что достаточно, особенно 
в сравнении с mplayer и плагином 
player_GStreamer, которые при указанной ниже 
нагрузке играют те же файлы без 
заметных на слух проблем.

В фоне запущены emerge world и на VirtualBox 
устанавливается Debian. Торреннты 
раздаются, много торрентов, Звук при 
использовании плагина ffmpeg заметно 
запинается. Даже с применённым 
предложенным патчем. Сейчас установки 
сделал даже вот 
такие:

Index: src/player_ffmpeg.cpp
===================================================================
--- src/player_ffmpeg.cpp       (revision 265)
+++ src/player_ffmpeg.cpp       (working copy)
@@ -30,7 +30,7 @@
 #include <SDL.h>
 #include <SDL_audio.h>
 #define SDL_AUDIO_BUFFER_SIZE 1024
-#define QUEUESIZE 16
+#define QUEUESIZE 1024

 Q_EXPORT_PLUGIN2(player_ffmpeg, PlayerFfmpeg)

@@ -329,7 +329,7 @@
                        av_free_packet(&packet);
                }
                //if(ffmpeg.eofstream) ffmpeg.needToStop = true;
-               SDL_Delay(100);
+               SDL_Delay(2);
        }
        SDL_LockAudio();
        SDL_PauseAudio(1);

Похоже, что при нагрузке эти настройки не 
влияют. GStreamer-плагин и mplayer играют 
чисто.

Original comment by nomen.in...@gmail.com on 17 Jul 2009 at 6:53

GoogleCodeExporter commented 8 years ago
Щас переделал чуток очередь, на дебе в 
виртуальной машине флаки вроде не лагают.
Так же исправил сегфолт на выходе.

Original comment by drmoriar...@gmail.com on 20 Jul 2009 at 12:41

GoogleCodeExporter commented 8 years ago
Мне всё интереснее и интереснее, что будет 
дальше с seek на флаках ))

При переключении на следующий трек 
какой-то артефакт звучит. Как я понимаю, он 
остаётся от трека, который только что 
воспроизводился. Под переключением я 
понимаю 
запуск другого трека двойным щелчком или 
кнопкой next. Чтоб было лучше заметно, 
воспроизводимый трек должен быть пошумнее, 
какой-нибудь гитарный тяжеляк, например.

Original comment by nomen.in...@gmail.com on 20 Jul 2009 at 1:47

GoogleCodeExporter commented 8 years ago
На работе всё играет, проблема, которая 
описана в начале прошла. Осталось только 
то, 
что описано в Comment 4. Сейчас нагрузки нет, но 
регулярно (несколько раз в течение 
трека) возникает вот это маленькое 
"запинание". Не сказать, чтоб часто, на на 
gstreamer 
этого нет. Такое ощущение, как будто оно и 
нет нагрузки вовсе. Происходит не только на 
flac, но и на ogg/vorbis.

Original comment by nomen.in...@gmail.com on 20 Jul 2009 at 1:54