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