~thopiekar/miracle/+git/miraclecast-albfan:derekdai-master-squashed

Last commit made on 2022-05-29
Get this branch:
git clone -b derekdai-master-squashed https://git.launchpad.net/~thopiekar/miracle/+git/miraclecast-albfan

Branch merges

Branch information

Name:
derekdai-master-squashed
Repository:
lp:~thopiekar/miracle/+git/miraclecast-albfan

Recent commits

9df83ab... by Alberto Fanjul Alonso

Fix cmake compilation for new dispd daemon

8b455e1... by Derek

source-impl: Squashed derekdai fork

fix byte order of DHCP_SERVER_ID option

If miraclecat is GO, miracle-dhcp runs as server, it send out SERVER_ID
option in little endian, causes non-GO peer connect to wrong IP address, so
RTSP connection can't be established.

In scenario like, say Android (GO) <-> miracalcast (non-GO), the DHCP service
is provided by Android, in this case, the SERVER_ID is in expected byte order
(big endian).

set audio=False by default

since gstplayer has argument --audio to enable audio support but no
way to disable it, audio=False might a better choise.

If we left audio=True and incoming stream has video only, the whole
pipeline will be blocked and wait for audio stream.

init copy & modify

calculate array size of resolutions at build time instead of tailing null element

match resolution from high to low

init source side implementation

add option [-f|--full-screen] to switch to full screen mode at start up

initial sender implementation

integrate miracle-sender with miracast-srcctl

stop sender when peer freed

source implement + sender talk via dbus

miracle-wifid: fix some leaks of wpas_message

stability: increase gcc warning level

miracle-sender: change bus name from org.freedesktop.miracle.Sender to org.freedesktop.miracle

gstplayer: set sync=false to reduce latency

miracle-wifid: fix call waitid() with NULL pointer issue reported by valgrind

rename dbus name back to org.freedesktop.miracle.Sender and variety kinds of tunning

encode video with x264enc temperarily to prevent decoding issue on dongle

stop sender properly after session end

miracle-srcctl: fix memory management issues

Make miracle-wifid conexists with other network tools

The new option --lazy-managed will let miracle-wifid don't managed the
links automatically. Instead, the link will be managed only when the new
DBus property Managed was set to true. So this will be possible that
miracle-wifid could be conexists with other network tools like
networkmanager.

For example, unmange the device in networkmanager with setting the DBus
property org.freedesktop.NetworkManager.Device.Managed to false and
manage it in miracle-wifid with setting
org.freedesktop.miracle.wifi.Link.Managed to true, then both them could
works and don't need to kill each other.

Besides, there is new command named make-managed in miracle-wifictl and
miracle-sinkctla.

miracle-wifid: add dbus & systemd service files to support dbus activation

miracle-wifid: remove duplicated link & peer dbus nodes by checking prefix

miracle-srcctl: fix some warming

miracle-wifid: add MACAddress property to link

miracle-wfdctl: init commit

miracle-*ctl: remove some debugging log messages

miracle-*ctl: resolve object parsing issue in ctl_wifi_fetch()

while parsing ctl_peer and ctl_link objects, if a ctl_peer appear prior
to its related ctl_link, -EINVAL is reported, and miracle-*ctl will quit
immediately.

miracle-*ctl: fix label leak

miracle-wifid: let the format of wfd_dev_info compliant with wfd_subelems to ease parsing

miracle-*ctl: remove N_ELEMENTS() and use SHL_ARRAY_LENGTH() instead

miracle-*ctl: rename resolution_bitmap to wfd_resolution and add progressive field

remove vim settings from files

miracle-srcctl: rename ctl_src to wfd_src

miracle-wfdctl: first revision which can create TCP connection of WFD session between peers, controled through DBus

In this revision, the procedure of session negotiation is not yet
completed but only TCP connection can be established between peers.

You can try it by run script `res/miracle-wfdctl-demo` to see how it
work.

miracle-wfdctl-demo: wait for property chainging and object apperance by
busctl instead of sleep

miracle-*ctl: update links and peers when wifid up or down

miracle-wfdctl-demo: cleanup before exit

ignore .vimrc from being managed by git

miracle-wfdctl: now we can establish WFD session multiple times

in this revision, the source side RTSP protocol is not implemented
completely, the focus is on stability, DBus interfaces.

add debian support prepared by Guo Shuang

miracle-wfdctl-demo: add an optional argument to specify link index of
NetworkManager

miracle-wfdctl: refactoring to remove repeated snippets and centralize the
dispatching of request and reply

add -fstack-protector-strong to capture more stack issues

add miraclecast.links to create symlink for DBus activated systemd
services

