Mercurial > mplayer.hg
comparison libmpdemux/demux_mkv.c @ 25654:0190aa38aae2
Init and destroy ass_tracks in demuxer.c based on sh_sub->type value.
author | eugeni |
---|---|
date | Fri, 11 Jan 2008 21:45:15 +0000 |
parents | ec6e8ea85a87 |
children | e98ceb0190c1 |
comparison
equal
deleted
inserted
replaced
25653:ec6e8ea85a87 | 25654:0190aa38aae2 |
---|---|
954 free (track->private_data); | 954 free (track->private_data); |
955 if (track->audio_buf) | 955 if (track->audio_buf) |
956 free (track->audio_buf); | 956 free (track->audio_buf); |
957 if (track->audio_timestamp) | 957 if (track->audio_timestamp) |
958 free (track->audio_timestamp); | 958 free (track->audio_timestamp); |
959 #ifdef USE_ASS | |
960 if (track->sh_sub && track->sh_sub->ass_track) | |
961 ass_free_track (track->sh_sub->ass_track); | |
962 #endif | |
963 demux_mkv_free_encodings(track->encodings, track->num_encodings); | 959 demux_mkv_free_encodings(track->encodings, track->num_encodings); |
964 free(track); | 960 free(track); |
965 } | 961 } |
966 | 962 |
967 static int | 963 static int |
2252 track->private_size = 0; | 2248 track->private_size = 0; |
2253 } | 2249 } |
2254 } | 2250 } |
2255 } | 2251 } |
2256 | 2252 |
2257 /** \brief Parse the private data for SSA/ASS subtitle tracks. | |
2258 | |
2259 This function tries to parse the private data for all SSA/ASS tracks. | |
2260 The private data contains the normal text from the original script, | |
2261 from the start to the beginning of 'Events' section, including '[Events]' line. | |
2262 | |
2263 \param demuxer The generic demuxer. | |
2264 */ | |
2265 #ifdef USE_ASS | |
2266 static void | |
2267 demux_mkv_parse_ass_data (demuxer_t *demuxer) | |
2268 { | |
2269 mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv; | |
2270 mkv_track_t *track; | |
2271 int i; | |
2272 | |
2273 for (i = 0; i < mkv_d->num_tracks; i++) | |
2274 { | |
2275 track = mkv_d->tracks[i]; | |
2276 if (track->type != MATROSKA_TRACK_SUBTITLE || | |
2277 track->subtitle_type == MATROSKA_SUBTYPE_VOBSUB) | |
2278 continue; | |
2279 | |
2280 if (track->subtitle_type == MATROSKA_SUBTYPE_SSA) | |
2281 { | |
2282 track->sh_sub->ass_track = ass_new_track(ass_library); | |
2283 ass_process_codec_private(track->sh_sub->ass_track, track->private_data, track->private_size); | |
2284 } | |
2285 } | |
2286 } | |
2287 #endif | |
2288 | |
2289 static int | 2253 static int |
2290 demux_mkv_open_sub (demuxer_t *demuxer, mkv_track_t *track, int sid) | 2254 demux_mkv_open_sub (demuxer_t *demuxer, mkv_track_t *track, int sid) |
2291 { | 2255 { |
2292 if (track->subtitle_type != MATROSKA_SUBTYPE_UNKNOWN) | 2256 if (track->subtitle_type != MATROSKA_SUBTYPE_UNKNOWN) |
2293 { | 2257 { |
2547 break; | 2511 break; |
2548 } | 2512 } |
2549 } | 2513 } |
2550 | 2514 |
2551 demux_mkv_parse_vobsub_data (demuxer); | 2515 demux_mkv_parse_vobsub_data (demuxer); |
2552 #ifdef USE_ASS | 2516 |
2553 if (ass_enabled) | |
2554 demux_mkv_parse_ass_data (demuxer); | |
2555 #endif | |
2556 /* DO NOT automatically select a subtitle track and behave like DVD */ | 2517 /* DO NOT automatically select a subtitle track and behave like DVD */ |
2557 /* playback: only show subtitles if the user explicitely wants them. */ | 2518 /* playback: only show subtitles if the user explicitely wants them. */ |
2558 track = NULL; | 2519 track = NULL; |
2559 if (demuxer->sub->id >= 0) | 2520 if (demuxer->sub->id >= 0) |
2560 track = demux_mkv_find_track_by_num (mkv_d, demuxer->sub->id, | 2521 track = demux_mkv_find_track_by_num (mkv_d, demuxer->sub->id, |