not having a cat+subcat specified means that the options were ignored
when constructing the preferences tree in Qt (and possibly others).
(cherry picked from commit 90e1fe40da)
not having a cat+subcat specified means that the options were ignored
when constructing the preferences tree in Qt (and possibly others).
(cherry picked from commit f9b5677ada)
Chromecast transcoding code uses either Vorbis or MP3 for audio. For Vorbis,
quality=4 is used, but for MP3 no bitrate or quality setting is set, which
leads to default 96 kbps poor quality audio.
This patch explicitly sets 320 kbps bitrate for MP3, for much better audio
quality.
Tested on Chromecast 3.
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
(cherry picked from commit f74d5d54e8)
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
... and fix invalid pointer conversion from const void ** to void **
in xiph_PacketHeaders().
(cherry picked from commit 0fa1d4e111)
Signed-off-by: Hugo Beauzée-Luyssen <hugo@beauzee.fr>
On EOF, the sout can receive one last block, the drained one. In that case,
GetSubId() will fail since the sout chain is already stopped (in order to
drain). The decoder_t error state was set to true in that case, and next flush
calls were ignored.
Yes, this is an other hack and the chromecast is always dropping the last
drained buffer (it was already the case before). For the moment, I can't find a
proper solution without modyfing heavily the demux filter API (so no 3.0
backport).
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
Updated chromecast devices don't seem to accept webm live content that don't
start with a timestamp near 0.
(cherry picked from commit 7c340bc7a4)
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
Correctly handle additional failed load. Specifically x265 codec on chromecast
version 1 and 2 cause an idle state with an unhandled error.
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
(cherry picked from commit 1070b0601e)
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
In order for us to support streaming to more than one chromecast using
the same instance of libvlc (as through VLM), and with the same
options for the httpd, we will need to have a unique identifier for
each output.
These changes generates a random path upon initialization of the
relevant object, while also incorporating the current tick. There is
an extremely slim chance that two chromecast souts would try to create
the http bindings at the exact same time, but vlc_tick_now + a random
identifier is a "better safe than sorry" implementation.
In order to really dive down in the "better safe than sorry"-category,
we try three times before giving up.
fixes: #20380fixes: #20890
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
(cherry picked from commit 710a2ef496)
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
Both the path and port are available upon construction of the
ChromecastCommuncation, they also do not change during the lifetime of
the object.
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
(cherry picked from commit c4d351ccfb)
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
These changes includes usage of the relevant stream info helpers.
It also adds an additional slash to the art URI, so that items can be
accessed through "/chromecast/unique/unique/art/$ID", where $ID
denotes the art-id as used in the implementation, instead of
"[...]/art$ID". This is not a change in behavior as the URIs passed to
the device is per session, and the device is given notice of the URI
by us, it does not probe it implicitly.
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
(cherry picked from commit d0ed421fb2)
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
The previous implementation had hard-coded paths in several places,
and each place relied on other relevant part using the same paths.
From a maintainability perspective this is a mess, and bound to fail
one way or another.
These changes introduce helper-functions that can be called in places
where the values are needed, effectively adding a layer of protection
to maintainability issues by making sure everything is using the same
values.
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
(cherry picked from commit 92c90c5b0a)
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
The relevant code suffers from some immediate flaws, with no real
gain:
1. The implicit http-bind from within sout_StreamChainNew has a high
chance of colliding with other things in vlc (most notably a
web interface).
2. It does not bind to the same httpd URI as is later used in the
module, causing the check to signal false security in terms of
usability.
3. As the sout is created only to immediately be shut down, other
attempts (not made within the module) to create a relevant sout
will race with this "check".
Just because we succeed in Open does not mean that we will
succeed later on, nor does failure guarantee further failed
attempts.
4. There is no reason for us to check if a muxer is available at
this stage as it:
a) Does not send any data down the pipe, meaning that we might
fail anyway when we actually get started due to, as an
example, codec issues.
b) Does not match what might actually be used (avformat/webm
or avformat/mkv is selected further into the
implementation)
c) Is the wrong way of checking things. If we want to make
sure that an sout is created before some other work is
done, we should create an sout which we then use, _before_,
other work is done.
refs: #20380
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
(cherry picked from commit b59640ec08)
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
Since it can be mp2 codec that is not supported by chromecast devices.
(cherry picked from commit cdf276c35b)
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
Retry only when playing a new input in order to avoid retry busy loops.
(cherry picked from commit 400fa1a990)
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
Instead of just checking if a module exists. Indeed, a module (specially HW ones) is likely to fail during probe.
(cherry picked from commit a41ecd04a3)
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
std::nothrow will just prevent std::bad_alloc from being thrown, but
some of the member variables' constructors will throw std::runtime_error
(cherry picked from commit de91aed8dc)
Signed-off-by: Hugo Beauzée-Luyssen <hugo@beauzee.fr>
- Hide "video" option. This option should only be set by the core (via the
renderer item). If a user doesn't want video, he could disable the video
track now.
- Remove mux/mime options: this code has only been tested for the default
mime/mux, there is no point of changing it.
- Remove translations for privates options.
This make the chromecast advanced preferences more understandable.
(cherry picked from commit 65472a29a3)
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
This fixes inconsistency of reported time when changing es tracks.
(cherry picked from commit 6b2d7be9a9)
Signed-off-by: Thomas Guillem <thomas@gllm.fr>