miracle-wfdctl: return -EINVAL instead of being aborted by assert() when
rtsp message ID is invalid

miracle-*ctl: add *_from_string() and *_to_string() for wfd-video-formats and
wfd-audio-codecs

miracle-wfdctl: finish migration of source side rtsp protocol

remove unused files

fix links of services for debian package

move down trap command to prevent triggered by runing with no argument

remove unused #include

miracle-wfdctl: add timeout value and Range header to the reply of PLAY request

test compiler flag -fstack-protector-strong before set

miracle-wfdctl: run gst-launch to generate video stream with hardcoded
environment

miracle-wfdctl: fix return uninitialized variable value issue

add struct wfd_arg to generalize passing of arguments

miracle-*ctl: fix and enhance wfd_subelement parser

miracle-wfdctl: remove unused function and improve log message for
peer new & delete

rename macro arguement from v to _v to prevent name confliction

add support for signed and unsigned int for wfd_arg

refactoring getter/setter for dict type of wfd_arg to remove declaration
of temp variable

add wfd_arg_list type of wfd_arg

miracle_wfdctl: control flow and passing arguments with wfd_arg instead
of keep adding new structure fields

miracle-wfdctl: print friendly name when peer shows up

miracle-wfdctl: fix mapping from rtsp_message to rtsp_message_id

miracle-wfctl: reply 'request not implemented' instead of abort by assert()

check gcc version to ensure c11 generic select feature

update dependencies for debian based distro

miracle-wfdctl: acquire DISPLAY, XAUTHORITY and XDG_RUNTIME_DIR from
environment, instead of hardcode

miracle-wfdctl: fix wfd_session_end() recursive calling issue

miracle-wfdctl: add handler for PAUSE, PLAY and TEARDOWN methods

miracle-wfdctl: clarify teardown procedure of session

miracle-wfdctl: delay for 100ms before start sending stream to sink

miracle-wfdctl: compare wfd-standby and wfd-idr-request by message body

miracle-wfdctl: user now can select video mode through DBus interface

miracle-wfdctl: fix typo in systemd service file

miracle-wfdctl: change session type from uint64_t to unsigned int

miracle-wfdctl: do not launch gstreamer if DO_NOT_LAUNCH_GST environment
variable is set while miracle-wfdctl running

miracle-wfdctl: remove unused Range header from reply

add compiler flag to do sanity check of undefined behaviours.

relax permissions checking to let non-privileged use miracalcast.

we will enhance this by fine grained permission conrol latter.

since we relaxed the permissions to talk to wifid and wfdctl, so there is
no need to run miracle-wfdctl-demo with sudo. but to kill these two
privileged services, the killall still need sudo

miracle-wfdctl: integrate sd_event with GMainLoop for running gstreamer
in process instead of fork n exec gst-launch

miracle-wfdctl: encoding video stream with gstreamer library instead of
gst-launch-1.0

miracle-wfdctl-demo: run tcpdump with sudo

miracle-wifid: change managed property of link by method call instead of
set property due to wpa_supplicant needs time to get ready

miracle-wfdctl: include header <gst/gst.h> for resolving compiler warning

miracle-wfdctl: add rtcp and audio supporting to gstreamer pipeline

miracle-wfdctl: fix session removal dbus notification

miracle-wfdctl: fix variety kinds of dbus interface issues

miracle-wfdctl: fix sink removal notifcation

fix typo in miracle-wifid.service

miracle-wfdctl: set XAUTHORITY and DISPLAY before create gstreamer
pipeline, and now we can pass device name to pulseaudio

miraclw-wfdctl: fix typo of dbus signal names

miraclw-wfdctl: now you can cast only specified xid or xname to sink

miracle-wfdctl: fine tune gstreamer pipeline

miracle-wfdctl: fix argument passing for ximagesrc

miracle-wfdctl: send video only stream if no audio device specified

update dependencies of systemd services

miracle-wfdctl: reply rtsp request with date header in locale
en_US.UTF-8

miracle-wrdctl-demo: capture packets on p2p wnic with tshark instead of
tcpdump

miracle-wfdctl: set ximagesrc as live mode to prvent it preroll in pause
state

miracle-wfdctl: fine tune codec to compliant with WFD spec + H264
profile/level

miracle-wfdctl: disable audio encoding temparary

miracle-wfdctl: save captured packets to .pcap file instead of print out
on console

update dependency information

miracle-wfdctl: remove extra NULL parameter

miracle-wfdctl: do not expose rtsp_message_id_to_string() to outside
world

miracle-wfdctl: handle gst messages and reflect state onto session

