From 409d10bf2d20e4a70e12e90dba7a22eb7ab91eba Mon Sep 17 00:00:00 2001
From: shawn king <slackerlinux85@gmail.com>
Date: Fri, 7 Jan 2011 13:15:55 +1000
Subject: [PATCH 2/3] Add access to font attachments in avformatdecoder
---
mythtv/external/FFmpeg/libavcodec/myth_utils.c | 4 ++++
mythtv/libs/libmythtv/avformatdecoder.cpp | 22 ++++++++++++++++++++++
mythtv/libs/libmythtv/avformatdecoder.h | 1 +
mythtv/libs/libmythtv/decoderbase.h | 2 ++
4 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/mythtv/external/FFmpeg/libavcodec/myth_utils.c b/mythtv/external/FFmpeg/libavcodec/myth_utils.c
index bcca5d9..dd90f7b 100644
a
|
b
|
const char *ff_codec_id_string(enum CodecID codec_id) |
218 | 218 | |
219 | 219 | case CODEC_ID_MPEG2TS: return "MPEG2TS"; |
220 | 220 | |
| 221 | /* Attachment codecs */ |
| 222 | case CODEC_ID_TTF: return "TTF font"; |
| 223 | |
221 | 224 | case CODEC_ID_PROBE: return "PROBE"; |
222 | 225 | } |
223 | 226 | return "Unknown Codec ID"; |
… |
… |
const char *ff_codec_type_string(enum CodecType codec_type) |
235 | 238 | case CODEC_TYPE_AUDIO: return "Audio"; |
236 | 239 | case CODEC_TYPE_DATA: return "Data"; |
237 | 240 | case CODEC_TYPE_SUBTITLE: return "Subtitle"; |
| 241 | case CODEC_TYPE_ATTACHMENT: return "Attachment"; |
238 | 242 | } |
239 | 243 | return "Invalid Codec Type"; |
240 | 244 | }; |
diff --git a/mythtv/libs/libmythtv/avformatdecoder.cpp b/mythtv/libs/libmythtv/avformatdecoder.cpp
index 621b8bb..4a0a0b6 100644
a
|
b
|
int AvFormatDecoder::ScanStreams(bool novideo) |
1633 | 1633 | bitrate = 0; |
1634 | 1634 | fps = 0; |
1635 | 1635 | |
| 1636 | tracks[kTrackTypeAttachment].clear(); |
1636 | 1637 | tracks[kTrackTypeAudio].clear(); |
1637 | 1638 | tracks[kTrackTypeSubtitle].clear(); |
1638 | 1639 | tracks[kTrackTypeTeletextCaptions].clear(); |
… |
… |
int AvFormatDecoder::ScanStreams(bool novideo) |
1848 | 1849 | .arg(ff_codec_type_string(enc->codec_type))); |
1849 | 1850 | break; |
1850 | 1851 | } |
| 1852 | case CODEC_TYPE_ATTACHMENT: |
| 1853 | { |
| 1854 | if (enc->codec_id == CODEC_ID_TTF) |
| 1855 | tracks[kTrackTypeAttachment].push_back( |
| 1856 | StreamInfo(i, 0, 0, ic->streams[i]->id, 0)); |
| 1857 | bitrate += enc->bit_rate; |
| 1858 | VERBOSE(VB_PLAYBACK, LOC + QString("Attachemnt codec (%1)") |
| 1859 | .arg(ff_codec_type_string(enc->codec_type))); |
| 1860 | break; |
| 1861 | } |
1851 | 1862 | default: |
1852 | 1863 | { |
1853 | 1864 | bitrate += enc->bit_rate; |
… |
… |
QByteArray AvFormatDecoder::GetSubHeader(uint trackNo) const |
3332 | 3343 | ic->streams[tracks[kTrackTypeSubtitle][trackNo].av_stream_index]->codec->subtitle_header_size); |
3333 | 3344 | } |
3334 | 3345 | |
| 3346 | void AvFormatDecoder::GetAttachmentData(uint trackNo, QByteArray &filename, QByteArray &data) |
| 3347 | { |
| 3348 | if (trackNo >= tracks[kTrackTypeAttachment].size()) |
| 3349 | return; |
| 3350 | |
| 3351 | StreamInfo sinfo = tracks[kTrackTypeAttachment][trackNo]; |
| 3352 | |
| 3353 | filename = QByteArray(ic->streams[sinfo.av_stream_index]->filename); |
| 3354 | data = QByteArray((char *)ic->streams[sinfo.av_stream_index]->codec->extradata, ic->streams[sinfo.av_stream_index]->codec->extradata_size); |
| 3355 | } |
| 3356 | |
3335 | 3357 | bool AvFormatDecoder::SetAudioByComponentTag(int tag) |
3336 | 3358 | { |
3337 | 3359 | for (uint i = 0; i < tracks[kTrackTypeAudio].size(); i++) |
diff --git a/mythtv/libs/libmythtv/avformatdecoder.h b/mythtv/libs/libmythtv/avformatdecoder.h
index 0d04a44..5810cc2 100644
a
|
b
|
class AvFormatDecoder : public DecoderBase |
162 | 162 | |
163 | 163 | virtual QString GetXDS(const QString&) const; |
164 | 164 | virtual QByteArray GetSubHeader(uint trackNo) const; |
| 165 | virtual void GetAttachmentData(uint trackNo, QByteArray &filename, QByteArray &data); |
165 | 166 | |
166 | 167 | // MHEG stuff |
167 | 168 | virtual bool SetAudioByComponentTag(int tag); |
diff --git a/mythtv/libs/libmythtv/decoderbase.h b/mythtv/libs/libmythtv/decoderbase.h
index 3f8061a..59430d2 100644
a
|
b
|
typedef enum TrackTypes |
31 | 31 | kTrackTypeTeletextCaptions, |
32 | 32 | kTrackTypeTeletextMenu, |
33 | 33 | kTrackTypeRawText, |
| 34 | kTrackTypeAttachment, |
34 | 35 | kTrackTypeCount, |
35 | 36 | |
36 | 37 | kTrackTypeTextSubtitle, |
… |
… |
class DecoderBase |
191 | 192 | |
192 | 193 | virtual QString GetXDS(const QString&) const { return QString::null; } |
193 | 194 | virtual QByteArray GetSubHeader(uint trackNo) const { return QByteArray(); } |
| 195 | virtual void GetAttachmentData(uint trackNo, QByteArray &filename, QByteArray &data) { return; } |
194 | 196 | |
195 | 197 | // MHEG/MHI stuff |
196 | 198 | virtual bool SetAudioByComponentTag(int) { return false; } |