mirror of
https://github.com/tuxbox-neutrino/libstb-hal.git
synced 2025-08-26 15:02:58 +02:00
teletext handling changes
This commit is contained in:
@@ -1801,10 +1801,14 @@ int container_ffmpeg_update_tracks(Context_t *context, char *filename)
|
||||
|
||||
lang = av_dict_get(stream->metadata, "language", NULL, 0);
|
||||
|
||||
#ifdef MARTII
|
||||
track.Name = lang ? lang->value : "und";
|
||||
#else
|
||||
if (lang)
|
||||
track.Name = strdup(lang->value);
|
||||
else
|
||||
track.Name = strdup("und");
|
||||
#endif
|
||||
|
||||
ffmpeg_printf(10, "Language %s\n", track.Name);
|
||||
|
||||
@@ -2020,10 +2024,14 @@ int container_ffmpeg_update_tracks(Context_t *context, char *filename)
|
||||
|
||||
lang = av_dict_get(stream->metadata, "language", NULL, 0);
|
||||
|
||||
#ifdef MARTII
|
||||
track.Name = lang ? lang->value : "und";
|
||||
#else
|
||||
if (lang)
|
||||
track.Name = strdup(lang->value);
|
||||
else
|
||||
track.Name = strdup("und");
|
||||
#endif
|
||||
|
||||
ffmpeg_printf(10, "Language %s\n", track.Name);
|
||||
|
||||
@@ -2055,14 +2063,29 @@ int container_ffmpeg_update_tracks(Context_t *context, char *filename)
|
||||
track.duration = (double) stream->duration * av_q2d(stream->time_base) * 1000.0;
|
||||
}
|
||||
|
||||
#ifndef MARTII
|
||||
if (track.Name)
|
||||
#endif
|
||||
ffmpeg_printf(10, "FOUND SUBTITLE %s\n", track.Name);
|
||||
#ifdef MARTII
|
||||
if (stream->codec->codec_id == CODEC_ID_DVB_TELETEXT && context->manager->teletext) {
|
||||
if (context->manager->teletext->Command(context, MANAGER_ADD, &track) < 0) {
|
||||
ffmpeg_err("failed to add teletext track %d\n", n);
|
||||
}
|
||||
ffmpeg_printf(10, "dvb_teletext\n");
|
||||
int i = 0;
|
||||
AVDictionaryEntry *t = NULL;
|
||||
do {
|
||||
char tmp[30];
|
||||
snprintf(tmp, sizeof(tmp), "teletext_%d", i);
|
||||
t = av_dict_get(stream->metadata, tmp, NULL, 0);
|
||||
if (t) {
|
||||
track.Name = t->value;
|
||||
if (context->manager->teletext->Command(context, MANAGER_ADD, &track) < 0)
|
||||
ffmpeg_err("failed to add teletext track %d\n", n);
|
||||
}
|
||||
i++;
|
||||
} while (t);
|
||||
} else if (stream->codec->codec_id == CODEC_ID_DVB_SUBTITLE && context->manager->dvbsubtitle) {
|
||||
ffmpeg_printf(10, "dvb_subtitle\n");
|
||||
lang = av_dict_get(stream->metadata, "language", NULL, 0);
|
||||
if (context->manager->dvbsubtitle->Command(context, MANAGER_ADD, &track) < 0) {
|
||||
ffmpeg_err("failed to add dvbsubtitle track %d\n", n);
|
||||
}
|
||||
|
@@ -115,7 +115,7 @@ static char ** ManagerList(Context_t *context) {
|
||||
teletext_mgr_printf(10, "%s::%s\n", FILENAME, __FUNCTION__);
|
||||
|
||||
if (Tracks != NULL) {
|
||||
|
||||
char tmp[30];
|
||||
tracklist = malloc(sizeof(char *) * ((TrackCount*2) + 1));
|
||||
|
||||
if (tracklist == NULL)
|
||||
|
@@ -634,6 +634,35 @@ void cPlayback::FindAllDvbsubtitlePids(uint16_t *pids, uint16_t *numpids, std::s
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cPlayback::FindAllTeletextsubtitlePids(uint16_t *pids, uint16_t *numpids, std::string *language)
|
||||
{
|
||||
printf("%s:%s\n", FILENAME, __FUNCTION__);
|
||||
if(player && player->manager && player->manager->teletext) {
|
||||
char ** TrackList = NULL;
|
||||
player->manager->teletext->Command(player, MANAGER_LIST, &TrackList);
|
||||
if (TrackList != NULL) {
|
||||
printf("Teletext List\n");
|
||||
int i = 0,j=0;
|
||||
for (i = 0,j=0; TrackList[i] != NULL; i+=2) {
|
||||
int type = 0;
|
||||
printf("\t%s - %s\n", TrackList[i], TrackList[i+1]);
|
||||
if (1 != sscanf(TrackList[i], "%*d %*s %d %*d %*d", &type))
|
||||
continue;
|
||||
if (type != 2 && type != 5) // return subtitles only
|
||||
continue;
|
||||
pids[j]=j;
|
||||
// atUnknown, atMPEG, atMP3, atAC3, atDTS, atAAC, atPCM, atOGG, atFLAC
|
||||
language[j]=TrackList[i];
|
||||
free(TrackList[i]);
|
||||
free(TrackList[i+1]);
|
||||
j++;
|
||||
}
|
||||
free(TrackList);
|
||||
*numpids=j;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
//
|
||||
|
@@ -57,6 +57,8 @@ class cPlayback
|
||||
#ifdef MARTII
|
||||
void FindAllSubtitlePids(uint16_t *pids, uint16_t *numpids, std::string *language);
|
||||
void FindAllDvbsubtitlePids(uint16_t *pids, uint16_t *numpids, std::string *language);
|
||||
void FindAllTeletextsubtitlePids(uint16_t *pids, uint16_t *numpidt, std::string *tlanguage);
|
||||
|
||||
void RequestAbort(void);
|
||||
#endif
|
||||
#if 0
|
||||
|
Reference in New Issue
Block a user