miracle-wfdctl: encode audio with voaacenc instead of avenc_aac to get
closer to WFD spec

rename miracle-wfdctl to miracle-dispd

change argument types of wfd_sink_start_session()

To workaround valac issue

miracle-wfdctl: fix pointer check issue

add a demostration for wifid + dispd

reorganize demo, make it looks like running in sequential instead of trigger by async events

miracle-dispd: fix monitor geometry calculation issue

remove miracle-wfdctl-demo, replaced by demo/miracle-wfdctl

demo/miracle-wfdctl: fix some build issues for GDK version older then
3.22

update dependencies in debian/ for demo/

update cmake minimum requirement from 2.8 to 3.0.2 due to usage of version comparasion of if command

check valac version to decide whether or not to use new Gdk.Monitor class

add install() for demo/miracle-wfdctl

add mission dependencies to debian/control

miracle-dispd: merge patch from Meelis

acquire ownership through Link.Manage()/Link.Unmanage() instead of set Link.Managed property

demo/miracle-wfdctl: better handling session tearing down

move definitions related to miracle-dispd from src/ctl to src/disp

demo/miracle-wfdctl: handle SIGINT to exit gracefully

miracle-dispd: relax checking for peer with empty wfd_subelements

miracle-dispd: fix symlink for dbus-org.freedesktop.miracle.wfd.service
which is an alias of miracle-dispd.service

demo/miracle-wfdctl: log message tweaks

miracle-dispd: add watchdog and SIGKILL for it

to prevent no reponse and unable to be terminated issue. this is a temp solution

miracle-wifid: fix signal emittion of FormationFailure

miracle-wfdctl: update description of DBus interfaces

miracle-dispd: notify systemd about the service readiness

miracle-wifid: postpone the emittion of managed signal after the status
query

demo/miracle-wfdctl: maintain DBus interfaces by .vala files instead of generate from .xml which have only sync methods

miracle-dispd: use software codec instead of vaapi accelerated codec

miracle-dispd: add error report log to handle_replay()

miracle-dispd, demo/miracle-wfdctl: improve error handling and reporting

miracle-dispd: fix output resolution to 1080p@30

miracle-wifid: add Link.P2PState for checking P2P supporting status

demo/miracle-wfdctl: Wait for P2PState changing before do P2P scanning

add missing build-time dependencies

fix loop boundary checking

miracle-dispd: fix some uninitialized variable accessing issues

demo/miracle-wfdctl: remove unused files

add meson build supporting

remove install script and install scripts with install_data()

handle meson optoins properly

quote string entries with configuration_data.set_quoted() instead of by ourself with configureation_data.set()

remove starting `/` in front of installation path of DBus policy file

demo/miracle-wfdctl: rollback method definitions in dbus interfaces from async to sync

demo/miracle-wfdctl: teardown session more gracefully

miracle-dispd: stablizing and removing memory leak

miracle-dispd: put back gstreamer

in this version, the pipeline can be stopped properly, but the gst &
glib allocated memory can't be release cleanly (which won't
accumulate)

Change-Id: I242b106158db647070e7852b84f6f90b6bbd96f4

miracle-dispd: remove some compiler warmings

Change-Id: Ief2ae8e2992c2fee34fe560af73deb955a9186de

demo/miracle-wfdctl: log more info about DBus operation

Change-Id: Ic44a6a2ca4585e6aa1983885b4730ccee6fd3d33

remove address sanitizer flag from default options

let user or packaging system to decide whether or not to use it

Change-Id: I27e7f7eae3f79431a1ec7dc69d5f372677dadbad

miracle-wifid: rename link_set_managed()

rename to prevent confusing with managed event notification

Change-Id: I0f0d01f97156044bbb225e199b2717d5ea9c1a24

miracle-wifid: remove unused function

Change-Id: Ic2709a3661914fd9e0708c33649118feededa7f6

miracle-wifid: cleanup change notification of Link.Managed property

Change-Id: Ia5b056151e07219f0e6cc34dbc9fc2149f929a36

miracle-wifid: minor tweaks of log messages and identation

Change-Id: Id9e98583f3256c83cf48f18cf08740849ded3cca

miracle-wifid: fix crashing on link removing issue

wifid crashes when link removing (either unplug usb wlan dongle or
unload kernel module) due to double

Change-Id: I9480a095659752343e505eb41b380d1ab3cd322a

miracle-wifid: fine tune P2P state notification timing

Change-Id: Idb111b90109010733b96d653c2d6d7855ebc781f

miracle-disp: extracting encoder, part1

Change-Id: Ic9293e9cf379d352c75701834f17fa553f0bf52d

miracle-dispd: refactory session startup function

