From 70a2f5bca0f2e56e595526c656da636d0fa2f5e5 Mon Sep 17 00:00:00 2001 From: Stefan Seyfried Date: Sun, 16 Jun 2013 21:42:42 +0200 Subject: [PATCH] cPlayback: add new API functions for DVD chapter/subtitles right now these are mostly dummies... --- azbox/playback.cpp | 12 ++++++++++-- azbox/playback.h | 7 ++++--- generic-pc/playback.cpp | 14 +++++++++++++- generic-pc/playback.h | 6 ++++-- libspark/playback_libeplayer3.cpp | 19 +++++++++++++++++++ libspark/playback_libeplayer3.h | 4 ++++ libtriple/playback_td.cpp | 18 ++++++++++++++++++ libtriple/playback_td.h | 3 +++ 8 files changed, 75 insertions(+), 8 deletions(-) diff --git a/azbox/playback.cpp b/azbox/playback.cpp index 4523192..1e656f3 100644 --- a/azbox/playback.cpp +++ b/azbox/playback.cpp @@ -336,7 +336,7 @@ bool cPlayback::SetAPid(unsigned short pid, int /*ac3*/) return true; } -bool cPlayback::SetSPid(int pid) +bool cPlayback::SelectSubtitles(int pid) { lt_info("%s: pid %i\n", __func__, pid); if (pid != subpid) @@ -464,7 +464,7 @@ void cPlayback::FindAllPids(uint16_t *apids, unsigned short *ac3flags, uint16_t } } -void cPlayback::FindAllSPids(int *spids, uint16_t *numpids, std::string *language) +void cPlayback::FindAllSubs(uint16_t *spids, unsigned short *supported, uint16_t *numpids, std::string *language) { lt_info("%s\n", __func__); char buf[32]; @@ -487,6 +487,7 @@ void cPlayback::FindAllSPids(int *spids, uint16_t *numpids, std::string *languag spu_lang[20] = '\0'; spids[sid] = atoi(streamidstring); language[sid] = spu_lang; + supported[sid] = 1; lt_info("%s: #%d apid:%d lang: %s\n", __func__, sid, spids[sid], spu_lang); } } @@ -496,6 +497,13 @@ void cPlayback::FindAllSPids(int *spids, uint16_t *numpids, std::string *languag language[spu_count] = "Disable"; } +/* DVD support is not yet ready... */ +void cPlayback::GetChapters(std::vector &positions, std::vector &titles) +{ + positions.clear(); + titles.clear(); +} + cPlayback::cPlayback(int /*num*/) { lt_info("%s: constructor\n", __func__); diff --git a/azbox/playback.h b/azbox/playback.h index d75a76f..c56c69e 100644 --- a/azbox/playback.h +++ b/azbox/playback.h @@ -3,6 +3,7 @@ #include #include +#include typedef enum { PLAYMODE_TS = 0, @@ -42,9 +43,9 @@ class cPlayback bool GetPosition(int &position, int &duration); /* pos: current time in ms, dur: file length in ms */ bool SetPosition(int position, bool absolute = false); /* position: jump in ms */ void FindAllPids(uint16_t *apids, unsigned short *ac3flags, uint16_t *numpida, std::string *language); - // AZbox specific - void FindAllSPids(int *spids, uint16_t *numpids, std::string *language); - bool SetSPid(int pid); + void FindAllSubs(uint16_t *pids, unsigned short *supported, uint16_t *numpida, std::string *language); + bool SelectSubtitles(int pid); + void GetChapters(std::vector &positions, std::vector &titles); #if 0 // Functions that are not used by movieplayer.cpp: bool Stop(void); diff --git a/generic-pc/playback.cpp b/generic-pc/playback.cpp index 0aa2a75..bea2349 100644 --- a/generic-pc/playback.cpp +++ b/generic-pc/playback.cpp @@ -26,7 +26,7 @@ bool cPlayback::SetAPid(unsigned short pid, bool /*ac3*/) return true; } -bool cPlayback::SetSPid(int pid) +bool cPlayback::SelectSubtitles(int pid) { printf("%s:%s pid %i\n", FILENAME, __func__, pid); return true; @@ -63,6 +63,18 @@ void cPlayback::FindAllPids(uint16_t *, unsigned short *, uint16_t *numpida, std *numpida = 0; } +void cPlayback::FindAllSubs(uint16_t *, unsigned short *, uint16_t *numpida, std::string *) +{ + printf("%s:%s\n", FILENAME, __func__); + *numpida = 0; +} + +void cPlayback::GetChapters(std::vector &positions, std::vector &titles) +{ + positions.clear(); + titles.clear(); +} + cPlayback::cPlayback(int /*num*/) { printf("%s:%s\n", FILENAME, __func__); diff --git a/generic-pc/playback.h b/generic-pc/playback.h index 862f444..dbcc1fe 100644 --- a/generic-pc/playback.h +++ b/generic-pc/playback.h @@ -3,6 +3,7 @@ #include #include +#include typedef enum { PLAYMODE_TS = 0, @@ -19,13 +20,14 @@ class cPlayback bool Start(char * filename, unsigned short vpid, int vtype, unsigned short apid, bool ac3, int duration); bool Stop(void); bool SetAPid(unsigned short pid, bool ac3); - bool SetSPid(int pid); bool SetSpeed(int speed); bool GetSpeed(int &speed) const; bool GetPosition(int &position, int &duration); bool SetPosition(int position, bool absolute = false); void FindAllPids(uint16_t *apids, unsigned short *ac3flags, uint16_t *numpida, std::string *language); - void FindAllSPids(int *spids, uint16_t *numpids, std::string *language); + void FindAllSubs(uint16_t *pids, unsigned short *supported, uint16_t *numpida, std::string *language); + bool SelectSubtitles(int pid); + void GetChapters(std::vector &positions, std::vector &titles); // cPlayback(int num = 0); ~cPlayback(); diff --git a/libspark/playback_libeplayer3.cpp b/libspark/playback_libeplayer3.cpp index bedf851..f21bd96 100644 --- a/libspark/playback_libeplayer3.cpp +++ b/libspark/playback_libeplayer3.cpp @@ -459,6 +459,25 @@ void cPlayback::FindAllPids(uint16_t *apids, unsigned short *ac3flags, uint16_t } } +/* 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; +} + +/* another dummy function for DVD playback(?) */ +void cPlayback::GetChapters(std::vector &positions, std::vector &titles) +{ + positions.clear(); + titles.clear(); +} + // cPlayback::cPlayback(int num) { diff --git a/libspark/playback_libeplayer3.h b/libspark/playback_libeplayer3.h index d709abb..05c0b6a 100644 --- a/libspark/playback_libeplayer3.h +++ b/libspark/playback_libeplayer3.h @@ -2,6 +2,7 @@ #define __HAL_PLAYBACK_H #include +#include typedef enum { PLAYMODE_TS = 0, @@ -30,6 +31,9 @@ class cPlayback bool GetPosition(int &position, int &duration); bool SetPosition(int position, bool absolute = false); void FindAllPids(uint16_t *apids, unsigned short *ac3flags, uint16_t *numpida, std::string *language); + void FindAllSubs(uint16_t *pids, unsigned short *supported, uint16_t *numpida, std::string *language); + bool SelectSubtitles(int pid); + void GetChapters(std::vector &positions, std::vector &titles); #if 0 // Functions that are not used by movieplayer.cpp: bool GetOffset(off64_t &offset); diff --git a/libtriple/playback_td.cpp b/libtriple/playback_td.cpp index a1c02e7..2fee33a 100644 --- a/libtriple/playback_td.cpp +++ b/libtriple/playback_td.cpp @@ -576,6 +576,24 @@ void cPlayback::FindAllPids(uint16_t *apids, unsigned short *ac3flags, uint16_t *numpida = i; } +/* it is unlikely that subtitle support will be implemented soon */ +void cPlayback::FindAllSubs(uint16_t *, unsigned short *, uint16_t *num, std::string *) +{ + *num = 0; +} + +bool cPlayback::SelectSubtitles(int) +{ + return false; +} + +/* DVD support is also unlikely... */ +void cPlayback::GetChapters(std::vector &positions, std::vector &titles) +{ + positions.clear(); + titles.clear(); +} + off_t cPlayback::seek_to_pts(int64_t pts) { off_t newpos = curr_pos; diff --git a/libtriple/playback_td.h b/libtriple/playback_td.h index dcb78e3..51d5ac1 100644 --- a/libtriple/playback_td.h +++ b/libtriple/playback_td.h @@ -109,6 +109,9 @@ class cPlayback bool GetPosition(int &position, int &duration); /* pos: current time in ms, dur: file length in ms */ bool SetPosition(int position, bool absolute = false); /* position: jump in ms */ void FindAllPids(uint16_t *apids, unsigned short *ac3flags, uint16_t *numpida, std::string *language); + void FindAllSubs(uint16_t *pids, unsigned short *supported, uint16_t *numpida, std::string *language); + bool SelectSubtitles(int pid); + void GetChapters(std::vector &positions, std::vector &titles); #if 0 // Functions that are not used by movieplayer.cpp: bool Stop(void);