OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2013 Google Inc. | 3 * Copyright 2013 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 */ | 137 */ |
138 public static void renderFrameDone(I420Frame frame) { | 138 public static void renderFrameDone(I420Frame frame) { |
139 frame.yuvPlanes = null; | 139 frame.yuvPlanes = null; |
140 frame.textureId = 0; | 140 frame.textureId = 0; |
141 if (frame.nativeFramePointer != 0) { | 141 if (frame.nativeFramePointer != 0) { |
142 releaseNativeFrame(frame.nativeFramePointer); | 142 releaseNativeFrame(frame.nativeFramePointer); |
143 frame.nativeFramePointer = 0; | 143 frame.nativeFramePointer = 0; |
144 } | 144 } |
145 } | 145 } |
146 | 146 |
147 // |this| either wraps a native (GUI) renderer or a client-supplied Callbacks | |
148 // (Java) implementation; this is indicated by |isWrappedVideoRenderer|. | |
149 long nativeVideoRenderer; | 147 long nativeVideoRenderer; |
150 private final boolean isWrappedVideoRenderer; | |
151 | |
152 public static VideoRenderer createGui(int x, int y) { | |
153 long nativeVideoRenderer = nativeCreateGuiVideoRenderer(x, y); | |
154 if (nativeVideoRenderer == 0) { | |
155 return null; | |
156 } | |
157 return new VideoRenderer(nativeVideoRenderer); | |
158 } | |
159 | 148 |
160 public VideoRenderer(Callbacks callbacks) { | 149 public VideoRenderer(Callbacks callbacks) { |
161 nativeVideoRenderer = nativeWrapVideoRenderer(callbacks); | 150 nativeVideoRenderer = nativeWrapVideoRenderer(callbacks); |
162 isWrappedVideoRenderer = true; | |
163 } | 151 } |
164 | 152 |
165 private VideoRenderer(long nativeVideoRenderer) { | 153 private VideoRenderer(long nativeVideoRenderer) { |
166 this.nativeVideoRenderer = nativeVideoRenderer; | 154 this.nativeVideoRenderer = nativeVideoRenderer; |
167 isWrappedVideoRenderer = false; | |
168 } | 155 } |
169 | 156 |
170 public void dispose() { | 157 public void dispose() { |
171 if (nativeVideoRenderer == 0) { | 158 if (nativeVideoRenderer == 0) { |
172 // Already disposed. | 159 // Already disposed. |
173 return; | 160 return; |
174 } | 161 } |
175 if (!isWrappedVideoRenderer) { | 162 |
176 freeGuiVideoRenderer(nativeVideoRenderer); | 163 freeWrappedVideoRenderer(nativeVideoRenderer); |
177 } else { | |
178 freeWrappedVideoRenderer(nativeVideoRenderer); | |
179 } | |
180 nativeVideoRenderer = 0; | 164 nativeVideoRenderer = 0; |
181 } | 165 } |
182 | 166 |
183 private static native long nativeCreateGuiVideoRenderer(int x, int y); | |
184 private static native long nativeWrapVideoRenderer(Callbacks callbacks); | 167 private static native long nativeWrapVideoRenderer(Callbacks callbacks); |
185 | |
186 private static native void freeGuiVideoRenderer(long nativeVideoRenderer); | |
187 private static native void freeWrappedVideoRenderer(long nativeVideoRenderer); | 168 private static native void freeWrappedVideoRenderer(long nativeVideoRenderer); |
188 | |
189 private static native void releaseNativeFrame(long nativeFramePointer); | 169 private static native void releaseNativeFrame(long nativeFramePointer); |
190 } | 170 } |
OLD | NEW |