mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-libstb-hal.git
synced 2025-08-26 15:02:43 +02:00
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:
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user