Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Side by Side Diff: webrtc/modules/video_render/android/java/src/org/webrtc/videoengine/ViESurfaceRenderer.java

Issue 1929223003: Reland of Delete video_render module. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 package org.webrtc.videoengine;
12
13 // The following four imports are needed saveBitmapToJPEG which
14 // is for debug only
15 import java.io.ByteArrayOutputStream;
16 import java.io.FileNotFoundException;
17 import java.io.FileOutputStream;
18 import java.io.IOException;
19 import java.nio.ByteBuffer;
20
21 import android.graphics.Bitmap;
22 import android.graphics.Canvas;
23 import android.graphics.Rect;
24 import android.view.SurfaceHolder;
25 import android.view.SurfaceView;
26 import android.view.SurfaceHolder.Callback;
27
28 import org.webrtc.Logging;
29
30 public class ViESurfaceRenderer implements Callback {
31
32 private final static String TAG = "WEBRTC";
33
34 // the bitmap used for drawing.
35 private Bitmap bitmap = null;
36 private ByteBuffer byteBuffer = null;
37 private SurfaceHolder surfaceHolder;
38 // Rect of the source bitmap to draw
39 private Rect srcRect = new Rect();
40 // Rect of the destination canvas to draw to
41 private Rect dstRect = new Rect();
42 private float dstTopScale = 0;
43 private float dstBottomScale = 1;
44 private float dstLeftScale = 0;
45 private float dstRightScale = 1;
46
47 public ViESurfaceRenderer(SurfaceView view) {
48 surfaceHolder = view.getHolder();
49 if(surfaceHolder == null)
50 return;
51 surfaceHolder.addCallback(this);
52 }
53
54 // surfaceChanged and surfaceCreated share this function
55 private void changeDestRect(int dstWidth, int dstHeight) {
56 dstRect.right = (int)(dstRect.left + dstRightScale * dstWidth);
57 dstRect.bottom = (int)(dstRect.top + dstBottomScale * dstHeight);
58 }
59
60 public void surfaceChanged(SurfaceHolder holder, int format,
61 int in_width, int in_height) {
62 Logging.d(TAG, "ViESurfaceRender::surfaceChanged");
63
64 changeDestRect(in_width, in_height);
65
66 Logging.d(TAG, "ViESurfaceRender::surfaceChanged" +
67 " in_width:" + in_width + " in_height:" + in_height +
68 " srcRect.left:" + srcRect.left +
69 " srcRect.top:" + srcRect.top +
70 " srcRect.right:" + srcRect.right +
71 " srcRect.bottom:" + srcRect.bottom +
72 " dstRect.left:" + dstRect.left +
73 " dstRect.top:" + dstRect.top +
74 " dstRect.right:" + dstRect.right +
75 " dstRect.bottom:" + dstRect.bottom);
76 }
77
78 public void surfaceCreated(SurfaceHolder holder) {
79 Canvas canvas = surfaceHolder.lockCanvas();
80 if(canvas != null) {
81 Rect dst = surfaceHolder.getSurfaceFrame();
82 if(dst != null) {
83 changeDestRect(dst.right - dst.left, dst.bottom - dst.top);
84 Logging.d(TAG, "ViESurfaceRender::surfaceCreated" +
85 " dst.left:" + dst.left +
86 " dst.top:" + dst.top +
87 " dst.right:" + dst.right +
88 " dst.bottom:" + dst.bottom +
89 " srcRect.left:" + srcRect.left +
90 " srcRect.top:" + srcRect.top +
91 " srcRect.right:" + srcRect.right +
92 " srcRect.bottom:" + srcRect.bottom +
93 " dstRect.left:" + dstRect.left +
94 " dstRect.top:" + dstRect.top +
95 " dstRect.right:" + dstRect.right +
96 " dstRect.bottom:" + dstRect.bottom);
97 }
98 surfaceHolder.unlockCanvasAndPost(canvas);
99 }
100 }
101
102 public void surfaceDestroyed(SurfaceHolder holder) {
103 Logging.d(TAG, "ViESurfaceRenderer::surfaceDestroyed");
104 bitmap = null;
105 byteBuffer = null;
106 }
107
108 public Bitmap CreateBitmap(int width, int height) {
109 Logging.d(TAG, "CreateByteBitmap " + width + ":" + height);
110 if (bitmap == null) {
111 try {
112 android.os.Process.setThreadPriority(
113 android.os.Process.THREAD_PRIORITY_DISPLAY);
114 }
115 catch (Exception e) {
116 }
117 }
118 bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
119 srcRect.left = 0;
120 srcRect.top = 0;
121 srcRect.bottom = height;
122 srcRect.right = width;
123 return bitmap;
124 }
125
126 public ByteBuffer CreateByteBuffer(int width, int height) {
127 Logging.d(TAG, "CreateByteBuffer " + width + ":" + height);
128 if (bitmap == null) {
129 bitmap = CreateBitmap(width, height);
130 byteBuffer = ByteBuffer.allocateDirect(width * height * 2);
131 }
132 return byteBuffer;
133 }
134
135 public void SetCoordinates(float left, float top,
136 float right, float bottom) {
137 Logging.d(TAG, "SetCoordinates " + left + "," + top + ":" +
138 right + "," + bottom);
139 dstLeftScale = left;
140 dstTopScale = top;
141 dstRightScale = right;
142 dstBottomScale = bottom;
143 }
144
145 // It saves bitmap data to a JPEG picture, this function is for debug only.
146 private void saveBitmapToJPEG(int width, int height) {
147 ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
148 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteOutStream);
149
150 try{
151 FileOutputStream output = new FileOutputStream(String.format(
152 "/sdcard/render_%d.jpg", System.currentTimeMillis()));
153 output.write(byteOutStream.toByteArray());
154 output.flush();
155 output.close();
156 }
157 catch (FileNotFoundException e) {
158 }
159 catch (IOException e) {
160 }
161 }
162
163 public void DrawByteBuffer() {
164 if(byteBuffer == null)
165 return;
166 byteBuffer.rewind();
167 bitmap.copyPixelsFromBuffer(byteBuffer);
168 DrawBitmap();
169 }
170
171 public void DrawBitmap() {
172 if(bitmap == null)
173 return;
174
175 Canvas canvas = surfaceHolder.lockCanvas();
176 if(canvas != null) {
177 // The follow line is for debug only
178 // saveBitmapToJPEG(srcRect.right - srcRect.left,
179 // srcRect.bottom - srcRect.top);
180 canvas.drawBitmap(bitmap, srcRect, dstRect, null);
181 surfaceHolder.unlockCanvasAndPost(canvas);
182 }
183 }
184
185 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698