void VideoDecoder::ProcessVideoPacket(AVFormatContext *Context, AVStream *Stream, AVPacket *Packet) { if (!Context || !Packet || !Stream || (Stream && !Stream->codec)) return; // Add any preprocessing here // Decode a frame AVFrame avframe; memset(&avframe, 0, sizeof(AVFrame)); avcodec_get_frame_defaults(&avframe); int gotframe = 0; int result = avcodec_decode_video2(Stream->codec, &avframe, &gotframe, Packet); if (result < 0) { LOG(VB_GENERAL, LOG_ERR, QString("Unknown video decoding error (%1)").arg(result)); return; } if (!gotframe) return; // mark frames that may be corrupt if (!m_keyframeSeen && (avframe.key_frame || (Packet->flags & AV_PKT_FLAG_KEY))) m_keyframeSeen = true; VideoFrame *frame = avframe.opaque ? static_cast<VideoFrame*>(avframe.opaque) : m_videoParent->GetBuffers()->GetFrameForDecoding(); if (!frame) { LOG(VB_GENERAL, LOG_ERR, "Failed to get video frame"); return; } AccelerationFactory* factory = AccelerationFactory::GetAccelerationFactory(); for ( ; factory; factory = factory->NextFactory()) factory->ConvertBuffer(avframe, frame, m_conversionContext); frame->m_colourSpace = Stream->codec->colorspace; frame->m_colourRange = Stream->codec->color_range; frame->m_topFieldFirst = avframe.top_field_first; frame->m_interlaced = avframe.interlaced_frame; frame->m_frameAspectRatio = GetFrameAspectRatio(Stream, avframe); frame->m_pixelAspectRatio = GetPixelAspectRatio(Stream, avframe); frame->m_repeatPict = avframe.repeat_pict; frame->m_frameNumber = avframe.coded_picture_number; frame->m_pts = av_q2d(Stream->time_base) * 1000 * GetValidTimestamp(avframe.pkt_pts, avframe.pkt_dts); frame->m_corrupt = !m_keyframeSeen; frame->m_frameRate = GetFrameRate(Context, Stream); frame->m_invertForSource = 0; frame->m_invertForDisplay = 0; frame->m_field = VideoFrame::Frame; m_videoParent->GetBuffers()->ReleaseFrameFromDecoding(frame); if (m_firstVideoTimecode == (qint64)AV_NOPTS_VALUE) m_firstVideoTimecode = frame->m_pts; }
// where is CCamera::SetFov(float fov)??? LUAMTA_FUNCTION(camera, SetFov) { auto self = my->ToCameraPtr(1); int x = 0; int y = 0; int w = 0; int h = 0; self->GetViewPort(x, y, w, h); self->SetFrustum( my->ToNumber(1, h), my->ToNumber(2, w), my->ToNumber(3, my->ToNumber(2)), my->ToNumber(4, self->GetNearPlane()), my->ToNumber(5, self->GetFarPlane()), my->ToNumber(6, self->GetPixelAspectRatio()) ); return 0; }
/** * Apply any user overrides to the screen geometry */ void MythUIHelperPrivate::StoreGUIsettings() { if (x_override >= 0 && y_override >= 0) { GetMythDB()->OverrideSettingForSession("GuiOffsetX", QString::number(x_override)); GetMythDB()->OverrideSettingForSession("GuiOffsetY", QString::number(y_override)); } if (w_override > 0 && h_override > 0) { GetMythDB()->OverrideSettingForSession("GuiWidth", QString::number(w_override)); GetMythDB()->OverrideSettingForSession("GuiHeight", QString::number(h_override)); } m_screenxbase = GetMythDB()->GetNumSetting("GuiOffsetX"); m_screenybase = GetMythDB()->GetNumSetting("GuiOffsetY"); m_screenwidth = m_screenheight = 0; GetMythDB()->GetResolutionSetting("Gui", m_screenwidth, m_screenheight); // If any of these was _not_ set by the user, // (i.e. they are 0) use the whole-screen defaults if (!m_screenxbase) m_screenxbase = m_xbase; if (!m_screenybase) m_screenybase = m_ybase; if (!m_screenwidth) m_screenwidth = m_width; if (!m_screenheight) m_screenheight = m_height; if (m_screenheight < 160 || m_screenwidth < 160) { LOG(VB_GENERAL, LOG_ERR, LOC + "Somehow, your screen size settings are bad.\n\t\t\t" + QString("GuiResolution: %1\n\t\t\t") .arg(GetMythDB()->GetSetting("GuiResolution")) + QString(" old GuiWidth: %1\n\t\t\t") .arg(GetMythDB()->GetNumSetting("GuiWidth")) + QString(" old GuiHeight: %1\n\t\t\t") .arg(GetMythDB()->GetNumSetting("GuiHeight")) + QString("m_width: %1").arg(m_width) + QString("m_height: %1\n\t\t\t").arg(m_height) + "Falling back to 640x480"); m_screenwidth = 640; m_screenheight = 480; } m_wmult = m_screenwidth / (float)m_baseWidth; m_hmult = m_screenheight / (float)m_baseHeight; // Default font, _ALL_ fonts inherit from this! // e.g All fonts will be 19 pixels unless a new size is explicitly defined. QFont font = QFont("Arial"); if (!font.exactMatch()) font = QFont(); font.setStyleHint(QFont::SansSerif, QFont::PreferAntialias); font.setPixelSize((int)((19.0f * m_hmult) + 0.5f)); int stretch = (int)(100 / GetPixelAspectRatio()); font.setStretch(stretch); // QT m_fontStretch = stretch; // MythUI QApplication::setFont(font); }