X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb%2Fsubtitle.cpp;h=eae7205619421c368d538d2e0aeeb3d4b05e183f;hp=5510997b7e78a135f852e85adc271d7b956d8c9c;hb=3ef876533bacd91aee5f91800d10bc105726dabc;hpb=0adf3ed39b6fe254154e3b4c38feea616e5aece1 diff --git a/lib/dvb/subtitle.cpp b/lib/dvb/subtitle.cpp index 5510997..eae7205 100644 --- a/lib/dvb/subtitle.cpp +++ b/lib/dvb/subtitle.cpp @@ -33,7 +33,7 @@ int bitstream_get(struct bitstream *bit) return val; } -static int extract_pts(pts_t &pts, const __u8 *pkt) +static int extract_pts(pts_t &pts, __u8 *pkt) { pkt += 7; int flags = *pkt++; @@ -54,7 +54,7 @@ static int extract_pts(pts_t &pts, const __u8 *pkt) return -1; } -void eDVBSubtitleParser::subtitle_process_line(struct subtitle_page *page, int object_id, int line, const __u8 *data, int len) +void eDVBSubtitleParser::subtitle_process_line(struct subtitle_page *page, int object_id, int line, __u8 *data, int len) { struct subtitle_region *region = page->regions; // eDebug("line for %d:%d", page->page_id, object_id); @@ -88,7 +88,7 @@ void eDVBSubtitleParser::subtitle_process_line(struct subtitle_page *page, int o } } -int eDVBSubtitleParser::subtitle_process_pixel_data(struct subtitle_page *page, int object_id, int *linenr, int *linep, const __u8 *data) +int eDVBSubtitleParser::subtitle_process_pixel_data(struct subtitle_page *page, int object_id, int *linenr, int *linep, __u8 *data) { int data_type = *data++; static __u8 line[720]; @@ -137,7 +137,7 @@ int eDVBSubtitleParser::subtitle_process_pixel_data(struct subtitle_page *page, { col = 0; len = 1; - } else if (code&2) + } else if (code&2) { if (code&1) len = 3 + 4 + bitstream_get(&bit); @@ -272,7 +272,7 @@ int eDVBSubtitleParser::subtitle_process_pixel_data(struct subtitle_page *page, return 0; } -int eDVBSubtitleParser::subtitle_process_segment(const __u8 *segment) +int eDVBSubtitleParser::subtitle_process_segment(__u8 *segment) { int segment_type, page_id, segment_length, processed_length; if (*segment++ != 0x0F) @@ -288,11 +288,11 @@ int eDVBSubtitleParser::subtitle_process_segment(const __u8 *segment) if (segment_type == 0xFF) return segment_length + 6; // //eDebug("have %d bytes of segment data", segment_length); - + // //eDebug("page_id %d, segtype %02x", page_id, segment_type); - + struct subtitle_page *page, **ppage; - + page = this->pages; ppage = &this->pages; while (page) @@ -726,8 +726,9 @@ int eDVBSubtitleParser::subtitle_process_segment(const __u8 *segment) return segment_length + 6; } -void eDVBSubtitleParser::subtitle_process_pes(const __u8 *pkt, int len) +void eDVBSubtitleParser::subtitle_process_pes(__u8 *pkt, int len) { + eDebug("subtitle_process_pes"); if (!extract_pts(show_time, pkt)) { pkt += 6; len -= 6; @@ -970,6 +971,7 @@ void eDVBSubtitleParser::subtitle_redraw(int page_id) // TODO fill region->surface->clut !!!!! } // TODO Blit Region Pixmap !!! + eDebug("blit region"); } else eDebug("region not found"); @@ -981,16 +983,33 @@ void eDVBSubtitleParser::subtitle_redraw(int page_id) DEFINE_REF(eDVBSubtitleParser); eDVBSubtitleParser::eDVBSubtitleParser(iDVBDemux *demux) + :pages(0) { setStreamID(0xBD); if (demux->createPESReader(eApp, m_pes_reader)) eDebug("failed to create dvb subtitle PES reader!"); else - m_pes_reader->connectRead(slot(*this, &eDVBSubtitleParser::subtitle_process_pes), m_read_connection); + m_pes_reader->connectRead(slot(*this, &eDVBSubtitleParser::processData), m_read_connection); } eDVBSubtitleParser::~eDVBSubtitleParser() { subtitle_reset(); } + +int eDVBSubtitleParser::start(int pid) +{ +#if 0 + eDebug("eDVBSubtitleParser::start(%04x)", pid); + if (m_pes_reader) + return m_pes_reader->start(pid); + else + return -1; +#endif +} + +void eDVBSubtitleParser::connectNewRegion(const Slot1 &slot, ePtr &connection) +{ + connection = new eConnection(this, m_new_subtitle_region.connect(slot)); +}