add safeguards to draw_*_pixel() to prevent memory corruption
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
kmstest: Separate reservation phase from command line parsing
In the new order the planes are not reserved before the whole command
line is parsed. This way we know the color format of the framebuffer
that is going to be on the reserved plane and we can select a plane
that supports the format. After this patch kmstest makes no distinction
between primary and overlay planes if atomic mode setting is
supported. If no plane is specified then a default plane, matching the
screen size is created.
Signed-off-by: Jyri Sarha <jsarha@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
In the new order the planes are not reserved before the whole command
line is parsed. This way we know the color format of the framebuffer
that is going to be on the reserved plane and we can select a plane
that supports the format. After this patch kmstest makes no distinction
between primary and overlay planes if atomic mode setting is
supported. If no plane is specified then a default plane, matching the
screen size is created.
Signed-off-by: Jyri Sarha <jsarha@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
kmstest: Implement simplistic propery support behind -P flag.
Non atomic modesetting is not supported and there is no translation
from various property types to unsigned 64-bit integer. Instead the
property values are simply converted from string with stoull(str, 0, 0).
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Non atomic modesetting is not supported and there is no translation
from various property types to unsigned 64-bit integer. Instead the
property values are simply converted from string with stoull(str, 0, 0).
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
py: pyvid: Provide stream_off binding
The videodevice module defines a stream_off function call, but this is
not available in the python bindings interface.
Provide the binding of VideoStreamer::stream_off.
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
The videodevice module defines a stream_off function call, but this is
not available in the python bindings interface.
Provide the binding of VideoStreamer::stream_off.
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
videodevice: Fix minor spacing
Provide a space between the return type and the function definition
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Provide a space between the return type and the function definition
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
py: add convert_vector helper
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
py: Add Card crtcs and encoders properties back to the Python bindings
Commit 706a44abb3aa ("Update to latest pybind11") removed the crtcs and
encoders properties from the Card class. Add them back by wrapping the
associated C++ methods manually due to a limitation of pybind11.
Fixes: 706a44abb3aa ("Update to latest pybind11")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Commit 706a44abb3aa ("Update to latest pybind11") removed the crtcs and
encoders properties from the Card class. Add them back by wrapping the
associated C++ methods manually due to a limitation of pybind11.
Fixes: 706a44abb3aa ("Update to latest pybind11")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Fix Python bindings for Connector::get_possible_crtcs() method
The method returns an std::vector of DRMObject, which isn't supported by
the latest pybind11 as explained in commit 706a44abb3aa. Fix it by
wrapping the method manually.
Fixes: 706a44abb3aa ("Update to latest pybind11")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
The method returns an std::vector of DRMObject, which isn't supported by
the latest pybind11 as explained in commit 706a44abb3aa. Fix it by
wrapping the method manually.
Fixes: 706a44abb3aa ("Update to latest pybind11")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
pykms: keep Card alive until Blob is gone
travis: add gcc6 & gcc7
Update to latest pybind11
Update to latest pybind11 HEAD. We can't use the latest tag (v2.2.0) as
it has a regression.
There were two problems when updating:
1) Difficulty in managing DrmObject derived classes
Most of the DrmObjects are owned by Card, and can't be allocated or
freed, but a few of them are allocated and freed by the user. For the
former, we need to use unique_ptr with py::nodelete, but that prevents
the latter from working.
The solution was to not tell the python that the latter classes derive
from DrmObject.
This seems to be missing feature in pybind11, but I think we can live
with it.
2) DrmObjects in STL containers
vector<T> where T is a DrmObject derived class doesn't work. We need to
have a manual wrapper to return vector<unique_ptr<T, py::nodelete>>
instead.
This also seems to be a pybind11 missing feature.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Update to latest pybind11 HEAD. We can't use the latest tag (v2.2.0) as
it has a regression.
There were two problems when updating:
1) Difficulty in managing DrmObject derived classes
Most of the DrmObjects are owned by Card, and can't be allocated or
freed, but a few of them are allocated and freed by the user. For the
former, we need to use unique_ptr with py::nodelete, but that prevents
the latter from working.
The solution was to not tell the python that the latter classes derive
from DrmObject.
This seems to be missing feature in pybind11, but I think we can live
with it.
2) DrmObjects in STL containers
vector<T> where T is a DrmObject derived class doesn't work. We need to
have a manual wrapper to return vector<unique_ptr<T, py::nodelete>>
instead.
This also seems to be a pybind11 missing feature.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
resman: use set<> instead of vector<>
kmstest: use resman
kmstest: rename ObjectType to ArgType
wbcap: support saving to file
utils: wbcap interlace support
utils: improve wbcap
Crtc: add set_mode() which doesn't take a fb
Connector: improve get_mode(string)
Card: add disable_all()
Videomode: add to_string()
kmscube: update drm resource allocation
kmscube: drop non-atomic support
kmscapture: fix capture videomode heuristic
kmscapture: clean up fb handling
kmscapture: fix v4l buftype
Rework framebuffer classes
Drop (I)MappedFramebuffer, as it doesn't really provide any value, and
have most of the methods be present in IFramebuffer with default
exception throwing implementation.
This gives us simpler way to use the framebuffers, as almost always we
can just use a pointer to IFramebuffer.
Drop (I)MappedFramebuffer, as it doesn't really provide any value, and
have most of the methods be present in IFramebuffer with default
exception throwing implementation.
This gives us simpler way to use the framebuffers, as almost always we
can just use a pointer to IFramebuffer.
card: fix compile warning
kmscube: compile fix
add ExtFramebuffer::prime_fd
py: drop the fancy event handling
Unfortunately the nice event handler added previously doesn't work: we
may get multiple page-flip events, which would lead to unref'ing the
passed python object multiple times, leading to memory corruption.
I guess it's only possible to pass a plain int as user data to commit()
and page_flip().
Unfortunately the nice event handler added previously doesn't work: we
may get multiple page-flip events, which would lead to unref'ing the
passed python object multiple times, leading to memory corruption.
I guess it's only possible to pass a plain int as user data to commit()
and page_flip().
kmstest: fix --sync mode
DRM sends page flips for each crtc in a commit. kmstest expected to get
a single flip event for a single commit, which caused --sync not to work
with two displays.
Fix this by making kmstest skip the first flip event.
DRM sends page flips for each crtc in a commit. kmstest expected to get
a single flip event for a single commit, which caused --sync not to work
with two displays.
Fix this by making kmstest skip the first flip event.
kmstest: add help text about env variables
kmstest: fix error in help text
kmsprint: print connectors even if disconnected
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
testpat: fix the location of second diagonal line
Merge branch 'color-features' of git://github.com/jsarha/kmsxx
plane_csc.py: Test for different YCbCr encodings
Add DrmPropObject.get_prop() and Property.enums to pykmsbase.cpp.
Add different YCbCr encodings.
Add Crtc::disable_mode() to pykmsbase.cpp.
Add ctm_test.py test for testing CRTC's CTM color matrix property.
cam.py: fix initial modeset
omapfb: add flags for memory alloc
omapfb: add enum Flags for OmapFB
py: move Rotation enum to __init__.py
py: add rottest.py
Add a test tool for rotation
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Add a test tool for rotation
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
omapfb: add TILER support
Add TILER rotation support for omapframebuffer.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Add TILER rotation support for omapframebuffer.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
testpat: white box in top left corner
draw_char: use black bg for yuv
pykms: add videomode related features
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
pykmsutil: add draw_text()
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
draw_rect: support yuv modes
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
py: tests: Double buffered one big buffer on all connected screens
The test uses Atomic Mode Setting only and moves one horizontal bar
up/down in the framebuffer - which stretches through all connected
displays.
The flip mode can be selected with --flipmode <single, separate> :
single: Page flip on all displays with one request (default)
separate: Separate page flip on the displays
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
The test uses Atomic Mode Setting only and moves one horizontal bar
up/down in the framebuffer - which stretches through all connected
displays.
The flip mode can be selected with --flipmode <single, separate> :
single: Page flip on all displays with one request (default)
separate: Separate page flip on the displays
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
py: omapfb: add missing properties
connector: add DPI connector type
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Add Connector.connected to pykmsbase
It can be used to check if the connector is connected or not
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
It can be used to check if the connector is connected or not
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Return primary plane already associated with the CRTC if it exists
The Crtc::get_primary_plane() method returns the first primary plane
that supports the CRTC. While being correct, this could lead to multiple
primary planes being associated with the CRTC, which can confuse
applications. To avoid that, return insead the primary plane already
associated with the CRTC if one exists, otherwise keep the current
behaviour.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
The Crtc::get_primary_plane() method returns the first primary plane
that supports the CRTC. While being correct, this could lead to multiple
primary planes being associated with the CRTC, which can confuse
applications. To avoid that, return insead the primary plane already
associated with the CRTC if one exists, otherwise keep the current
behaviour.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
py: Add in fence test using swsync
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
test.py: use atomic modesetting
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
trans-test.py: fix use of colors
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
resmgr: fix reserve_plane()
reserve_plane() had inverted check, and looked for any plane type but
the one that was requested.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
reserve_plane() had inverted check, and looked for any plane type but
the one that was requested.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
resmgr: add sanity checks
Add sanity checks to reserve_* methods, and return null if the give
connector/crtc is null.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Add sanity checks to reserve_* methods, and return null if the give
connector/crtc is null.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Merge branch 'universal-planes2' of git://github.com/jsarha/kmsxx
kmstest: check return values from reserve_*
utils: add EXIT_IF
Add plane_hog.py
plane_hog.py gets all possible planes for default connector's crtc,
enables them one by one, enables hdmi connector's crtc (if available)
and moves the planes there on by one.
plane_hog.py gets all possible planes for default connector's crtc,
enables them one by one, enables hdmi connector's crtc (if available)
and moves the planes there on by one.
pykms/pykmsutil.cpp: Add binding for reserve_generic_plane()
ResourceManager: reserve_generic_plane() for either primary or overlay
Add modeset_event.py
modeset_event.py tests committing a full mode set asynchronously and
receiving a flip event about it.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
modeset_event.py tests committing a full mode set asynchronously and
receiving a flip event about it.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Add a simple and hackish plane scaling test.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
py: add DrmObject.idx
Add color format related methods and memebers to pykmsbase.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Add Videomode::to_blob method to pykmsbase.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
kmsprint: show plane's possible crtcs
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
plane: add get_possible_crtcs()
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
py: fix AtomicReq.commit() return value
db.py: remove old code
kmstest: Add optional argument to the flip option to limit the flips
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
New event handling
The current event handling relies on the PageFlipHandlerBase class which
has to be implemented on the python side.
This patch implements a more versatile event handling, where any python
object can be passed as data to the commit or page flip, and it's up to
the python implementation to decide what to do with that data when
receiving the event.
Note that when doing the commit or page_flip, the ref count of the
given python object is incremented to keep it alive. The ref count is
decremented when reading the events with the new helper method
card.read_events(). This helper _has_ to be used to ensure the objects
get released properly.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
The current event handling relies on the PageFlipHandlerBase class which
has to be implemented on the python side.
This patch implements a more versatile event handling, where any python
object can be passed as data to the commit or page flip, and it's up to
the python implementation to decide what to do with that data when
receiving the event.
Note that when doing the commit or page_flip, the ref count of the
given python object is incremented to keep it alive. The ref count is
decremented when reading the events with the new helper method
card.read_events(). This helper _has_ to be used to ensure the objects
get released properly.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
py: db.py: Add command line argument to specify connector
When a command line argument is present, its value is used as a
connector name that the script will try to use.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
When a command line argument is present, its value is used as a
connector name that the script will try to use.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
py: Expose AtomicReq::add(std::map<>) method
Only the AtomiqReq::add version that takes a single property is
currently exposed through the Python bindings. Expose the add method
that takes a list of properties as well.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Only the AtomiqReq::add version that takes a single property is
currently exposed through the Python bindings. Expose the add method
that takes a list of properties as well.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
kmsview: Add connector command line argument
The argument allows specifying which connector to display on. When not
set, the current behaviour is preserved.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
The argument allows specifying which connector to display on. When not
set, the current behaviour is preserved.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
test.py: add dmabuf & omap options
py: add ExtFramebuffer
omapfb: add constructor with fourcc
ExtFb: pass params in vectors
py: add DumbFb properties
improve ExtFb
Inherit MappedFramebuffer and add map()
Inherit MappedFramebuffer and add map()
ExtFb: remove legacy constructor
PlaneType to bitmask
kmstest: remove get_default_connector()
use reserve_connector from ResourceManager
kmstest: Add --view option
mappedframebuffer.h: add missing include
fix race issue in threaded test pattern draw
Support python2 based pykms binding
Previously only binding with python3 was supported, this patch allows
compilation of pykms with python3 or python2. When compiling with
python2 some of the python scripts located in the py/test will not work
since they import python3 only modules
Signed-off-by: Alejandro Hernandez <ajhernandez@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Previously only binding with python3 was supported, this patch allows
compilation of pykms with python3 or python2. When compiling with
python2 some of the python scripts located in the py/test will not work
since they import python3 only modules
Signed-off-by: Alejandro Hernandez <ajhernandez@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Add README.md to custom targets
README: add note about python
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
py/tests: hpd test
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>