diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | e2de64d6f1beb9e492daf5b886e19933c1fa41dd (patch) | |
tree | 9047cf9e6b5c43878d5bf82660adae77ceee097a /mpeglib_artsplug/mpeglibartsplay.cpp | |
download | tdemultimedia-e2de64d6f1beb9e492daf5b886e19933c1fa41dd.tar.gz tdemultimedia-e2de64d6f1beb9e492daf5b886e19933c1fa41dd.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdemultimedia@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'mpeglib_artsplug/mpeglibartsplay.cpp')
-rw-r--r-- | mpeglib_artsplug/mpeglibartsplay.cpp | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/mpeglib_artsplug/mpeglibartsplay.cpp b/mpeglib_artsplug/mpeglibartsplay.cpp new file mode 100644 index 00000000..66b69150 --- /dev/null +++ b/mpeglib_artsplug/mpeglibartsplay.cpp @@ -0,0 +1,276 @@ +// vim:ts=2:sw=2:sts=2:et +/** + Starter for plugins. + The plugins are identified by their extension + + .wav ->WavPlayObject + .mp3 ->MP3PlayObject + .mpg ->MPGPlayObject + .ogg ->OGGPlayObject +*/ + + +#include "soundserver.h" +#include "kmedia2.h" + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + + +#include <stdio.h> +#include <stdlib.h> +#include <vector> +#include <string> +#include <iostream> +#include <climits> + +using namespace std; + +#if defined(HAVE_GETOPT_H) +#include <getopt.h> +#endif + + +string file1; +string file2; + +Arts::Dispatcher* d=0; +Arts::SimpleSoundServer* server=0; + + + +void usage() { + cout << "mpeglibartsply command line tool for arts playobjects"<<endl; + cout << "Usage : mpeglibartsply [url]"<<endl; + cout << endl; + cout << "-1 : create/destroy PlayObject test."<<endl; + cout << "-2 : create/seek/play/destroy PlayObject test."<<endl; + cout << "-3 : torture seek implementation test"<<endl; + cout << "-h : help"<<endl; + cout << endl; + cout << "THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! " \ + << "USE AT YOUR OWN RISK!"<<endl; + cout << endl; + exit(0); +} + + +void initServer() { + d=new Arts::Dispatcher(); + server= new Arts::SimpleSoundServer (Arts::Reference("global:Arts_SimpleSoundServer")); + + if(server->isNull()) { + cerr << "Can't connect to sound server" << endl; + exit(0); + } + +} + + +void destroyServer() { + delete server; + delete d; +} + +/** + create destroy playobjects without playing anything +*/ +void doStress1() { + int cnt=0; + while (cnt < 10000) { + Arts::PlayObject play=server->createPlayObject(file1); + cout << "cnt:"<<cnt++<<endl; + } +} + +/** + create playobjects playing some time, do seek play destroy +*/ +void doStress2() { + int cnt=0; + while (cnt < 1000) { + Arts::PlayObject play=server->createPlayObject(file1); + play.play(); + sleep(3); + Arts::poTime seekTime; + seekTime.seconds=100; + seekTime.ms=0; + play.seek(seekTime); + cout << "cnt:"<<cnt++<<endl; + } +} + +/** + create playobject seek random play seek again +*/ +void doStress3() { + int cnt=0; + Arts::PlayObject play=server->createPlayObject(file1); + play.play(); + long secs=0; + while(1) { + cout << "waiting for length info.."<<endl; + sleep(3); + Arts::poTime length=play.overallTime(); + secs=length.seconds; + if (secs > 0) break; + } + // do not jump near to end, the danger that + // we get an eof is to high + if (secs < 100) { + cout << "file to short for test"<<endl; + exit(-1); + } + secs-=10; + Arts::poTime seekTime; + Arts::poTime startTime; + startTime.seconds=0; + startTime.ms=0; + + while (cnt < 1000) { + + // + // seek to a know position + // + play.seek(startTime); + // now wait for seek completion we need a poll here + while(1) { + Arts::poTime current=play.currentTime(); + if (current.seconds < 5) { + break; + } + usleep(50000); + } + + // + // now we know that the playObject is near the beginning + // + + int randNo=rand(); + long seekPos=(long)(((float)randNo*(float)secs)/(float)RAND_MAX); + // need to jump over the start area + + seekPos+=5; + cout << "seek to :"<<seekPos + << " | cnt:"<<cnt++ + << " of 1000"<<endl; + seekTime.seconds=seekPos; + seekTime.ms=0; + play.seek(seekTime); + // now wait for seek completion we need a poll here + while(1) { + Arts::poTime current=play.currentTime(); + if (current.seconds > seekPos) { + break; + } + if (current.seconds == seekPos) { + if (current.ms > 0) { + break; + } + } + usleep(50000); + } + + + } + cout << "stresstest successfully passed."<<endl; +} + + +int main(int argc, char **argv) { + int testNr=0; + int c; + initServer(); + + while(1) { + c = getopt (argc, argv, "123456h"); + if (c == -1) break; + switch(c) { + case '1': { + testNr=1; + break; + } + case '2': { + testNr=2; + break; + } + case '3': { + testNr=3; + break; + } + case '4': { + testNr=4; + break; + } + case '5': { + testNr=5; + break; + } + case '6': { + testNr=5; + break; + } + case 'h': { + usage(); + break; + } + default: + printf ("?? getopt returned character code 0%o ??\n", c); + usage(); + exit(-1); + } + } + + if (optind >= argc ) { + usage(); + exit(-1); + } + + if (optind < argc ) { + file1=argv[optind]; + optind++; + file2=file1; + } + if (optind < argc ) { + file2=argv[optind]; + } + + + switch(testNr) { + case 1: { + doStress1(); + break; + } + case 2: { + doStress2(); + break; + } + case 3: { + doStress3(); + break; + } + default: + if (file1[0] != '/') { + char buf[PATH_MAX+1]; + char *path = getcwd(buf, PATH_MAX - file1.length()); + if (path) { + file1.insert(0, "/"); + file1.insert(0, path); + } + } + Arts::PlayObject play=server->createPlayObject(file1); + if (play.isNull()) { + cout << "cannot play this"<<endl; + destroyServer(); + exit(0); + } + play.play(); + while (play.state() != Arts::posIdle) { + sleep(1); + } + } + + destroyServer(); +} + |