static void cvRelease(void* t) {
try {
IplImage* iplImg = reinterpret_cast<IplImage*>( t );
if( iplImg ) cvReleaseImage( & iplImg );
} catch(...) {
try {
CvCapture* cvCap = reinterpret_cast<CvCapture*>( t );
if( cvCap ) cvReleaseCapture( & cvCap );
} catch(...) {
try {
CvVideoWriter* cvVWr = reinterpret_cast<CvVideoWriter*>( t );
if( cvVWr ) cvReleaseVideoWriter( & cvVWr );
} catch(...) { }
}
}
}
static void cvRelease(...array<void*> ^voidPtr) {
for each (void* o in voidPtr)
cvRelease( o );
}
c3RhdGljIHZvaWQgY3ZSZWxlYXNlKHZvaWQqIHQpIHsKCiAgICB0cnkgewoJCQlJcGxJbWFnZSogaXBsSW1nID0gcmVpbnRlcnByZXRfY2FzdDxJcGxJbWFnZSo+KCB0ICk7CgkJCWlmKCBpcGxJbWcgKSBjdlJlbGVhc2VJbWFnZSggJiBpcGxJbWcgKTsKCgl9IGNhdGNoKC4uLikgewoJCgkJdHJ5IHsKCQkJCUN2Q2FwdHVyZSogY3ZDYXAgPSByZWludGVycHJldF9jYXN0PEN2Q2FwdHVyZSo+KCB0ICk7CgkJCQlpZiggY3ZDYXAgKSBjdlJlbGVhc2VDYXB0dXJlKCAmIGN2Q2FwICk7CgoJCX0gY2F0Y2goLi4uKSB7CgoJCQl0cnkgewoJCQkJCUN2VmlkZW9Xcml0ZXIqIGN2VldyID0gcmVpbnRlcnByZXRfY2FzdDxDdlZpZGVvV3JpdGVyKj4oIHQgKTsKCQkJCQlpZiggY3ZWV3IgKSBjdlJlbGVhc2VWaWRlb1dyaXRlciggJiBjdlZXciApOwoKCQkJfSBjYXRjaCguLi4pIHsgfQoJCX0KCX0KfQoKc3RhdGljIHZvaWQgY3ZSZWxlYXNlKC4uLmFycmF5PHZvaWQqPiBedm9pZFB0cikgewoKCWZvciBlYWNoICh2b2lkKiBvIGluIHZvaWRQdHIpCgkJY3ZSZWxlYXNlKCBvICk7Cn0K