|
|
|
@ -221,8 +221,6 @@ public: |
|
|
|
|
virtual int getCaptureDomain() { return CAP_ANY; } // Return the type of the capture object: CAP_DSHOW, etc...
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
void applyMetadataRotation(const IVideoCapture& cap, OutputArray mat); |
|
|
|
|
|
|
|
|
|
class IVideoWriter |
|
|
|
|
{ |
|
|
|
|
public: |
|
|
|
@ -245,6 +243,34 @@ public: |
|
|
|
|
|
|
|
|
|
//===================================================
|
|
|
|
|
|
|
|
|
|
// Utility
|
|
|
|
|
|
|
|
|
|
static inline void applyMetadataRotation(const IVideoCapture& cap, OutputArray mat) |
|
|
|
|
{ |
|
|
|
|
bool rotation_auto = 0 != cap.getProperty(CAP_PROP_ORIENTATION_AUTO); |
|
|
|
|
int rotation_angle = static_cast<int>(cap.getProperty(CAP_PROP_ORIENTATION_META)); |
|
|
|
|
|
|
|
|
|
if(!rotation_auto || rotation_angle%360 == 0) |
|
|
|
|
{ |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cv::RotateFlags flag; |
|
|
|
|
if(rotation_angle == 90 || rotation_angle == -270) { // Rotate clockwise 90 degrees
|
|
|
|
|
flag = cv::ROTATE_90_CLOCKWISE; |
|
|
|
|
} else if(rotation_angle == 270 || rotation_angle == -90) { // Rotate clockwise 270 degrees
|
|
|
|
|
flag = cv::ROTATE_90_COUNTERCLOCKWISE; |
|
|
|
|
} else if(rotation_angle == 180 || rotation_angle == -180) { // Rotate clockwise 180 degrees
|
|
|
|
|
flag = cv::ROTATE_180; |
|
|
|
|
} else { // Unsupported rotation
|
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cv::rotate(mat, mat, flag); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//===================================================
|
|
|
|
|
|
|
|
|
|
// Wrapper
|
|
|
|
|
|
|
|
|
|
class LegacyCapture : public IVideoCapture |
|
|
|
|