int gc_decode_ts(GRAPHICS_CONTROLLER *gc, uint16_t pid, uint8_t *block, unsigned num_blocks, int64_t stc) { if (!gc) { GC_TRACE("gc_decode_ts(): no graphics controller\n"); return -1; } if (pid >= 0x1400 && pid < 0x1500) { /* IG stream */ if (!gc->igp) { gc->igp = graphics_processor_init(); } bd_mutex_lock(&gc->mutex); if (!graphics_processor_decode_ts(gc->igp, &gc->igs, pid, block, num_blocks, stc)) { /* no new complete display set */ bd_mutex_unlock(&gc->mutex); return 0; } if (!gc->igs || !gc->igs->complete) { bd_mutex_unlock(&gc->mutex); return 0; } bd_mutex_unlock(&gc->mutex); return 1; } else if (pid >= 0x1200 && pid < 0x1300) { /* PG stream */ if (!gc->pgp) { gc->pgp = graphics_processor_init(); } graphics_processor_decode_ts(gc->pgp, &gc->pgs, pid, block, num_blocks, stc); if (!gc->pgs || !gc->pgs->complete) { return 0; } return 1; } return -1; }
void gc_decode_ts(GRAPHICS_CONTROLLER *gc, uint16_t pid, uint8_t *block, unsigned num_blocks, int64_t stc) { if (!gc) { TRACE("gc_decode_ts(): no graphics controller\n"); return; } if (pid >= 0x1400 && pid < 0x1500) { /* IG stream */ if (!gc->igp) { gc->igp = graphics_processor_init(); } bd_mutex_lock(&gc->mutex); graphics_processor_decode_ts(gc->igp, &gc->igs, pid, block, num_blocks, stc); if (!gc->igs || !gc->igs->complete) { bd_mutex_unlock(&gc->mutex); return; } bd_psr_write(gc->regs, PSR_MENU_PAGE_ID, 0); gc->ig_drawn = 0; gc->popup_visible = 0; _gc_clear_osd(gc, 1); _reset_enabled_button(gc); bd_mutex_unlock(&gc->mutex); } else if (pid >= 0x1200 && pid < 0x1300) { /* PG stream */ if (!gc->pgp) { gc->pgp = graphics_processor_init(); } graphics_processor_decode_ts(gc->pgp, &gc->pgs, pid, block, num_blocks, stc); if (!gc->pgs || !gc->pgs->complete) { return; } } }