Switch to a smoother stretch algorithm on Windows and delete buffers from previous conversations on linux when switching back to peer list.
Review URL: http://webrtc-codereview.appspot.com/135003 git-svn-id: http://webrtc.googlecode.com/svn/trunk@488 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
3266d8d85d
commit
8811e5af02
@ -141,14 +141,12 @@ MainWindow::UI GtkMainWnd::current_ui() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cricket::VideoRenderer* GtkMainWnd::local_renderer() {
|
cricket::VideoRenderer* GtkMainWnd::local_renderer() {
|
||||||
if (!local_renderer_.get())
|
ASSERT(local_renderer_.get() != NULL);
|
||||||
local_renderer_.reset(new VideoRenderer(this));
|
|
||||||
return local_renderer_.get();
|
return local_renderer_.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
cricket::VideoRenderer* GtkMainWnd::remote_renderer() {
|
cricket::VideoRenderer* GtkMainWnd::remote_renderer() {
|
||||||
if (!remote_renderer_.get())
|
ASSERT(remote_renderer_.get() != NULL);
|
||||||
remote_renderer_.reset(new VideoRenderer(this));
|
|
||||||
return remote_renderer_.get();
|
return remote_renderer_.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,6 +232,10 @@ void GtkMainWnd::SwitchToConnectUI() {
|
|||||||
void GtkMainWnd::SwitchToPeerList(const Peers& peers) {
|
void GtkMainWnd::SwitchToPeerList(const Peers& peers) {
|
||||||
LOG(INFO) << __FUNCTION__;
|
LOG(INFO) << __FUNCTION__;
|
||||||
|
|
||||||
|
// Clean up buffers from a potential previous session.
|
||||||
|
local_renderer_.reset();
|
||||||
|
remote_renderer_.reset();
|
||||||
|
|
||||||
if (!peer_list_) {
|
if (!peer_list_) {
|
||||||
gtk_container_set_border_width(GTK_CONTAINER(window_), 0);
|
gtk_container_set_border_width(GTK_CONTAINER(window_), 0);
|
||||||
if (vbox_) {
|
if (vbox_) {
|
||||||
@ -270,6 +272,12 @@ void GtkMainWnd::SwitchToStreamingUI() {
|
|||||||
|
|
||||||
ASSERT(draw_area_ == NULL);
|
ASSERT(draw_area_ == NULL);
|
||||||
|
|
||||||
|
// Prepare new buffers for the new conversation. We don't
|
||||||
|
// reuse buffers across sessions to avoid possibly rendering
|
||||||
|
// a frame from the previous conversation.
|
||||||
|
remote_renderer_.reset(new VideoRenderer(this));
|
||||||
|
local_renderer_.reset(new VideoRenderer(this));
|
||||||
|
|
||||||
gtk_container_set_border_width(GTK_CONTAINER(window_), 0);
|
gtk_container_set_border_width(GTK_CONTAINER(window_), 0);
|
||||||
if (peer_list_) {
|
if (peer_list_) {
|
||||||
gtk_widget_destroy(peer_list_);
|
gtk_widget_destroy(peer_list_);
|
||||||
|
@ -22,6 +22,11 @@ const wchar_t MainWnd::kClassName[] = L"WebRTC_MainWnd";
|
|||||||
std::string GetDefaultServerName();
|
std::string GetDefaultServerName();
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
const char kConnecting[] = "Connecting... ";
|
||||||
|
const char kNoVideoStreams[] = "(no video streams either way)";
|
||||||
|
const char kNoIncomingStream[] = "(no incoming video)";
|
||||||
|
|
||||||
void CalculateWindowSizeForText(HWND wnd, const wchar_t* text,
|
void CalculateWindowSizeForText(HWND wnd, const wchar_t* text,
|
||||||
size_t* width, size_t* height) {
|
size_t* width, size_t* height) {
|
||||||
HDC dc = ::GetDC(wnd);
|
HDC dc = ::GetDC(wnd);
|
||||||
@ -192,8 +197,10 @@ void MainWnd::OnPaint() {
|
|||||||
long height = abs(bmi.bmiHeader.biHeight);
|
long height = abs(bmi.bmiHeader.biHeight);
|
||||||
long width = bmi.bmiHeader.biWidth;
|
long width = bmi.bmiHeader.biWidth;
|
||||||
|
|
||||||
if (remote_video_.get()->image() != NULL) {
|
const uint8* image = remote_video_->image();
|
||||||
|
if (image != NULL) {
|
||||||
HDC dc_mem = ::CreateCompatibleDC(ps.hdc);
|
HDC dc_mem = ::CreateCompatibleDC(ps.hdc);
|
||||||
|
::SetStretchBltMode(dc_mem, HALFTONE);
|
||||||
|
|
||||||
// Set the map mode so that the ratio will be maintained for us.
|
// Set the map mode so that the ratio will be maintained for us.
|
||||||
HDC all_dc[] = { ps.hdc, dc_mem };
|
HDC all_dc[] = { ps.hdc, dc_mem };
|
||||||
@ -214,7 +221,6 @@ void MainWnd::OnPaint() {
|
|||||||
::FillRect(dc_mem, &logical_rect, brush);
|
::FillRect(dc_mem, &logical_rect, brush);
|
||||||
::DeleteObject(brush);
|
::DeleteObject(brush);
|
||||||
|
|
||||||
const uint8* image = remote_video_->image();
|
|
||||||
int max_unit = std::max(width, height);
|
int max_unit = std::max(width, height);
|
||||||
int x = (logical_area.x / 2) - (width / 2);
|
int x = (logical_area.x / 2) - (width / 2);
|
||||||
int y = (logical_area.y / 2) - (height / 2);
|
int y = (logical_area.y / 2) - (height / 2);
|
||||||
@ -247,10 +253,18 @@ void MainWnd::OnPaint() {
|
|||||||
HBRUSH brush = ::CreateSolidBrush(RGB(0, 0, 0));
|
HBRUSH brush = ::CreateSolidBrush(RGB(0, 0, 0));
|
||||||
::FillRect(ps.hdc, &rc, brush);
|
::FillRect(ps.hdc, &rc, brush);
|
||||||
::DeleteObject(brush);
|
::DeleteObject(brush);
|
||||||
|
|
||||||
HGDIOBJ old_font = ::SelectObject(ps.hdc, GetDefaultFont());
|
HGDIOBJ old_font = ::SelectObject(ps.hdc, GetDefaultFont());
|
||||||
::SetTextColor(ps.hdc, RGB(0xff, 0xff, 0xff));
|
::SetTextColor(ps.hdc, RGB(0xff, 0xff, 0xff));
|
||||||
::SetBkMode(ps.hdc, TRANSPARENT);
|
::SetBkMode(ps.hdc, TRANSPARENT);
|
||||||
::DrawTextA(ps.hdc, "Connecting...", -1, &rc,
|
|
||||||
|
std::string text(kConnecting);
|
||||||
|
if (!local_video_->image()) {
|
||||||
|
text += kNoVideoStreams;
|
||||||
|
} else {
|
||||||
|
text += kNoIncomingStream;
|
||||||
|
}
|
||||||
|
::DrawTextA(ps.hdc, text.c_str(), -1, &rc,
|
||||||
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
|
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
|
||||||
::SelectObject(ps.hdc, old_font);
|
::SelectObject(ps.hdc, old_font);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user