/** * \fn VideoOutWindow::MoveResize(void) * \brief performs all the calculations for video framing and any resizing. * * First we apply playback over/underscanning and offsetting, * then we letterbox settings, and finally we apply manual * scale & move properties for "Zoom Mode". * * \sa Zoom(ZoomDirection), ToggleAdjustFill(int) */ void VideoOutWindow::MoveResize(void) { // Preset all image placement and sizing variables. video_rect = QRect(QPoint(0, 0), video_disp_dim); display_video_rect = display_visible_rect; // Avoid too small frames for audio only streams (for OSD). if ((video_rect.width() <= 0) || (video_rect.height() <= 0)) { video_disp_dim = video_dim_act = display_visible_rect.size(); video_dim = fix_alignment(display_visible_rect.size()); video_rect = QRect(QPoint(0, 0), video_dim); } // Apply various modifications ApplyDBScaleAndMove(); ApplyLetterboxing(); ApplyManualScaleAndMove(); if ((db_scale_vert == 0) && (db_scale_horiz == 0) && (mz_scale_v == 1.0f) && (mz_scale_h == 1.0f)) { ApplySnapToVideoRect(); } PrintMoveResizeDebug(); needrepaint = true; }
/** * \fn VideoOutWindow::InputChanged(const QSize&, float, MythCodecID, void*) * \brief Tells video output to discard decoded frames and wait for new ones. * \bug We set the new width height and aspect ratio here, but we should * do this based on the new video frames in Show(). */ bool VideoOutWindow::InputChanged(const QSize &input_size, float aspect, MythCodecID myth_codec_id, void *codec_private) { (void) myth_codec_id; (void) codec_private; video_dim_act = input_size; video_disp_dim = fix_1080i(input_size); video_dim = fix_alignment(input_size); /* if (db_vdisp_profile) db_vdisp_profile->SetInput(video_dim);*///done in videooutput SetVideoAspectRatio(aspect); // DiscardFrames(true); return true; }
bool VideoOutWindow::Init(const QSize &new_video_dim, float new_video_aspect, const QRect &new_display_visible_rect, AspectOverrideMode new_aspectoverride, AdjustFillMode new_adjustfill) { display_visible_rect = db_use_gui_size ? new_display_visible_rect : screen_geom; int pbp_width = display_visible_rect.width() / 2; if (pip_state == kPBPLeft || pip_state == kPBPRight) display_visible_rect.setWidth(pbp_width); if (pip_state == kPBPRight) display_visible_rect.moveLeft(pbp_width); video_dim_act = new_video_dim; video_disp_dim = fix_1080i(new_video_dim); video_dim = fix_alignment(new_video_dim); video_rect = QRect(display_visible_rect.topLeft(), video_disp_dim); if (pip_state > kPIPOff) { aspectoverride = kAspect_Off; adjustfill = kAdjustFill_Off; } else { aspectoverride = new_aspectoverride; adjustfill = new_adjustfill; } // apply aspect ratio and letterbox mode VideoAspectRatioChanged(new_video_aspect); embedding = false; return true; }
void AlignmentException(struct pt_regs *regs) { int fixed; #ifdef __SMP__ if (regs->msr & MSR_FP ) smp_giveup_fpu(current); #else if (last_task_used_math == current) giveup_fpu(); #endif fixed = fix_alignment(regs); if (fixed == 1) { regs->nip += 4; /* skip over emulated instruction */ return; } if (fixed == -EFAULT) { /* fixed == -EFAULT means the operand address was bad */ bad_page_fault(regs, regs->dar); return; } _exception(SIGBUS, regs); }
void AlignmentException(struct pt_regs *regs) { int fixed; siginfo_t info; fixed = fix_alignment(regs); if (fixed == 1) { regs->nip += 4; /* skip over emulated instruction */ emulate_single_step(regs); return; } /* Operand address was bad */ if (fixed == -EFAULT) { if (user_mode(regs)) { info.si_signo = SIGSEGV; info.si_errno = 0; info.si_code = SEGV_MAPERR; info.si_addr = (void *)regs->dar; force_sig_info(SIGSEGV, &info, current); } else { /* Search exception table */ bad_page_fault(regs, regs->dar, SIGSEGV); } return; } info.si_signo = SIGBUS; info.si_errno = 0; info.si_code = BUS_ADRALN; info.si_addr = (void *)regs->nip; _exception(SIGBUS, &info, regs); }