Implement support for sized data streams.
This commit is contained in:
parent
e542bda56f
commit
84562db7e4
60
display.js
60
display.js
@ -487,32 +487,21 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg)
|
||||
}
|
||||
if (this.streams[m.base.id].codec_type === SPICE_VIDEO_CODEC_TYPE_MJPEG)
|
||||
{
|
||||
var tmpstr = "data:image/jpeg,";
|
||||
var img = new Image;
|
||||
var i;
|
||||
for (i = 0; i < m.data.length; i++)
|
||||
{
|
||||
tmpstr += '%';
|
||||
if (m.data[i] < 16)
|
||||
tmpstr += '0';
|
||||
tmpstr += m.data[i].toString(16);
|
||||
}
|
||||
var strm_base = new SpiceMsgDisplayBase();
|
||||
strm_base.surface_id = this.streams[m.base.id].surface_id;
|
||||
strm_base.box = this.streams[m.base.id].dest;
|
||||
strm_base.clip = this.streams[m.base.id].clip;
|
||||
img.o =
|
||||
{ base: strm_base,
|
||||
tag: "mjpeg." + m.base.id,
|
||||
descriptor: null,
|
||||
sc : this,
|
||||
};
|
||||
img.onload = handle_draw_jpeg_onload;
|
||||
img.src = tmpstr;
|
||||
process_mjpeg_stream_data(this, m);
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == SPICE_MSG_DISPLAY_STREAM_DATA_SIZED)
|
||||
{
|
||||
var m = new SpiceMsgDisplayStreamDataSized(msg.data);
|
||||
if (this.streams[m.base.id].codec_type === SPICE_VIDEO_CODEC_TYPE_MJPEG)
|
||||
process_mjpeg_stream_data(this, m);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
if (msg.type == SPICE_MSG_DISPLAY_STREAM_CLIP)
|
||||
{
|
||||
var m = new SpiceMsgDisplayStreamClip(msg.data);
|
||||
@ -821,3 +810,30 @@ function handle_draw_jpeg_onload()
|
||||
this.o.sc.surfaces[this.o.base.surface_id].draw_count++;
|
||||
}
|
||||
}
|
||||
|
||||
function process_mjpeg_stream_data(sc, m)
|
||||
{
|
||||
var tmpstr = "data:image/jpeg,";
|
||||
var img = new Image;
|
||||
var i;
|
||||
for (i = 0; i < m.data.length; i++)
|
||||
{
|
||||
tmpstr += '%';
|
||||
if (m.data[i] < 16)
|
||||
tmpstr += '0';
|
||||
tmpstr += m.data[i].toString(16);
|
||||
}
|
||||
var strm_base = new SpiceMsgDisplayBase();
|
||||
strm_base.surface_id = sc.streams[m.base.id].surface_id;
|
||||
strm_base.box = m.dest || sc.streams[m.base.id].dest;
|
||||
strm_base.clip = sc.streams[m.base.id].clip;
|
||||
img.o =
|
||||
{ base: strm_base,
|
||||
tag: "mjpeg." + m.base.id,
|
||||
descriptor: null,
|
||||
sc : sc,
|
||||
};
|
||||
img.onload = handle_draw_jpeg_onload;
|
||||
img.src = tmpstr;
|
||||
}
|
||||
|
||||
|
11
enums.js
11
enums.js
@ -127,6 +127,10 @@ var SPICE_MSG_DISPLAY_DRAW_TRANSPARENT = 312;
|
||||
var SPICE_MSG_DISPLAY_DRAW_ALPHA_BLEND = 313;
|
||||
var SPICE_MSG_DISPLAY_SURFACE_CREATE = 314;
|
||||
var SPICE_MSG_DISPLAY_SURFACE_DESTROY = 315;
|
||||
var SPICE_MSG_DISPLAY_STREAM_DATA_SIZED = 316;
|
||||
var SPICE_MSG_DISPLAY_MONITORS_CONFIG = 317;
|
||||
var SPICE_MSG_DISPLAY_DRAW_COMPOSITE = 318;
|
||||
var SPICE_MSG_DISPLAY_STREAM_ACTIVATE_REPORT = 319;
|
||||
|
||||
var SPICE_MSGC_DISPLAY_INIT = 101;
|
||||
|
||||
@ -171,6 +175,13 @@ var SPICE_MAIN_CAP_NAME_AND_UUID = 1;
|
||||
var SPICE_MAIN_CAP_AGENT_CONNECTED_TOKENS = 2;
|
||||
var SPICE_MAIN_CAP_SEAMLESS_MIGRATE = 3;
|
||||
|
||||
var SPICE_DISPLAY_CAP_SIZED_STREAM = 0;
|
||||
var SPICE_DISPLAY_CAP_MONITORS_CONFIG = 1;
|
||||
var SPICE_DISPLAY_CAP_COMPOSITE = 2;
|
||||
var SPICE_DISPLAY_CAP_A8_SURFACE = 3;
|
||||
var SPICE_DISPLAY_CAP_STREAM_REPORT = 4;
|
||||
var SPICE_DISPLAY_CAP_LZ4_COMPRESSION = 5;
|
||||
|
||||
var SPICE_AUDIO_DATA_MODE_INVALID = 0;
|
||||
var SPICE_AUDIO_DATA_MODE_RAW = 1;
|
||||
var SPICE_AUDIO_DATA_MODE_CELT_0_5_1 = 2;
|
||||
|
@ -133,6 +133,10 @@ SpiceConn.prototype =
|
||||
msg.channel_caps.push(
|
||||
(1 << SPICE_MAIN_CAP_AGENT_CONNECTED_TOKENS)
|
||||
);
|
||||
else if (msg.channel_type == SPICE_CHANNEL_DISPLAY)
|
||||
msg.channel_caps.push(
|
||||
(1 << SPICE_DISPLAY_CAP_SIZED_STREAM)
|
||||
);
|
||||
|
||||
hdr.size = msg.buffer_size();
|
||||
|
||||
|
23
spicemsg.js
23
spicemsg.js
@ -1146,6 +1146,29 @@ SpiceMsgDisplayStreamData.prototype =
|
||||
},
|
||||
}
|
||||
|
||||
function SpiceMsgDisplayStreamDataSized(a, at)
|
||||
{
|
||||
this.from_buffer(a, at);
|
||||
}
|
||||
|
||||
SpiceMsgDisplayStreamDataSized.prototype =
|
||||
{
|
||||
from_buffer: function(a, at)
|
||||
{
|
||||
at = at || 0;
|
||||
var dv = new SpiceDataView(a);
|
||||
this.base = new SpiceStreamDataHeader;
|
||||
at = this.base.from_dv(dv, at, a);
|
||||
this.width = dv.getUint32(at, true); at += 4;
|
||||
this.height = dv.getUint32(at, true); at += 4;
|
||||
this.dest = new SpiceRect;
|
||||
at = this.dest.from_dv(dv, at, a);
|
||||
this.data_size = dv.getUint32(at, true); at += 4;
|
||||
this.data = dv.u8.subarray(at, at + this.data_size);
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
function SpiceMsgDisplayStreamClip(a, at)
|
||||
{
|
||||
this.from_buffer(a, at);
|
||||
|
Loading…
x
Reference in New Issue
Block a user