Change-Id: If1940a5823171d35230d29051d79c9827efc054f

use meson default build type instead of debugoptimized

Change-Id: I39bdc3e9df61c681b7ec5800a9e57fc7e9971cb0

migrate more gstreamer code to res/gstencoder

Change-Id: Id5098e37fb1eabb2906505f26969e6d8cedad519

miracle-dispd: add struct dispd_encoder as encoder client

since wait for the availability of newly spawned process and communicate
with it is a highly async task, wrapping in a isolated class is a better
choise.

Change-Id: I7201da49f379c65014123269ed9e0279bcb8c918

miracle-dispd: cleanup and reorganize header

Change-Id: I0067d59d89f79af53ae7291894191edb33789ab2

miracle-dispd: rename field from ref_count to ref

Change-Id: Ia8138c0609b0100dd2784734287a4b3964beacbd

miracle-dispd: unify log message

Change-Id: I17c7cb0c64ddaecd09ff59f65dcb0e745f6b7174

miracle-dispd: log if a function call returns error

it is easier to trace back to the location where the error occured
by logging the return code instead of simply return a error number

Change-Id: Ic711af32a1e80d9da9317269521a4745099e30cc

miracle-dispd: extract encoder from dispd, part 2

Change-Id: Ie61daa87a83b875013c525fe3f15222bf9057926

miracle-dispd: complete cmake build for extracted encoder

Change-Id: I5635bffdb8e1a0a693893e22837de6a8a0071fbe

miracle-dispd: improve encoder lifecycle management

Change-Id: Ic651e4795e4c9579978fe3e3529d8d61e739ffd1

miracle-dispd: replace assert() with assert_?ret?()

for capturing more information about buggy behaviours, more
    validations and loggings are added

Change-Id: I57e11d201324ed10b2218c9e72627759aae619c9

remove valgrind checking since now it is optional

Change-Id: I39dc6b3e23307fd039775983b6d68878547523ba

miracle-wifid: fix the timing of notification of P2P availability

Change-Id: I86c453256b614022db5d941d64984f9eecd4ef39

miracle-dispd: fix definition of wfd_session_is_established()

Change-Id: I61638bcb4e17059b5b9e37252894ab35d524d7cf

gstencoder: exit if pipeline encounter error, EOS or enter NULL state

Change-Id: Id9934d144bf023b301d92b24cc1cafcf2bac3b8e

miracle-dispd: add timer to ensure the termination of encoder process

Change-Id: I282136c79392137f2501f82009154087ee9649be

gstencoder: add license declaration

Change-Id: Ia2d7458d028e7d0406c3eb2489211c5daa86149d

gstencoder: print final pipeline description to ease debugging

Change-Id: Ib5d9bfea0760f401033b7e8982a14ae23f70d601

miracle-dispd: do not link with gstreamer libraries

Change-Id: Ie178235579429647de6e7e4cf738ce814e835424

miracle-dispd: minor value returning style tunning

Change-Id: I608154ffcbe0f25b4bfa9f78d0f457afe1e4fb89

miracle-dispd: more logging and assertions

Change-Id: I0450b9144390b12eed0646c4a4eacf6beed6ae91

miracle-dispd: improve session life cycle management

Change-Id: Icb43664439002f76d7f64252f4ba79533d04ba43

miracle-dispd: run encoder with user privilege

now we run encoder with unprivileged user and talk through session bus

Change-Id: I09b3b8b15e5a7c7e9b883b7c9dbac601c13f458c

gstencoder: fix untested execution path which has pipeline syntax issue

Change-Id: I1d170666852c33e96c989468fc733d065f777bd4

miracle-wfdctl: add options -b and -r

add options -b and -r to control whether or not to acquiring or
releasing ownershipt of WNIC

Change-Id: Iaa9fdac15a7d1e23053b57500b978e0c026fa50c

miracle-dispd: fix session leaking issue

Change-Id: I1ececf598fedf601edfd7c7208ffce72a750f8cd

miracle-dispd: terminate with SIGTERM instead of SIGKILL

Change-Id: I3b46d3d50fc11c8f3487cc241947b556196e8ba6

miracle-dispd: ignore peers which has no valid wfd_supplicant

Change-Id: Ifd7225a944fb0312eb3fe0c575b82a9c95c6ab14

miracle-dispd: minor log message tweaks

Change-Id: I75cf47bb2640270729d1643487ae5cc7f8617446

fix creation paths of symlinks of DBus activated systemd services

prepend $ENV{DESTDIR} to the path which is abs path get from systemd.pc

Change-Id: Id07801a1f513fb421f653cb4b2c943d8841a74f6

