Mercurial > mplayer.hg
comparison libmpdemux/demux_mkv.c @ 20872:a8b42366e68a
Make subtitle stream handling more similar to audio and video streams.
author | reimar |
---|---|
date | Mon, 13 Nov 2006 16:15:23 +0000 |
parents | 9f97c2b0340f |
children | 94b1a797661f |
comparison
equal
deleted
inserted
replaced
20871:a479262a8abf | 20872:a8b42366e68a |
---|---|
1764 | 1764 |
1765 static int | 1765 static int |
1766 demux_mkv_open_video (demuxer_t *demuxer, mkv_track_t *track, int vid); | 1766 demux_mkv_open_video (demuxer_t *demuxer, mkv_track_t *track, int vid); |
1767 static int | 1767 static int |
1768 demux_mkv_open_audio (demuxer_t *demuxer, mkv_track_t *track, int aid); | 1768 demux_mkv_open_audio (demuxer_t *demuxer, mkv_track_t *track, int aid); |
1769 static int | |
1770 demux_mkv_open_sub (demuxer_t *demuxer, mkv_track_t *track, int sid); | |
1769 | 1771 |
1770 static void | 1772 static void |
1771 display_create_tracks (demuxer_t *demuxer) | 1773 display_create_tracks (demuxer_t *demuxer) |
1772 { | 1774 { |
1773 mkv_demuxer_t *mkv_d = (mkv_demuxer_t *)demuxer->priv; | 1775 mkv_demuxer_t *mkv_d = (mkv_demuxer_t *)demuxer->priv; |
1794 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AID_%d_LANG=%s\n", aid, mkv_d->tracks[i]->language); | 1796 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AID_%d_LANG=%s\n", aid, mkv_d->tracks[i]->language); |
1795 sprintf (str, "-aid %u, -alang %.5s",aid++,mkv_d->tracks[i]->language); | 1797 sprintf (str, "-aid %u, -alang %.5s",aid++,mkv_d->tracks[i]->language); |
1796 break; | 1798 break; |
1797 case MATROSKA_TRACK_SUBTITLE: | 1799 case MATROSKA_TRACK_SUBTITLE: |
1798 type = "subtitles"; | 1800 type = "subtitles"; |
1799 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SUBTITLE_ID=%d\n", sid); | 1801 demux_mkv_open_sub(demuxer, mkv_d->tracks[i], sid); |
1800 if (mkv_d->tracks[i]->name) | 1802 if (mkv_d->tracks[i]->name) |
1801 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SID_%d_NAME=%s\n", sid, mkv_d->tracks[i]->name); | 1803 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SID_%d_NAME=%s\n", sid, mkv_d->tracks[i]->name); |
1802 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SID_%d_LANG=%s\n", sid, mkv_d->tracks[i]->language); | 1804 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SID_%d_LANG=%s\n", sid, mkv_d->tracks[i]->language); |
1803 sprintf (str, "-sid %u, -slang %.5s",sid++,mkv_d->tracks[i]->language); | 1805 sprintf (str, "-sid %u, -slang %.5s",sid++,mkv_d->tracks[i]->language); |
1804 break; | 1806 break; |
2406 } | 2408 } |
2407 } | 2409 } |
2408 #endif | 2410 #endif |
2409 | 2411 |
2410 static int | 2412 static int |
2411 demux_mkv_open_sub (demuxer_t *demuxer, mkv_track_t *track) | 2413 demux_mkv_open_sub (demuxer_t *demuxer, mkv_track_t *track, int sid) |
2412 { | 2414 { |
2413 if (track->subtitle_type != MATROSKA_SUBTYPE_UNKNOWN) | 2415 if (track->subtitle_type != MATROSKA_SUBTYPE_UNKNOWN) |
2414 { | 2416 { |
2417 sh_sub_t *sh = new_sh_sub_sid(demuxer, track->tnum, sid); | |
2415 if ((track->subtitle_type == MATROSKA_SUBTYPE_VOBSUB) || | 2418 if ((track->subtitle_type == MATROSKA_SUBTYPE_VOBSUB) || |
2416 (track->subtitle_type == MATROSKA_SUBTYPE_SSA)) | 2419 (track->subtitle_type == MATROSKA_SUBTYPE_SSA)) |
2417 { | 2420 { |
2418 if (track->private_data != NULL) | 2421 if (track->private_data != NULL) |
2419 { | 2422 { |
2420 demuxer->sub->sh = malloc(sizeof(sh_sub_t)); | 2423 if (sh) |
2421 if (demuxer->sub->sh != NULL) | 2424 memcpy(sh, &track->sh_sub, sizeof(sh_sub_t)); |
2422 memcpy(demuxer->sub->sh, &track->sh_sub, sizeof(sh_sub_t)); | |
2423 } | 2425 } |
2424 } | 2426 } |
2425 } | 2427 } |
2426 else | 2428 else |
2427 { | 2429 { |
2678 MATROSKA_TRACK_SUBTITLE); | 2680 MATROSKA_TRACK_SUBTITLE); |
2679 else if (dvdsub_lang != NULL) | 2681 else if (dvdsub_lang != NULL) |
2680 track = demux_mkv_find_track_by_language (mkv_d, dvdsub_lang, | 2682 track = demux_mkv_find_track_by_language (mkv_d, dvdsub_lang, |
2681 MATROSKA_TRACK_SUBTITLE); | 2683 MATROSKA_TRACK_SUBTITLE); |
2682 | 2684 |
2683 if (track && !demux_mkv_open_sub (demuxer, track)) | 2685 if (track) |
2684 { | 2686 { |
2685 mp_msg (MSGT_DEMUX, MSGL_INFO, | 2687 mp_msg (MSGT_DEMUX, MSGL_INFO, |
2686 MSGTR_MPDEMUX_MKV_WillDisplaySubtitleTrack, track->tnum); | 2688 MSGTR_MPDEMUX_MKV_WillDisplaySubtitleTrack, track->tnum); |
2687 dvdsub_id = demux_mkv_reverse_id(mkv_d, track->tnum, MATROSKA_TRACK_SUBTITLE); | 2689 dvdsub_id = demux_mkv_reverse_id(mkv_d, track->tnum, MATROSKA_TRACK_SUBTITLE); |
2688 demuxer->sub->id = track->tnum; | 2690 demuxer->sub->id = track->tnum; |