Internal change
PiperOrigin-RevId: 528632873
This commit is contained in:
		
							parent
							
								
									fca728d226
								
							
						
					
					
						commit
						0a8be0d09d
					
				|  | @ -14,6 +14,7 @@ | ||||||
| 
 | 
 | ||||||
| #include "mediapipe/java/com/google/mediapipe/framework/jni/graph_texture_frame_jni.h" | #include "mediapipe/java/com/google/mediapipe/framework/jni/graph_texture_frame_jni.h" | ||||||
| 
 | 
 | ||||||
|  | #include "absl/strings/str_format.h" | ||||||
| #include "mediapipe/gpu/gl_calculator_helper.h" | #include "mediapipe/gpu/gl_calculator_helper.h" | ||||||
| #include "mediapipe/gpu/gl_context.h" | #include "mediapipe/gpu/gl_context.h" | ||||||
| #include "mediapipe/gpu/gl_texture_buffer.h" | #include "mediapipe/gpu/gl_texture_buffer.h" | ||||||
|  | @ -89,9 +90,20 @@ JNIEXPORT jlong JNICALL GRAPH_TEXTURE_FRAME_METHOD( | ||||||
| 
 | 
 | ||||||
| JNIEXPORT void JNICALL GRAPH_TEXTURE_FRAME_METHOD(nativeDidRead)( | JNIEXPORT void JNICALL GRAPH_TEXTURE_FRAME_METHOD(nativeDidRead)( | ||||||
|     JNIEnv* env, jobject thiz, jlong nativeHandle, jlong consumerSyncToken) { |     JNIEnv* env, jobject thiz, jlong nativeHandle, jlong consumerSyncToken) { | ||||||
|  |   if (!consumerSyncToken) return; | ||||||
|  | 
 | ||||||
|   GlTextureBufferSharedPtr* buffer = |   GlTextureBufferSharedPtr* buffer = | ||||||
|       reinterpret_cast<GlTextureBufferSharedPtr*>(nativeHandle); |       reinterpret_cast<GlTextureBufferSharedPtr*>(nativeHandle); | ||||||
|   mediapipe::GlSyncToken& token = |   mediapipe::GlSyncToken& token = | ||||||
|       *reinterpret_cast<mediapipe::GlSyncToken*>(consumerSyncToken); |       *reinterpret_cast<mediapipe::GlSyncToken*>(consumerSyncToken); | ||||||
|  |   // The below check attempts to detect when an invalid or already deleted
 | ||||||
|  |   // `consumerSyncToken` is passed. (That results in undefined behavior.
 | ||||||
|  |   // However, `DidRead` may succeed resulting in a later crash and masking the
 | ||||||
|  |   // actual problem.)
 | ||||||
|  |   if (token.use_count() == 0) { | ||||||
|  |     LOG_FIRST_N(ERROR, 5) << absl::StrFormat("invalid sync token ref: %d", | ||||||
|  |                                              consumerSyncToken); | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|   (*buffer)->DidRead(token); |   (*buffer)->DidRead(token); | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user