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,