本文整理汇总了C++中VideoOutput类的典型用法代码示例。如果您正苦于以下问题:C++ VideoOutput类的具体用法?C++ VideoOutput怎么用?C++ VideoOutput使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了VideoOutput类的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: AddScaledImage
void SubtitleScreen::AddScaledImage(QImage &img, QRect &pos)
{
VideoOutput *vo = m_player->GetVideoOutput();
if (!vo)
return;
QRect scaled = vo->GetImageRect(pos);
if (scaled.size() != pos.size())
{
img = img.scaled(scaled.width(), scaled.height(),
Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
}
MythPainter *osd_painter = vo->GetOSDPainter();
MythImage* image = NULL;
if (osd_painter)
image = osd_painter->GetFormatImage();
if (image)
{
image->Assign(img);
MythUIImage *uiimage = new MythUIImage(this, "dvd_button");
if (uiimage)
{
m_refreshArea = true;
uiimage->SetImage(image);
uiimage->SetArea(MythRect(scaled));
}
}
}
开发者ID:Openivo,项目名称:mythtv,代码行数:30,代码来源:subtitlescreen.cpp
示例2: DisplayRawTextSubtitles
void SubtitleScreen::DisplayRawTextSubtitles(void)
{
if (!InitialiseFont(m_fontStretch) || !m_player || !m_subreader)
return;
uint64_t duration;
QStringList subs = m_subreader->GetRawTextSubtitles(duration);
if (subs.empty())
return;
VideoOutput *vo = m_player->GetVideoOutput();
if (vo)
{
QRect oldsafe = m_safeArea;
m_safeArea = m_player->GetVideoOutput()->GetSafeRect();
if (oldsafe != m_safeArea)
{
int height = (m_safeArea.height() * m_textFontZoom) / 1800;
gTextSubFont->GetFace()->setPixelSize(height);
gTextSubFont->SetColor(Qt::white);
}
}
else
return;
VideoFrame *currentFrame = vo->GetLastShownFrame();
if (!currentFrame)
return;
// delete old subs that may still be on screen
DeleteAllChildren();
OptimiseTextSubs(subs);
DrawTextSubtitles(subs, currentFrame->timecode, duration);
}
开发者ID:Openivo,项目名称:mythtv,代码行数:34,代码来源:subtitlescreen.cpp
示例3: DisplayDVDButton
void SubtitleScreen::DisplayDVDButton(AVSubtitle* dvdButton, QRect &buttonPos)
{
if (!dvdButton || !m_player)
return;
VideoOutput *vo = m_player->GetVideoOutput();
if (!vo)
return;
DeleteAllChildren();
SetRedraw();
float tmp = 0.0;
QRect dummy;
vo->GetOSDBounds(dummy, m_safeArea, tmp, tmp, tmp);
AVSubtitleRect *hl_button = dvdButton->rects[0];
uint h = hl_button->h;
uint w = hl_button->w;
QRect rect = QRect(hl_button->x, hl_button->y, w, h);
QImage bg_image(hl_button->pict.data[0], w, h, w, QImage::Format_Indexed8);
uint32_t *bgpalette = (uint32_t *)(hl_button->pict.data[1]);
QVector<uint32_t> bg_palette(4);
for (int i = 0; i < 4; i++)
bg_palette[i] = bgpalette[i];
bg_image.setColorTable(bg_palette);
// copy button region of background image
const QRect fg_rect(buttonPos.translated(-hl_button->x, -hl_button->y));
QImage fg_image = bg_image.copy(fg_rect);
QVector<uint32_t> fg_palette(4);
uint32_t *fgpalette = (uint32_t *)(dvdButton->rects[1]->pict.data[1]);
if (fgpalette)
{
for (int i = 0; i < 4; i++)
fg_palette[i] = fgpalette[i];
fg_image.setColorTable(fg_palette);
}
bg_image = bg_image.convertToFormat(QImage::Format_ARGB32);
fg_image = fg_image.convertToFormat(QImage::Format_ARGB32);
// set pixel of highlight area to highlight color
for (int x=fg_rect.x(); x < fg_rect.x()+fg_rect.width(); ++x)
{
if ((x < 0) || (x > hl_button->w))
continue;
for (int y=fg_rect.y(); y < fg_rect.y()+fg_rect.height(); ++y)
{
if ((y < 0) || (y > hl_button->h))
continue;
bg_image.setPixel(x, y, fg_image.pixel(x-fg_rect.x(),y-fg_rect.y()));
}
}
AddScaledImage(bg_image, rect);
}
开发者ID:mdda,项目名称:mythtv,代码行数:58,代码来源:subtitlescreen.cpp
示例4: OptimiseDisplayedArea
void TeletextScreen::OptimiseDisplayedArea(void)
{
VideoOutput *vo = m_player->GetVideoOutput();
if (!vo)
return;
MythPainter *osd_painter = vo->GetOSDPainter();
if (!osd_painter)
return;
QHashIterator<int, QImage*> it(m_rowImages);
while (it.hasNext())
{
it.next();
MythImage* image = osd_painter->GetFormatImage();
if (!image || !it.value())
continue;
int row = it.key();
image->Assign(*(it.value()));
MythUIImage *uiimage = new MythUIImage(this, QString("ttrow%1")
.arg(row));
if (uiimage)
{
uiimage->SetImage(image);
uiimage->SetArea(MythRect(0, row * m_rowHeight,
m_safeArea.width(), m_rowHeight * 2));
}
}
QRegion visible;
QListIterator<MythUIType *> i(m_ChildrenList);
while (i.hasNext())
{
MythUIType *img = i.next();
visible = visible.united(img->GetArea());
}
if (visible.isEmpty())
return;
QRect bounding = visible.boundingRect();
bounding = bounding.translated(m_safeArea.topLeft());
bounding = m_safeArea.intersected(bounding);
int left = m_safeArea.left() - bounding.left();
int top = m_safeArea.top() - bounding.top();
SetArea(MythRect(bounding));
i.toFront();;
while (i.hasNext())
{
MythUIType *img = i.next();
img->SetArea(img->GetArea().translated(left, top));
}
}
开发者ID:,项目名称:,代码行数:54,代码来源:
示例5: VideoOutput
shared_ptr<VideoOutput> VideoOutput::create(const String& filename, const Settings& settings) {
VideoOutput* vo = new VideoOutput();
try {
vo->initialize(filename, settings);
} catch (const String& s) {
(void)s;
debugAssertM(false, s);
delete vo;
vo = NULL;
}
return shared_ptr<VideoOutput>(vo);
}
开发者ID:elfprince13,项目名称:G3D10,代码行数:15,代码来源:VideoOutput.cpp
示例6: ExpireSubtitles
void SubtitleScreen::ExpireSubtitles(void)
{
VideoOutput *videoOut = m_player->GetVideoOutput();
VideoFrame *currentFrame = videoOut ? videoOut->GetLastShownFrame() : NULL;
long long now = currentFrame ? currentFrame->timecode : LLONG_MAX;
QMutableHashIterator<MythUIType*, long long> it(m_expireTimes);
while (it.hasNext())
{
it.next();
if (it.value() < now)
{
DeleteChild(it.key());
it.remove();
SetRedraw();
}
}
}
开发者ID:mdda,项目名称:mythtv,代码行数:17,代码来源:subtitlescreen.cpp
示例7: SaveFramebuffer
void SaveFramebuffer(VideoOutput& video, const Viewport& v)
{
#ifndef HAVE_GLES
const StreamInfo& si = video.Streams()[0];
if(video.Streams().size()==0 || (int)si.Width() != v.w || (int)si.Height() != v.h) {
video.Close();
return;
}
static basetime last_time = TimeNow();
const basetime time_now = TimeNow();
last_time = time_now;
static std::vector<unsigned char> img;
img.resize(v.w*v.h*4);
glReadBuffer(GL_BACK);
glPixelStorei(GL_PACK_ALIGNMENT, 1); // TODO: Avoid this?
glReadPixels(v.l, v.b, v.w, v.h, GL_RGB, GL_UNSIGNED_BYTE, &img[0] );
video.WriteStreams(&img[0]);
#endif // HAVE_GLES
}
开发者ID:martinruenz,项目名称:Pangolin,代码行数:22,代码来源:display.cpp
示例8: TRACE_CONTEXT
bool AncestorMoveMonitor::eventFilter(QObject *watched, QEvent *event)
{
TRACE_CONTEXT(AncestorMoveMonitor::eventFilter, EVideoInternal);
if(event->type() == QEvent::Move || event->type() == QEvent::ParentChange) {
//TRACE_ENTRY("watched 0x%08x event.type %d", watched, event->type());
const Hash::const_iterator it = m_hash.find(watched);
if(it != m_hash.end()) {
const TargetList& targetList = it.value();
VideoOutput* target = 0;
foreach(target, targetList) {
switch (event->type()) {
case QEvent::Move:
// Notify the target that its ancestor has moved
target->ancestorMoved();
break;
case QEvent::ParentChange:
// Update ancestor list for the target
registerTarget(target);
break;
default:
Q_ASSERT(false);
}
}
}
//TRACE_EXIT_0();
}
// The event is never consumed by this filter
return false;
}
开发者ID:Mr-Kumar-Abhishek,项目名称:qt,代码行数:37,代码来源:ancestormovemonitor.cpp
示例9: Logger
void Logger(QtMsgType type, const char *msg)
{
#else
void Logger(QtMsgType type, const QMessageLogContext &, const QString& qmsg)
{
const QByteArray msgArray = qmsg.toLocal8Bit();
const char* msg = msgArray.constData();
#endif
switch (type) {
case QtDebugMsg:
fprintf(stdout, "Debug: %s\n", msg);
if (sLogfile)
fprintf(sLogfile, "Debug: %s\n", msg);
break;
case QtWarningMsg:
fprintf(stdout, "Warning: %s\n", msg);
if (sLogfile)
fprintf(sLogfile, "Warning: %s\n", msg);
break;
case QtCriticalMsg:
fprintf(stderr, "Critical: %s\n", msg);
if (sLogfile)
fprintf(sLogfile, "Critical: %s\n", msg);
break;
case QtFatalMsg:
fprintf(stderr, "Fatal: %s\n", msg);
if (sLogfile)
fprintf(sLogfile, "Fatal: %s\n", msg);
abort();
}
fflush(0);
}
int main(int argc, char *argv[])
{
// has no effect if qInstallMessageHandler() called
//qSetMessagePattern("%{function} @%{line}: %{message}");
QOptions options = get_common_options();
options.add("player options")
("-vo", "gl", "video renderer engine. can be gl, qt, d2d, gdi, xv.")
("ao", "", "audio output. can be 'null'")
("no-ffmpeg-log", "disable ffmpeg log")
;
options.parse(argc, argv);
if (options.value("help").toBool()) {
qDebug() << aboutQtAV_PlainText();
options.print();
return 0;
}
QApplication a(argc, argv);
load_qm(QStringList() << "player", options.value("language").toString());
sLogfile = fopen(QString(qApp->applicationDirPath() + "/log.txt").toUtf8().constData(), "w+");
if (!sLogfile) {
qWarning("Failed to open log file");
sLogfile = stdout;
}
qInstallMessageHandler(Logger);
QOption op = options.option("vo");
QString vo = op.value().toString();
if (!op.isSet()) {
QString exe(a.arguments().at(0));
int i = exe.lastIndexOf('-');
if (i > 0) {
vo = exe.mid(i+1, exe.indexOf('.') - i - 1);
}
}
qDebug("vo: %s", vo.toUtf8().constData());
vo = vo.toLower();
if (vo != "gl" && vo != "d2d" && vo != "gdi" && vo != "xv" && vo != "qt")
vo = "gl";
QString title = "QtAV " /*+ vo + " "*/ + QtAV_Version_String_Long() + " [email protected]";
#ifndef QT_NO_OPENGL
VideoRendererId vid = VideoRendererId_GLWidget2;
#else
VideoRendererId vid = VideoRendererId_Widget;
#endif
// TODO: move to VideoRendererTypes or factory to query name
struct {
const char* name;
VideoRendererId id;
} vid_map[] = {
{ "gl", VideoRendererId_GLWidget2 },
{ "d2d", VideoRendererId_Direct2D },
{ "gdi", VideoRendererId_GDI },
{ "xv", VideoRendererId_XV },
{ "qt", VideoRendererId_Widget },
{ 0, 0 }
};
for (int i = 0; vid_map[i].name; ++i) {
if (vo == vid_map[i].name) {
vid = vid_map[i].id;
break;
}
}
VideoOutput *renderer = new VideoOutput(vid); //or VideoRenderer
if (!renderer) {
//.........这里部分代码省略.........
开发者ID:MichaelMiao,项目名称:QtAV,代码行数:101,代码来源:main.cpp
示例10: SetArea
void BDOverlayScreen::DisplayBDOverlay(BDOverlay *overlay)
{
if (!overlay || !m_player)
return;
if (!overlay->m_data)
{
m_overlayArea = overlay->m_position;
SetArea(MythRect(m_overlayArea));
DeleteAllChildren();
m_overlayMap.clear();
SetRedraw();
LOG(VB_PLAYBACK, LOG_INFO, LOC +
QString("Initialised Size: %1x%2 (%3+%4) Plane: %5 Pts: %6")
.arg(overlay->m_position.width())
.arg(overlay->m_position.height())
.arg(overlay->m_position.left())
.arg(overlay->m_position.top())
.arg(overlay->m_plane)
.arg(overlay->m_pts));
BDOverlay::DeleteOverlay(overlay);
return;
}
if (!m_overlayArea.isValid())
{
LOG(VB_GENERAL, LOG_ERR, LOC +
"Error: Overlay image submitted before initialisation.");
}
VideoOutput *vo = m_player->GetVideoOutput();
if (!vo)
return;
QRect rect = overlay->m_position;
QString hash = QString("%1+%2+%3x%4")
.arg(rect.left()).arg(rect.top())
.arg(rect.width()).arg(rect.height());
// remove if we already have this overlay
if (m_overlayMap.contains(hash))
{
LOG(VB_PLAYBACK, LOG_DEBUG, LOC + QString("Removing %1 (%2 left)")
.arg(hash).arg(m_overlayMap.size()));
MythUIImage *old = m_overlayMap.take(hash);
DeleteChild(old);
}
// convert the overlay palette to ARGB
uint32_t *origpalette = (uint32_t *)(overlay->m_palette);
QVector<unsigned int> palette;
for (int i = 0; i < 256; i++)
{
int y = (origpalette[i] >> 0) & 0xff;
int cr = (origpalette[i] >> 8) & 0xff;
int cb = (origpalette[i] >> 16) & 0xff;
int a = (origpalette[i] >> 24) & 0xff;
int r = int(y + 1.4022 * (cr - 128));
int b = int(y + 1.7710 * (cb - 128));
int g = int(1.7047 * y - (0.1952 * b) - (0.5647 * r));
if (r < 0) r = 0;
if (g < 0) g = 0;
if (b < 0) b = 0;
if (r > 0xff) r = 0xff;
if (g > 0xff) g = 0xff;
if (b > 0xff) b = 0xff;
palette.push_back((a << 24) | (r << 16) | (g << 8) | b);
}
// convert the image to QImage
QImage img(rect.size(), QImage::Format_Indexed8);
memcpy(img.bits(), overlay->m_data, rect.width() * rect.height());
img.setColorTable(palette);
img.convertToFormat(QImage::Format_ARGB32);
// add to screen
QRect scaled = vo->GetImageRect(rect);
if (scaled.size() != rect.size())
{
img = img.scaled(scaled.width(), scaled.height(),
Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
}
MythPainter *osd_painter = vo->GetOSDPainter();
MythImage* image = NULL;
if (osd_painter)
image = osd_painter->GetFormatImage();
if (image)
{
image->Assign(img);
MythUIImage *uiimage = new MythUIImage(this, "bdoverlay");
if (uiimage)
{
uiimage->SetImage(image);
uiimage->SetArea(MythRect(scaled));
m_overlayMap.insert(hash, uiimage);
LOG(VB_PLAYBACK, LOG_DEBUG, LOC + QString("Added %1 (%2 tot)")
.arg(hash).arg(m_overlayMap.size()));
}
//.........这里部分代码省略.........
开发者ID:StefanRoss,项目名称:mythtv,代码行数:101,代码来源:bdoverlayscreen.cpp
示例11: Test
void Test(void)
{
PIPMap dummy;
if (novideosync) // TODO
LOG(VB_GENERAL, LOG_INFO, "Will attempt to disable sync-to-vblank.");
RingBuffer *rb = RingBuffer::Create(file, false, true, 2000);
MythPlayer *mp = new MythPlayer(kAudioMuted);
mp->GetAudio()->SetAudioInfo("NULL", "NULL", 0, 0);
mp->GetAudio()->SetNoAudio();
ctx = new PlayerContext("VideoPerformanceTest");
ctx->SetRingBuffer(rb);
ctx->SetPlayer(mp);
ctx->SetPlayingInfo(new ProgramInfo(file));
mp->SetPlayerInfo(NULL, GetMythMainWindow(), true, ctx);
FrameScanType scan = deinterlace ? kScan_Interlaced : kScan_Progressive;
if (!mp->StartPlaying())
{
LOG(VB_GENERAL, LOG_ERR, "Failed to start playback.");
return;
}
VideoOutput *vo = mp->GetVideoOutput();
if (!vo)
{
LOG(VB_GENERAL, LOG_ERR, "No video output.");
return;
}
LOG(VB_GENERAL, LOG_INFO, "-----------------------------------");
LOG(VB_GENERAL, LOG_INFO, QString("Starting video performance test for '%1'.")
.arg(file));
LOG(VB_GENERAL, LOG_INFO, QString("Test will run for %1 seconds.")
.arg(secondstorun));
if (decodeonly)
LOG(VB_GENERAL, LOG_INFO, "Decoding frames only - skipping display.");
LOG(VB_GENERAL, LOG_INFO, QString("Deinterlacing %1")
.arg(deinterlace ? "enabled" : "disabled"));
Jitterometer *jitter = new Jitterometer("Performance: ", mp->GetFrameRate());
int ms = secondstorun * 1000;
QTime start = QTime::currentTime();
while (1)
{
int duration = start.msecsTo(QTime::currentTime());
if (duration < 0 || duration > ms)
{
LOG(VB_GENERAL, LOG_INFO, "Complete.");
break;
}
if (mp->IsErrored())
{
LOG(VB_GENERAL, LOG_ERR, "Playback error.");
break;
}
if (mp->GetEof())
{
LOG(VB_GENERAL, LOG_INFO, "End of file.");
break;
}
if (!mp->PrebufferEnoughFrames())
continue;
mp->SetBuffering(false);
vo->StartDisplayingFrame();
VideoFrame *frame = vo->GetLastShownFrame();
mp->CheckAspectRatio(frame);
if (!decodeonly)
{
vo->ProcessFrame(frame, NULL, NULL, dummy, scan);
vo->PrepareFrame(frame, scan, NULL);
vo->Show(scan);
}
vo->DoneDisplayingFrame(frame);
jitter->RecordCycleTime();
}
LOG(VB_GENERAL, LOG_INFO, "-----------------------------------");
}
开发者ID:killerkiwi,项目名称:mythtv,代码行数:85,代码来源:main.cpp
示例12: DisplayTextSubtitles
void SubtitleScreen::DisplayTextSubtitles(void)
{
if (!InitialiseFont(m_fontStretch) || !m_player || !m_subreader)
return;
bool changed = false;
VideoOutput *vo = m_player->GetVideoOutput();
if (vo)
{
QRect oldsafe = m_safeArea;
m_safeArea = m_player->GetVideoOutput()->GetSafeRect();
if (oldsafe != m_safeArea)
{
changed = true;
int height = (m_safeArea.height() * m_textFontZoom) / 2000;
gTextSubFont->GetFace()->setPixelSize(height);
gTextSubFont->GetFace()->setItalic(false);
gTextSubFont->GetFace()->setUnderline(false);
gTextSubFont->SetColor(Qt::white);
}
}
else
{
return;
}
VideoFrame *currentFrame = vo->GetLastShownFrame();
if (!currentFrame)
return;
TextSubtitles *subs = m_subreader->GetTextSubtitles();
subs->Lock();
uint64_t playPos = 0;
if (subs->IsFrameBasedTiming())
{
// frame based subtitles get out of synch after running mythcommflag
// for the file, i.e., the following number is wrong and does not
// match the subtitle frame numbers:
playPos = currentFrame->frameNumber;
}
else
{
// Use timecodes for time based SRT subtitles. Feeding this into
// NormalizeVideoTimecode() should adjust for non-zero start times
// and wraps. For MPEG, wraps will occur just once every 26.5 hours
// and other formats less frequently so this should be sufficient.
// Note: timecodes should now always be valid even in the case
// when a frame doesn't have a valid timestamp. If an exception is
// found where this is not true then we need to use the frameNumber
// when timecode is not defined by uncommenting the following lines.
//if (currentFrame->timecode == 0)
// playPos = (uint64_t)
// ((currentFrame->frameNumber / video_frame_rate) * 1000);
//else
playPos = m_player->GetDecoder()->NormalizeVideoTimecode(currentFrame->timecode);
}
if (playPos != 0)
changed |= subs->HasSubtitleChanged(playPos);
if (!changed)
{
subs->Unlock();
return;
}
DeleteAllChildren();
SetRedraw();
if (playPos == 0)
{
subs->Unlock();
return;
}
QStringList rawsubs = subs->GetSubtitles(playPos);
if (rawsubs.empty())
{
subs->Unlock();
return;
}
OptimiseTextSubs(rawsubs);
subs->Unlock();
DrawTextSubtitles(rawsubs, 0, 0);
}
开发者ID:mdda,项目名称:mythtv,代码行数:83,代码来源:subtitlescreen.cpp
示例13: lock
void SubtitleScreen::DisplayAVSubtitles(void)
{
if (!m_player || !m_subreader)
return;
AVSubtitles* subs = m_subreader->GetAVSubtitles();
QMutexLocker lock(&(subs->lock));
if (subs->buffers.empty() && (kDisplayAVSubtitle != m_subtitleType))
return;
VideoOutput *videoOut = m_player->GetVideoOutput();
VideoFrame *currentFrame = videoOut ? videoOut->GetLastShownFrame() : NULL;
if (!currentFrame || !videoOut)
return;
float tmp = 0.0;
QRect dummy;
videoOut->GetOSDBounds(dummy, m_safeArea, tmp, tmp, tmp);
while (!subs->buffers.empty())
{
const AVSubtitle subtitle = subs->buffers.front();
if (subtitle.start_display_time > currentFrame->timecode)
break;
ClearDisplayedSubtitles();
subs->buffers.pop_front();
for (std::size_t i = 0; i < subtitle.num_rects; ++i)
{
AVSubtitleRect* rect = subtitle.rects[i];
bool displaysub = true;
if (subs->buffers.size() > 0 &&
subs->buffers.front().end_display_time <
currentFrame->timecode)
{
displaysub = false;
}
if (displaysub && rect->type == SUBTITLE_BITMAP)
{
// AVSubtitleRect's image data's not guaranteed to be 4 byte
// aligned.
QSize img_size(rect->w, rect->h);
QRect img_rect(rect->x, rect->y, rect->w, rect->h);
QRect display(rect->display_x, rect->display_y,
rect->display_w, rect->display_h);
// XSUB and some DVD/DVB subs are based on the original video
// size before the video was converted. We need to guess the
// original size and allow for the difference
int right = rect->x + rect->w;
int bottom = rect->y + rect->h;
if (subs->fixPosition || (currentFrame->height < bottom) ||
(currentFrame->width < right))
{
int sd_height = 576;
if ((m_player->GetFrameRate() > 26.0f) && bottom <= 480)
sd_height = 480;
int height = ((currentFrame->height <= sd_height) &&
(bottom <= sd_height)) ? sd_height :
((currentFrame->height <= 720) && bottom <= 720)
? 720 : 1080;
int width = ((currentFrame->width <= 720) &&
(right <= 720)) ? 720 :
((currentFrame->width <= 1280) &&
(right <= 1280)) ? 1280 : 1920;
display = QRect(0, 0, width, height);
}
QRect scaled = videoOut->GetImageRect(img_rect, &display);
QImage qImage(img_size, QImage::Format_ARGB32);
for (int y = 0; y < rect->h; ++y)
{
for (int x = 0; x < rect->w; ++x)
{
const uint8_t color = rect->pict.data[0][y*rect->pict.linesize[0] + x];
const uint32_t pixel = *((uint32_t*)rect->pict.data[1]+color);
qImage.setPixel(x, y, pixel);
}
}
if (scaled.size() != img_size)
{
qImage = qImage.scaled(scaled.width(), scaled.height(),
Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
}
MythPainter *osd_painter = videoOut->GetOSDPainter();
MythImage* image = NULL;
if (osd_painter)
image = osd_painter->GetFormatImage();
long long displayfor = subtitle.end_display_time -
subtitle.start_display_time;
if (displayfor == 0)
displayfor = 60000;
//.........这里部分代码省略.........
开发者ID:mdda,项目名称:mythtv,代码行数:101,代码来源:subtitlescreen.cpp
示例14: NuppelVideoRecorder
//.........这里部分代码省略.........
VERBOSE(VB_IMPORTANT, "Error initializing fifo writer. Aborting");
unlink(outputname.toLocal8Bit().constData());
if (player_ctx)
delete player_ctx;
return REENCODE_ERROR;
}
VERBOSE(VB_GENERAL, QString("Video %1x%[email protected]%3fps Audio rate: %4")
.arg(video_width).arg(video_height)
.arg(video_frame_rate)
.arg(arb->eff_audiorate));
VERBOSE(VB_GENERAL, "Created fifos. Waiting for connection.");
}
bool forceKeyFrames = (fifow == NULL) ? framecontrol : false;
frm_dir_map_t::iterator dm_iter;
bool writekeyframe = true;
int num_keyframes = 0;
int did_ff = 0;
long curFrameNum = 0;
frame.frameNumber = 1;
long lastKeyFrame = 0;
long totalAudio = 0;
int dropvideo = 0;
long long lasttimecode = 0;
long long timecodeOffset = 0;
float rateTimeConv = arb->eff_audiorate / 1000.0f;
float vidFrameTime = 1000.0f / video_frame_rate;
int wait_recover = 0;
VideoOutput *videoOutput = player->getVideoOutput();
bool is_key = 0;
bool first_loop = true;
unsigned char *newFrame = new unsigned char[frame.size];
frame.buf = newFrame;
AVPicture imageIn, imageOut;
struct SwsContext *scontext = NULL;
if (fifow)
VERBOSE(VB_GENERAL, "Dumping Video and Audio data to fifos");
else if (copyaudio)
VERBOSE(VB_GENERAL, "Copying Audio while transcoding Video");
else
VERBOSE(VB_GENERAL, "Transcoding Video and Audio");
QTime flagTime;
flagTime.start();
while (player->TranscodeGetNextFrame(dm_iter, did_ff, is_key, honorCutList))
{
if (first_loop)
{
copyaudio = player->GetRawAudioState();
first_loop = false;
}
VideoFrame *lastDecode = videoOutput->GetLastDecodedFrame();
frame.timecode = lastDecode->timecode;
if (frame.timecode < lasttimecode)
frame.timecode = (long long)(lasttimecode + vidFrameTime);
开发者ID:,项目名称:,代码行数:66,代码来源:
注:本文中的VideoOutput类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论