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;