grutil: Add muted/volume properties to HTMLVideoTexture

This commit is contained in:
rdb 2026-01-24 13:23:28 +01:00
parent 626e419972
commit 49955343be
2 changed files with 54 additions and 0 deletions

View File

@ -229,6 +229,47 @@ is_playing() const {
}, this);
}
/**
* Returns true if the video own audio is muted. True by default.
*/
bool HTMLVideoTexture::
is_muted() const {
return EM_ASM_INT({
return window._htmlVideoData[$0].video.muted;
}, this);
}
/**
* Sets whether the video's own audio is muted.
*/
void HTMLVideoTexture::
set_muted(bool muted) {
EM_ASM({
window._htmlVideoData[$0].video.muted = ($1 !== 0);
}, this, muted);
}
/**
* Returns the audio volume of the video element, in the range 0.0 to 1.0.
*/
double HTMLVideoTexture::
get_volume() const {
return EM_ASM_DOUBLE({
return window._htmlVideoData[$0].video.volume;
}, this);
}
/**
* Sets the audio volume in the range 0.0 to 1.0. Note that you must also
* unmute the audio using the muted property.
*/
void HTMLVideoTexture::
set_volume(double volume) {
EM_ASM({
window._htmlVideoData[$0].video.volume = $1;
}, this, volume);
}
/**
* A factory function to make a new HTMLVideoTexture, used to pass to the
* TexturePool.

View File

@ -25,6 +25,10 @@
* - No RAM access of video data is possible
* - No explicit synchronization with audio
* - No loop count
*
* Unlike MovieTexture, this has an additional "muted" attribute which is true
* by default but can be set to false in order to play the video's audio via
* the browser interface. The "volume" property can configure the volume.
*/
class EXPCL_PANDA_GRUTIL HTMLVideoTexture : public Texture {
PUBLISHED:
@ -47,6 +51,12 @@ PUBLISHED:
double get_play_rate() const;
bool is_playing() const;
public:
bool is_muted() const;
void set_muted(bool muted);
double get_volume() const;
void set_volume(double volume);
PUBLISHED:
MAKE_PROPERTY(video_length, get_video_length);
MAKE_PROPERTY(video_width, get_video_width);
@ -57,6 +67,9 @@ PUBLISHED:
MAKE_PROPERTY(play_rate, get_play_rate, set_play_rate);
MAKE_PROPERTY(playing, is_playing);
MAKE_PROPERTY(muted, is_muted, set_muted);
MAKE_PROPERTY(volume, get_volume, set_volume);
public:
static PT(Texture) make_texture();