[Spice-devel] [PATCH spice-html5 4/4] Display: Add support for the VP9 codec type

Tomáš Bohdálek tom.bohdalek at gmail.com
Thu Sep 7 09:49:42 UTC 2017


OK, I wil change it.

Tomáš

2017-09-07 11:39 GMT+02:00 Frediano Ziglio <fziglio at redhat.com>:

>
>
> Hi,
>
> I don't think so. Why do you think it would be better?
>
> Tomáš
>
> Is easier to extend when new codecs are added
>
> Frediano
>
> 2017-09-07 10:50 GMT+02:00 Frediano Ziglio <fziglio at redhat.com>:
>
>> >
>> > ---
>> >  display.js   | 26 ++++++++++++++++++++------
>> >  spiceconn.js |  2 ++
>> >  webm.js      | 12 ++++++++++--
>> >  3 files changed, 32 insertions(+), 8 deletions(-)
>> >
>> > diff --git a/display.js b/display.js
>> > index 0868f91..abd5b1a 100644
>> > --- a/display.js
>> > +++ b/display.js
>> > @@ -543,7 +543,8 @@ SpiceDisplayConn.prototype.process_channel_message
>> =
>> > function(msg)
>> >          else
>> >              this.streams[m.id] = m;
>> >
>> > -        if (m.codec_type == SPICE_VIDEO_CODEC_TYPE_VP8)
>> > +        if (m.codec_type == SPICE_VIDEO_CODEC_TYPE_VP8 ||
>> > +            m.codec_type == SPICE_VIDEO_CODEC_TYPE_VP9)
>> >          {
>> >              var media = new MediaSource();
>> >              var v = document.createElement("video");
>> > @@ -606,7 +607,8 @@ SpiceDisplayConn.prototype.process_channel_message
>> =
>> > function(msg)
>> >          if (this.streams[m.base.id].codec_type ===
>> >          SPICE_VIDEO_CODEC_TYPE_MJPEG)
>> >              process_mjpeg_stream_data(this, m, time_until_due);
>> >
>> > -        if (this.streams[m.base.id].codec_type ===
>> > SPICE_VIDEO_CODEC_TYPE_VP8)
>> > +        if (this.streams[m.base.id].codec_type ===
>> > SPICE_VIDEO_CODEC_TYPE_VP8 ||
>> > +            this.streams[m.base.id].codec_type ===
>> > SPICE_VIDEO_CODEC_TYPE_VP9)
>> >              process_video_stream_data(this.streams[m.base.id], m);
>> >
>> >          return true;
>> > @@ -640,7 +642,8 @@ SpiceDisplayConn.prototype.process_channel_message
>> =
>> > function(msg)
>> >          var m = new SpiceMsgDisplayStreamDestroy(msg.data);
>> >          STREAM_DEBUG > 0 && console.log(this.type + ":
>> MsgStreamDestroy id"
>> >          + m.id);
>> >
>> > -        if (this.streams[m.id].codec_type ==
>> SPICE_VIDEO_CODEC_TYPE_VP8)
>> > +        if (this.streams[m.id].codec_type ==
>> SPICE_VIDEO_CODEC_TYPE_VP8 ||
>> > +            this.streams[m.id].codec_type ==
>> SPICE_VIDEO_CODEC_TYPE_VP9)
>> >          {
>> >              document.getElementById(this.
>> parent.screen_id).removeChild(this.streams[m.id].video);
>> >              this.streams[m.id].source_buffer = null;
>> > @@ -1036,14 +1039,24 @@ function handle_video_source_open(e)
>> >  {
>> >      var stream = this.stream;
>> >      var p = this.spiceconn;
>> > +    var codec_type;
>> >
>> >      if (stream.source_buffer)
>> >          return;
>> >
>> > -    var s = this.addSourceBuffer(SPICE_VP8_CODEC);
>> > +    if (this.stream.codec_type == SPICE_VIDEO_CODEC_TYPE_VP8)
>> > +    {
>> > +        codec_type = SPICE_VP8_CODEC;
>> > +    }
>> > +    else
>> > +    {
>> > +        codec_type = SPICE_VP9_CODEC;
>> > +    }
>> > +
>>
>> Would not be better to use a switch ?
>>
>> > +    var s = this.addSourceBuffer(codec_type);
>> >      if (! s)
>> >      {
>> > -        p.log_err('Codec ' + SPICE_VP8_CODEC + ' not available.');
>> > +        p.log_err('Codec ' + codec_type + ' not available.');
>> >          return;
>> >      }
>> >
>> > @@ -1054,7 +1067,8 @@ function handle_video_source_open(e)
>> >      listen_for_video_events(stream);
>> >
>> >      var h = new webm_Header();
>> > -    var te = new webm_VideoTrackEntry(this.stream.stream_width,
>> > this.stream.stream_height);
>> > +    var te = new webm_VideoTrackEntry(this.stream.stream_width,
>> > this.stream.stream_height,
>> > +                                      this.stream.codec_type);
>> >      var t = new webm_Tracks(te);
>> >
>> >      var mb = new ArrayBuffer(h.buffer_size() + t.buffer_size())
>> > diff --git a/spiceconn.js b/spiceconn.js
>> > index 78d5820..4c7bcaf 100644
>> > --- a/spiceconn.js
>> > +++ b/spiceconn.js
>> > @@ -147,6 +147,8 @@ SpiceConn.prototype =
>> >                          (1 << SPICE_DISPLAY_CAP_CODEC_MJPEG);
>> >              if ('MediaSource' in window &&
>> >              MediaSource.isTypeSupported(SPICE_VP8_CODEC))
>> >                  caps |= (1 << SPICE_DISPLAY_CAP_CODEC_VP8);
>> > +            if ('MediaSource' in window &&
>> > MediaSource.isTypeSupported(SPICE_VP9_CODEC))
>> > +                caps |= (1 << SPICE_DISPLAY_CAP_CODEC_VP9);
>> >              msg.channel_caps.push(caps);
>> >          }
>> >
>> > diff --git a/webm.js b/webm.js
>> > index 789da14..c697135 100644
>> > --- a/webm.js
>> > +++ b/webm.js
>> > @@ -88,6 +88,7 @@ var EXPECTED_PACKET_DURATION                = 10;
>> >  var GAP_DETECTION_THRESHOLD                 = 50;
>> >
>> >  var SPICE_VP8_CODEC                         = 'video/webm;
>> codecs="vp8"';
>> > +var SPICE_VP9_CODEC                         = 'video/webm;
>> codecs="vp9"';
>> >
>> >  /*----------------------------------------------------------
>> ------------------
>> >  **  EBML utility functions
>> > @@ -467,7 +468,7 @@ webm_AudioTrackEntry.prototype =
>> >      },
>> >  }
>> >
>> > -function webm_VideoTrackEntry(width, height)
>> > +function webm_VideoTrackEntry(width, height, codec_type)
>> >  {
>> >      this.id = WEBM_TRACK_ENTRY;
>> >      this.number = 1;
>> > @@ -482,8 +483,15 @@ function webm_VideoTrackEntry(width, height)
>> >      this.codec_decode_all = 0; // fixme - check
>> >      this.seek_pre_roll = 0; // 80000000; // fixme - check
>> >      this.codec_delay =   80000000; // Must match codec_private.preskip
>> > -    this.codec_id = "V_VP8";
>> >      this.video = new webm_Video(width, height);
>> > +    if (codec_type == SPICE_VIDEO_CODEC_TYPE_VP8)
>> > +    {
>> > +        this.codec_id = "V_VP8";
>> > +    }
>> > +    else
>> > +    {
>> > +        this.codec_id = "V_VP9";
>> > +    }
>> >  }
>> >
>> >  webm_VideoTrackEntry.prototype =
>>
>> Frediano
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20170907/2cbbf537/attachment-0001.html>


More information about the Spice-devel mailing list