From c89671ce05cbbfe1b46f361e9083bd66f611afac Mon Sep 17 00:00:00 2001 From: martii Date: Fri, 11 Apr 2014 14:11:36 +0200 Subject: [PATCH] libeplayer3: ffmpeg now provides teletext details in codec->extradata Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/9c0088b6d5018aa5921f05e407b48d1deef4cb38 Author: martii Date: 2014-04-11 (Fri, 11 Apr 2014) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libeplayer3/input.cpp | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/libeplayer3/input.cpp b/libeplayer3/input.cpp index 1033c4f..afeb600 100644 --- a/libeplayer3/input.cpp +++ b/libeplayer3/input.cpp @@ -483,21 +483,18 @@ bool Input::UpdateTracks() } case AVMEDIA_TYPE_SUBTITLE: { if (stream->codec->codec_id == AV_CODEC_ID_DVB_TELETEXT) { - 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) { - char language[strlen(t->value)]; - if (4 == sscanf(t->value, "%*d %s %d %d %d", language, &track.type, &track.mag, &track.page)) { - track.Name = language; - player->manager.addTeletextTrack(track); - } + std::string l = lang ? lang->value : ""; + uint8_t *data = stream->codec->extradata; + int size = stream->codec->extradata_size; + if (size > 0 && 2 * size - 1 == l.length()) { + for (unsigned i = 0; i < size; i += 2) { + track.Name = l.substr(i * 2, 3); + track.type = data[i] >> 3; + track.mag = data[i] & 7; + track.page = data[i + 1]; + player->manager.addTeletextTrack(track); } - i++; - } while (t); + } } else { if (!stream->codec->codec) { stream->codec->codec = avcodec_find_decoder(stream->codec->codec_id);