diff --git a/libeplayer3/container/container_ffmpeg.c b/libeplayer3/container/container_ffmpeg.c index f4772b6..efad0a0 100644 --- a/libeplayer3/container/container_ffmpeg.c +++ b/libeplayer3/container/container_ffmpeg.c @@ -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); } diff --git a/libeplayer3/manager/teletext.c b/libeplayer3/manager/teletext.c index 3955807..e36820d 100644 --- a/libeplayer3/manager/teletext.c +++ b/libeplayer3/manager/teletext.c @@ -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) diff --git a/libspark/playback_libeplayer3.cpp b/libspark/playback_libeplayer3.cpp index 88257bc..f5a630e 100644 --- a/libspark/playback_libeplayer3.cpp +++ b/libspark/playback_libeplayer3.cpp @@ -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 // diff --git a/libspark/playback_libeplayer3.h b/libspark/playback_libeplayer3.h index f8e98c0..631f0eb 100644 --- a/libspark/playback_libeplayer3.h +++ b/libspark/playback_libeplayer3.h @@ -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