demo/miracle-wfdctl: broadcast as source only device

Change-Id: Id159332fc644e09990abdebffa8fa4b9f8b2fc28

reload systemd units after installation

Change-Id: I98cf764f5dbbe5fe06a136e3633a3304e8e4401e

miracle-dispd: add hardware accelection video encoding back to gstencoder

Change-Id: I577082a70da61b6266e67c0b8611662ae9bc316c

build vala code with cmake modules instead of custom_command()

Change-Id: Ib0bc561441c3664c00e73e66864597343f3f75e8

remove 'org.freedesktop.' prefix from dbus interface source files

Change-Id: Ice1ef49ca1ad3b8f36c8b4a5f8f35769df262eb9

move miracle-wfdctl from demo/ to res/

Change-Id: I37df75135e4713a73d3c63353c9a17dc248e2d7e

gstencoder: fallback to sw encoder if vaapi encoder not available

Change-Id: I8329fc191d60188c2098434d5db8a4aa2b3fbec2

miracle-dispd: minor interface tweaks betwen wfd_session and wfd_out_session

Change-Id: Ib0c65ab64d543d5fce8908f6c47dbfc2acf47763

miracle-dispd: add keep-alive messages

Change-Id: Ib8fc055789a1bd0a6df3075b176385407c17a74c

miracle-dispd: remove unused log messages

Change-Id: I7460f6173815f054c0dc51accf96a531f6faf4b1

miracle-dispd: minor tweaks of object life cycle transfering

Change-Id: Iafefe39652d9ade06c58e41f091a30df274cb091

update gstreamer1.0-vaapi version we depend on

Change-Id: Iacf53af83c151c6746f778a97201ed3f7bd55504

miracle-wifid: reduce caps from .service file

Change-Id: I8434fe9dfcf141156635d7a6f8a9c2aaa4469263

miracle-dispd: reduce caps from .service file

Change-Id: Ibfc14aca1c03b8cd6b50a49d5128da8597acb898

miracle-dispd: set no new priviledge flag before exec encoder

Change-Id: I1b7f18a704203fc60a35b67f09936095ae6398f0

miracle-dispd: rename files and class names to make naming consistent

Change-Id: Id2f5a8d6bbfbbd205dbe25e8b8bc0ddd289591e5

remove tests for security related compiler flags

Change-Id: Ia51167abc10c4c8bc03f58883aca06e05879c6e9

miracle-dispctl: fine tune ctrl+c handling

Change-Id: Ic5752cea7b64307c3c2d8dd0a8389d3b18ab3339

miracle-wfdctl: enhance handling of user termination (ctrl+c)

Change-Id: Ifa2b1ee85b2abf4cc0d9d7f40c452517cb94761d

miracle-wfdctl: fix GIOChannel ref leak

Change-Id: I12e647f9b4f13aaa0aedf81907aa251675d2be32

miracle-dispd: fix session life-cycle managed issue

when a session is destroyed due to peer free event, dispd_out_session must
detach from sink to it won't cause double free.

Change-Id: I71ad7e977fa71ec84f12f5e914786aa24a650f34

miracle-sinkctl: do not quote the value of 'Public' header of OPTION method

Change-Id: I1e3994517f492aa7d9996494110077c81acc41b4

miracle-dispd, gstencoder: enable audio supporting

Change-Id: I4d72782516ffff487010cd94cc47ec68133ff257

relates #4

59df9a4... by Alberto Fanjul Alonso

Add CI badge status

3a459e5... by Alberto Fanjul Alonso

Add docker for CI

46089b1... by Graham White <email address hidden>

Add spec file for building rpm files

c3c868e... by Alberto Fanjul Alonso

refactor to fix clang AST parsing

8151bb8... by Alberto Fanjul Alonso

whitespace

4e67272... by Alberto Fanjul Alonso

Avoid log errors

Do not output error settings null values or configuring unmanaged links

8b76e3c... by fasheng

Make miracle-wifid conexists with other network tools

The new option --lazy-managed will let miracle-wifid don't managed the
links automatically. Instead, the link will be managed only when the new
DBus property Managed was set to true. So this will be possible that
miracle-wifid could be coexists with other network tools like
networkmanager.

For example, unmanage the device in networkmanager with setting the DBus
property org.freedesktop.NetworkManager.Device.Managed to false and
manage it in miracle-wifid with setting
org.freedesktop.miracle.wifi.Link.Managed to true, then both them could
works and don't need to kill each other.

Besides, there is new command named make-managed in miracle-wifictl and
miracle-sinkctl.

closes #135, #75

ec7e11c... by Alberto Fanjul Alonso

bash completion with lazy load