Mercurial > mplayer.hg
comparison libmpdemux/demux_mkv.c @ 25655:e98ceb0190c1
Move all subtitle parsing from mkv demuxer to update_subtitles().
author | eugeni |
---|---|
date | Fri, 11 Jan 2008 21:45:17 +0000 |
parents | 0190aa38aae2 |
children | 0d0c48ecba90 |
comparison
equal
deleted
inserted
replaced
25654:0190aa38aae2 | 25655:e98ceb0190c1 |
---|---|
2700 static void | 2700 static void |
2701 handle_subtitles(demuxer_t *demuxer, mkv_track_t *track, char *block, | 2701 handle_subtitles(demuxer_t *demuxer, mkv_track_t *track, char *block, |
2702 int64_t size, uint64_t block_duration, uint64_t timecode) | 2702 int64_t size, uint64_t block_duration, uint64_t timecode) |
2703 { | 2703 { |
2704 demux_packet_t *dp; | 2704 demux_packet_t *dp; |
2705 char *ptr1; | |
2706 int i; | |
2707 | 2705 |
2708 if (block_duration == 0) | 2706 if (block_duration == 0) |
2709 { | 2707 { |
2710 mp_msg (MSGT_DEMUX, MSGL_WARN, | 2708 mp_msg (MSGT_DEMUX, MSGL_WARN, |
2711 MSGTR_MPDEMUX_MKV_NoBlockDurationForSubtitleTrackFound); | 2709 MSGTR_MPDEMUX_MKV_NoBlockDurationForSubtitleTrackFound); |
2712 return; | 2710 return; |
2713 } | 2711 } |
2714 | 2712 |
2715 #ifdef USE_ASS | |
2716 if (ass_enabled && track->subtitle_type == MATROSKA_SUBTYPE_SSA) { | |
2717 ass_process_chunk(track->sh_sub->ass_track, block, size, (long long)timecode, (long long)block_duration); | |
2718 return; | |
2719 } | |
2720 #endif | |
2721 | |
2722 ptr1 = block; | |
2723 if (track->subtitle_type == MATROSKA_SUBTYPE_SSA) | |
2724 { | |
2725 /* Find text section. */ | |
2726 for (i=0; i < 8 && *ptr1 != '\0'; ptr1++) | |
2727 if (*ptr1 == ',') | |
2728 i++; | |
2729 if (*ptr1 == '\0') /* Broken line? */ | |
2730 return; | |
2731 } | |
2732 | |
2733 sub_utf8 = 1; | 2713 sub_utf8 = 1; |
2734 size -= ptr1 - block; | |
2735 dp = new_demux_packet(size); | 2714 dp = new_demux_packet(size); |
2736 memcpy(dp->buffer, ptr1, size); | 2715 memcpy(dp->buffer, block, size); |
2737 dp->pts = timecode / 1000.0f; | 2716 dp->pts = timecode / 1000.0f; |
2738 dp->endpts = (timecode + block_duration) / 1000.0f; | 2717 dp->endpts = (timecode + block_duration) / 1000.0f; |
2739 ds_add_packet(demuxer->sub, dp); | 2718 ds_add_packet(demuxer->sub, dp); |
2740 } | 2719 } |
2741 | 2720 |