summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-11-28 18:02:50 +0000
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-12-16 05:10:18 +0200
commit831395e79bc9dd225704f6451ae7ccb387955540 (patch)
tree2c2800de59e9e52dc2dbbaa7b0b2b350eb7db423
parentce74aa0e963cd0451efbc97d02dd423f9a1dbd45 (diff)
downloadmpv-831395e79bc9dd225704f6451ae7ccb387955540.tar.bz2
mpv-831395e79bc9dd225704f6451ae7ccb387955540.tar.xz
demux-ts: fix TS files with MP4 ES AAC descriptor
Fix TS files with MP4 ES AAC descriptor to be correctly recognized as AAC and not AAC in LATM. This fixes playback of http://samples.mplayerhq.hu/A-codecs/AAC/freetv_aac_latm.ts, actual LATM samples seem unaffected. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32667 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r--libmpdemux/demux_ts.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/libmpdemux/demux_ts.c b/libmpdemux/demux_ts.c
index 3eb108913a..2c8d73ab2c 100644
--- a/libmpdemux/demux_ts.c
+++ b/libmpdemux/demux_ts.c
@@ -2349,8 +2349,9 @@ static int parse_descriptors(struct pmt_es_t *es, uint8_t *ptr)
mp_msg(MSGT_DEMUX, MSGL_DBG2, "FORMAT %s\n", es->format_descriptor);
}
}
- else if(ptr[j] == 0x1e)
+ else if(ptr[j] == 0x1e || ptr[j] == 0x1f)
{
+ // 0x1f is FMC, but currently it is easiest to handle them the same way
es->mp4_es_id = (ptr[j+2] << 8) | ptr[j+3];
mp_msg(MSGT_DEMUX, MSGL_V, "SL Descriptor: ES_ID: %d(%x), pid: %d\n", es->mp4_es_id, es->mp4_es_id, es->pid);
}
@@ -2402,6 +2403,7 @@ static int parse_pmt(ts_priv_t * priv, uint16_t progid, uint16_t pid, int is_sta
struct pmt_es_t *tmp_es;
ts_section_t *section;
ES_stream_t *tss;
+ int i;
idx = progid_idx_in_pmt(priv, progid);
@@ -2524,6 +2526,10 @@ static int parse_pmt(ts_priv_t * priv, uint16_t progid, uint16_t pid, int is_sta
break;
case 0x11:
pmt->es[idx].type = AUDIO_AAC_LATM;
+ for (i = 0; i < pmt->mp4es_cnt; i++)
+ if (pmt->mp4es[i].id == pmt->es[idx].mp4_es_id &&
+ pmt->mp4es[i].decoder.object_type == AUDIO_AAC)
+ pmt->es[idx].type = AUDIO_AAC;
break;
case 0x1b:
pmt->es[idx].type = VIDEO_H264;