libeplayer3: continue refresh

Origin commit data
------------------
Branch: master
Commit: 7d49d4d32b
Author: martii <m4rtii@gmx.de>
Date: 2014-04-08 (Tue, 08 Apr 2014)


------------------
No further description and justification available within origin commit message!

------------------
This commit was generated by Migit
This commit is contained in:
martii
2014-04-08 20:02:07 +02:00
parent ae60520501
commit ec9d6ed878
26 changed files with 709 additions and 908 deletions

View File

@@ -46,8 +46,6 @@ bool cPlayback::Open(playmode_t PlayMode)
last_size = 0;
nPlaybackSpeed = 0;
init_jump = -1;
player = new Player();
return 0;
}
@@ -81,23 +79,9 @@ bool cPlayback::Start(char *filename, int vpid, int vtype, int apid, int ac3, un
mAudioStream=0;
mSubtitleStream=-1;
mTeletextStream=-1;
char file[strlen(filename) + 1];
*file = 0;
if (!strncmp("file://", filename, 7))
filename += 7;
if(strstr(filename, "://"))
isHTTP = true;
else if (no_probe)
strcat(file, "myts://");
else
strcat(file, "file://");
strcat(file, filename);
//try to open file
if(player && player->Open(file)) {
if(player && player->Open(filename, no_probe)) {
if (pm != PLAYMODE_TS) {
player->output.Open();
@@ -113,21 +97,18 @@ bool cPlayback::Start(char *filename, int vpid, int vtype, int apid, int ac3, un
* with the exception of timeshift. but this should be handled
* outside this lib or with another function!
*/
if (pm != PLAYMODE_TS)
{
if ((ret) && (!isHTTP))
{
//pause playback in case of timeshift
//FIXME: no picture on tv
if (!player || !player->Pause())
{
ret = false;
printf("failed to pause playback\n");
} else
playing = true;
} else
playing = true;
}
if (pm != PLAYMODE_TS) {
if ((ret) && (!isHTTP)) {
//pause playback in case of timeshift
//FIXME: no picture on tv
if (!player->Pause()) {
ret = false;
printf("failed to pause playback\n");
} else
playing = true;
} else
playing = true;
}
printf("%s:%s - return=%d\n", FILENAME, __FUNCTION__, ret);
@@ -135,13 +116,11 @@ bool cPlayback::Start(char *filename, int vpid, int vtype, int apid, int ac3, un
if (fn_ts.rfind(".ts") == fn_ts.length() - 3)
fn_xml = fn_ts.substr(0, fn_ts.length() - 3) + ".xml";
if (pm == PLAYMODE_TS)
{
if (pm == PLAYMODE_TS) {
struct stat s;
if (!stat(filename, &s))
last_size = s.st_size;
if (player)
{
if (player) {
ret = true;
videoDecoder->Stop(false);
audioDecoder->Stop();
@@ -156,18 +135,9 @@ bool cPlayback::Stop(void)
printf("%s:%s playing %d\n", FILENAME, __FUNCTION__, playing);
//if(playing==false) return false;
if(player)
player->Stop();
if(player)
player->output.Close();
if(player)
player->Close();
if(player) {
delete player;
player = NULL;
}
player->Stop();
player->output.Close();
player->Close();
playing=false;
return true;
@@ -177,8 +147,7 @@ bool cPlayback::SetAPid(int pid, bool ac3 __attribute__((unused)))
{
printf("%s:%s\n", FILENAME, __FUNCTION__);
if(pid!=mAudioStream){
if(player)
player->SwitchAudio(pid);
player->SwitchAudio(pid);
mAudioStream=pid;
}
return true;
@@ -188,8 +157,7 @@ bool cPlayback::SetSubtitlePid(int pid)
{
printf("%s:%s\n", FILENAME, __FUNCTION__);
if(pid!=mSubtitleStream){
if(player)
player->SwitchSubtitle(pid);
player->SwitchSubtitle(pid);
mSubtitleStream = pid;
}
return true;
@@ -199,8 +167,7 @@ bool cPlayback::SetTeletextPid(int pid)
{
printf("%s:%s\n", FILENAME, __FUNCTION__);
if(pid!=mTeletextStream){
if(player)
player->SwitchTeletext(pid);
player->SwitchTeletext(pid);
mTeletextStream=pid;
}
return true;
@@ -216,69 +183,47 @@ bool cPlayback::SetSpeed(int speed)
videoDecoder->closeDevice();
decoders_closed = true;
usleep(500000);
if (player) {
player->output.Open();
playing = player->Play();
}
player->output.Open();
playing = player->Play();
}
if(playing==false)
return false;
if(player)
{
int result = 0;
int result = 0;
nPlaybackSpeed = speed;
if (speed > 1)
{
/* direction switch ? */
if (player->isBackWard)
{
result = player->FastBackward(0);
printf("result = %d\n", result);
}
result = player->FastForward(speed);
} else
if (speed < 0)
{
/* direction switch ? */
if (player->isForwarding)
{
result = player->Continue();
printf("result = %d\n", result);
}
result = player->FastBackward(speed);
}
else
if (speed == 0)
{
/* konfetti: hmmm accessing the member isn't very proper */
if ((player->isForwarding) || (!player->isBackWard))
player->Pause();
else
{
player->FastForward(0);
}
} else
{
nPlaybackSpeed = speed;
if (speed > 1) {
/* direction switch ? */
if (player->isBackWard) {
result = player->FastBackward(0);
}
result = player->FastForward(speed);
} else if (speed < 0) {
/* direction switch ? */
if (player->isForwarding) {
result = player->Continue();
}
if (init_jump > -1)
{
SetPosition(init_jump);
init_jump = -1;
result = player->FastBackward(speed);
} else if (speed == 0) {
/* konfetti: hmmm accessing the member isn't very proper */
if ((player->isForwarding) || (!player->isBackWard))
player->Pause();
else {
player->FastForward(0);
}
if (result != 0)
{
printf("returning false\n");
return false;
}
} else {
result = player->Continue();
}
if (init_jump > -1) {
SetPosition(init_jump);
init_jump = -1;
}
if (!result) {
printf("returning false\n");
return false;
}
return true;
}
@@ -292,8 +237,7 @@ bool cPlayback::GetSpeed(int &speed) const
void cPlayback::GetPts(uint64_t &pts)
{
if (player)
player->GetPts((int64_t &) pts);
player->GetPts((int64_t &) pts);
}
// in milliseconds
@@ -325,15 +269,14 @@ bool cPlayback::GetPosition(int &position, int &duration)
if(playing==false) return false;
if (player && !player->isPlaying) {
if (!player->isPlaying) {
printf("cPlayback::%s !!!!EOF!!!! < -1\n", __func__);
position = duration + 1000;
return false;
}
int64_t vpts = 0;
if(player)
player->GetPts(vpts);
player->GetPts(vpts);
if(vpts <= 0) {
//printf("ERROR: vpts==0");
@@ -347,8 +290,7 @@ bool cPlayback::GetPosition(int &position, int &duration)
double length = 0;
if(player)
player->GetDuration(length);
player->GetDuration(length);
if(length <= 0) {
duration = duration+1000;
@@ -374,8 +316,7 @@ bool cPlayback::SetPosition(int position, bool absolute)
return false;
}
float pos = (position/1000.0);
if(player)
player->Seek(pos, absolute);
player->Seek(pos, absolute);
return true;
}
@@ -384,15 +325,14 @@ void cPlayback::FindAllPids(int *pids, unsigned int *ac3flags, unsigned int *num
printf("%s:%s\n", FILENAME, __FUNCTION__);
unsigned int i = 0;
if(player) {
std::vector<Track> tracks = player->manager.getAudioTracks();
for (std::vector<Track>::iterator it = tracks.begin(); it != tracks.end() && i < *numpids; ++it) {
pids[i] = it->pid;
ac3flags[i] = it->ac3flags;
language[i] = it->Name;
i++;
}
std::vector<Track> tracks = player->manager.getAudioTracks();
for (std::vector<Track>::iterator it = tracks.begin(); it != tracks.end() && i < *numpids; ++it) {
pids[i] = it->pid;
ac3flags[i] = it->ac3flags;
language[i] = it->Name;
i++;
}
*numpids = i;
}
@@ -401,14 +341,13 @@ void cPlayback::FindAllSubtitlePids(int *pids, unsigned int *numpids, std::strin
printf("%s:%s\n", FILENAME, __FUNCTION__);
unsigned int i = 0;
if(player) {
std::vector<Track> tracks = player->manager.getSubtitleTracks();
for (std::vector<Track>::iterator it = tracks.begin(); it != tracks.end() && i < *numpids; ++it) {
pids[i] = it->pid;
language[i] = it->Name;
i++;
}
std::vector<Track> tracks = player->manager.getSubtitleTracks();
for (std::vector<Track>::iterator it = tracks.begin(); it != tracks.end() && i < *numpids; ++it) {
pids[i] = it->pid;
language[i] = it->Name;
i++;
}
*numpids = i;
}
@@ -417,17 +356,15 @@ void cPlayback::FindAllTeletextsubtitlePids(int *pids, unsigned int *numpids, st
printf("%s:%s\n", FILENAME, __FUNCTION__);
unsigned int i = 0;
if(player) {
std::vector<Track> tracks = player->manager.getTeletextTracks();
for (std::vector<Track>::iterator it = tracks.begin(); it != tracks.end() && i < *numpids; ++it) {
pids[i] = it->pid;
if (it->type != 2 && it->type != 5) // return subtitles only
continue;
char tmp[80];
snprintf(tmp, sizeof(tmp), "%d %d %s %d %d %d", it->pid, it->pid, it->Name.c_str(), it->type, it->mag, it->page); //FIXME
language[i] = std::string(tmp);
i++;
}
std::vector<Track> tracks = player->manager.getTeletextTracks();
for (std::vector<Track>::iterator it = tracks.begin(); it != tracks.end() && i < *numpids; ++it) {
pids[i] = it->pid;
if (it->type != 2 && it->type != 5) // return subtitles only
continue;
char tmp[80];
snprintf(tmp, sizeof(tmp), "%d %d %s %d %d %d", it->pid, it->pid, it->Name.c_str(), it->type, it->mag, it->page); //FIXME
language[i] = std::string(tmp);
i++;
}
*numpids = i;
}
@@ -435,30 +372,14 @@ void cPlayback::FindAllTeletextsubtitlePids(int *pids, unsigned int *numpids, st
int cPlayback::GetTeletextPid(void)
{
printf("%s:%s\n", FILENAME, __FUNCTION__);
if(player) {
std::vector<Track> tracks = player->manager.getTeletextTracks();
for (std::vector<Track>::iterator it = tracks.begin(); it != tracks.end(); ++it) {
if (it->type == 1)
return it->pid;
}
std::vector<Track> tracks = player->manager.getTeletextTracks();
for (std::vector<Track>::iterator it = tracks.begin(); it != tracks.end(); ++it) {
if (it->type == 1)
return it->pid;
}
return -1;
}
#if 0
/* dummy functions for subtitles */
void cPlayback::FindAllSubs(uint16_t * /*pids*/, unsigned short * /*supp*/, uint16_t *num, std::string * /*lang*/)
{
*num = 0;
}
bool cPlayback::SelectSubtitles(int pid)
{
printf("%s:%s pid %d\n", FILENAME, __func__, pid);
return false;
}
#endif
void cPlayback::GetChapters(std::vector<int> &positions, std::vector<std::string> &titles)
{
player->GetChapters(positions, titles);
@@ -467,8 +388,6 @@ void cPlayback::GetChapters(std::vector<int> &positions, std::vector<std::string
void cPlayback::GetMetadata(std::vector<std::string> &keys, std::vector<std::string> &values)
{
printf("%s:%s\n", FILENAME, __FUNCTION__);
if (!player)
return;
player->input.GetMetadata(keys, values);
}
@@ -476,24 +395,25 @@ cPlayback::cPlayback(int num __attribute__((unused)))
{
printf("%s:%s\n", FILENAME, __FUNCTION__);
playing=false;
player = new Player();
}
cPlayback::~cPlayback()
{
printf("%s:%s\n", FILENAME, __FUNCTION__);
if(player)
delete player;
}
void cPlayback::RequestAbort() {
if (player) {
player->abortRequested = 1;
while (player->isPlaying)
usleep(100000);
}
player->RequestAbort();
while (player->isPlaying)
usleep(100000);
}
bool cPlayback::IsPlaying() {
if (player)
return player->isPlaying;
return player->isPlaying;
return false;
}