If the application is not supposed to play back DRM secured media,
we grab the pixel data from the native mmrenderer window now
and make them available to the QAbstractVideoSurface of the
QVideoRendererControl. This allows the usage of all transformations
on video output inside QtQuick.
Change-Id: I73d05404b1ac9c5f74a234d9393b981a6fbcb317
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Since the conversion from NV12 to RGB on the CPU does not scale
for larger photo/video resolutions, this patch uses a different
approach. It uses the low-level screen API to grab screenshots
of the native viewfinder window and provides them as QImage to
the QAbstractVideoSurface. Even for large resolutions this
is quite performant.
Change-Id: I59a7cbe6850b3b07575ea10026f3180cfd22e935
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Provide an implementation of QMetaDataReaderControl for the
QMediaPlayer.
Change-Id: I58c04e40ae3f07013450997410d0a379273c7bde
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Fix the selection of the video viewfinder resolution depending
on the features provided by the camera. If the viewfinder is responsible
for encoding the video frames, the resolution of the viewfinder
and the video output must match. Otherwise only the ratio must match
and we can use a lower resolution for the viewfinder to improve
the performance of the NV12->RGB frame conversion.
Change-Id: I66ace84841a69be84f83bf9c5240cd23d96fbb76
Reviewed-by: Bernd Weimer <bweimer@rim.com>
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Before audio is played we always seek to position 0. Unfortunately, due
to a recent change in mmrenderer, playback stopped working for
"non-seekable" media. There is a check now, whether the media is
seekable or not.
Change-Id: Ieafd8d1364f7ce0194f4fa17d3efe894aa1b289b
Reviewed-by: Fabian Bumberger <fbumberger@rim.com>
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Ensure that the taken photos are always upright.
As long as the QCamera API does not provide information about
the native orientation of the camera, we have to do the rotation
inside the BBCamera plugin.
Change-Id: Iebb04a5417274c2baee5e944dadf10fc706484d9
Reviewed-by: Bernd Weimer <bweimer@rim.com>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Listen to the CAMERA_STATUS_POWERUP signal, which is sent
after standby, and trigger a restart of the viewfinder
in this case.
Change-Id: I426f23657844bb270ddfd0e4bfb35880040aa583
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Make sure that the texture is upright when the device is upright.
When rotating the device, it's the applications responsibility to
rotate the texture of the viewfinder (e.g. through the
QDeclarativeVideoOutput::orientation property).
Change-Id: I6e453ce9bdde5197104533f844b1079b3c3db908
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Reimplement all camera related controls as they are supported by the
BB10 camera API.
Change-Id: Ie7d2258be22c1c1821489bd7074b80cff4242afa
Reviewed-by: Bernd Weimer <bweimer@rim.com>
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Move the mediaplayer related code in its own subdirectory.
This is a preparation for adding camera support in the future.
Change-Id: I880ff90e154165c2a3a31fd2b51e1dd224fea8fd
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
It also applies to QGraphicsVideoItem when used on a GL viewport.
We now have a new video sink that is based on Microsoft's EVR sink, we just
replace the default Presenter with our own. Frames are rendered into D3D
surfaces using DXVA, then copied into a shared D3D/EGL surface and finally
bound to a GL texture to be used by the video surface.
The shared D3D/EGL surface is a feature provided by ANGLE and therefore Qt
must be compiled with ANGLE for this new video sink to be compiled and
used.
Change-Id: I0b7b9968eed5488f9ef1a2dcca5213bd0af232ab
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
When using our custom MediaSink with RGB formats, Media Foundation fails
sometimes to resolve the topology. Inserting ourselves a ColorConverter
transform in the topology resolves the problem.
The ColorConverter transform cannot handle dynamic frame size changes
(this can happen with H264 videos for example) so we also need to insert a
Resizer transform to handle transparently frame size changes.
Change-Id: Id7f37a0af65f142fbe6d420ad7b2c1ac2156c21b
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
YUV and other compressed frame formats are always TopToBottom. Only for uncompressed RGB formats the sign of their height is used to indicate the scanline direction.
Change-Id: I6474783583672861eeeb538b79d14ee3d6995f59
Reviewed-by: Dmytro Poplavskiy <dmytro.poplavskiy@gmail.com>
CGRect == NSRect only in 64-bit mode.
Don't add -framework QuickTime based on the host arch,
use QT_ARCH instead.
Change-Id: I829bc1bcfe37f70a07e8c55a5bc7dee90aaa981a
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
For the VideoRendererControl, also stop the video surface at the same
time.
This fixes a crash when changing video.
Change-Id: I49484f8b277c345dafb3e5947cf5d23df15546f3
Reviewed-by: Jason Barron <jason@cutehacks.com>
Fixed the way the custom MF Transform (getting the frames) works:
- Recreate it whenever we load a new media
- During media type negotiation between nodes, the MFT should support
the same types as the video sink supports
- Allow input and output types to be changed as many times as needed,
otherwise the topology cannot be resolved in some cases
Change-Id: I7ca77e1a3dee83643f1a97f2e6ada9c5c0e88309
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Names are case sensitive when cross bulding for mingw on unix.
Change-Id: I355b9388241c7c5fefb05b6f0c231efec4530c7e
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
Reviewed-by: Jonas Rabbe <jonas.rabbe@gmail.com>
qt is already added by spec_pre.prf, warn_on by default_pre.prf, and
no_private_qt_headers_warning by qt_build_config.prf.
Change-Id: Ia5cee420d577dd0ae0120cb2dd430d4ddd29ebcf
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Since media loading is asynchronous, cancelling could cause a crash when
done after the media is loaded but the callback hasn't been called yet.
Change-Id: I9c9b7bfaa495b9e75765111c15afb07e8b699488
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
When loading the source fails because the file format is not supported, we
now report a FormatError instead of a ResourceError.
When the file format is supported but the media cannot be played (topology
cannot be resolved), it is most likely caused by a missing codec and we
then report a FormatError.
Change-Id: I101a86c129a0c5dccb543fc1247cb741994684fd
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
MFMediaSession doesn't seem to handle correctly the change of media
source, causing the playback not to work afterwards.
A single MFMediaSession was created and used for every loaded media, we
now create a new one whenever we load a new media (releasing the old one
beforehand).
Task-number: QTBUG-26819
Change-Id: Id99c9dd54e161823d9580933e063f16240806529
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Reviewed-by: Jason Barron <jason@cutehacks.com>
A wrong shutdown sequence was causing a wait condition to never be met,
resulting in a 5 seconds hang on shutdown.
Also reduced the wait condition timeout to 100 ms.
Task-number: QTBUG-28432
Change-Id: Ib415bf66634603d839be3e34e497e3a3c5a19ad9
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Reviewed-by: Jason Barron <jason@cutehacks.com>
Evaluate the environment variable DXSDK_DIR at qmake time.
This makes sure, the contents get properly quoted, even if the DirectX
SDK is installed into a path that contains spaces.
Change-Id: Id22f56448eef4d392af77e97f46308f1b486c7c7
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
avfvideowidget.mm:120:9: error: non-constant-expression cannot be narrowed from type 'int' to 'GLfloat' (aka 'float') in initializer list [-Wc++11-narrowing]
x1, y1, zValue,
^~
Change-Id: I5a08bf8b53cf029dbdfaeaa03f4babd6d49d62ad
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Using the video probe cause unstability in the video playback.
Disabled for 5.0 release.
Should be fixed and re-enabled in the next version.
Change-Id: I274212a0943ac098194ad59d6e07bed7740bc8a3
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
Since buffering information through buffering queries is only valid if
progressive download buffering (on-disk caching) is enabled or local
media is played and we explicitly disable on-disk buffering because of
cleanup issues with gstreamer availablePlaybackRanges() always returns
an empty range for online media.
Seeking is also possible using http range requests therefore if valid
playback ranges could not be determined we should return the [0..duration]
range unless the source is a live stream or the duration is unknown.
Change-Id: Idbebc0fdde5053c6f9c0b3794c6d122492c6239c
Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Support for QMAKE_MAC_XARCH was removed in Qt 5.0, so it shouldn't be
used in the QT7 plugin, as it causes build failures.
Task-number: QTBUG-27180
Change-Id: I7d907a9afbcbc4989b794350c94d0f619e4d2b7d
Reviewed-by: Caroline Chao <caroline.chao@digia.com>
QGraphicsVideoItem was not working because the QPainterVideoSurface was
unable to paint BGR32 format OpenGL textures. Now if the QGraphicsView
window has a QGLWidget viewport, we use the GLTextureHandle to render
the video, otherwise we fallback to the software QImage rendered case.
Task-number: QTBUG-28017
Change-Id: I9304e0a2536f15075ae34cdd509ef24fbc18604e
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
AVFMediaPlayerService::requestControl was returning the video output
control after the video output was created, and this could result in
unexpected behavior, as well as prematurely calling releaseControl on
the video output. This should fix the "player" example on OS X.
Change-Id: Ie23b1176272a1f9daa5edeec856141ac52a450c7
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>