Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions torchvision/csrc/cpu/decoder/defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,11 @@ struct VideoFormat {
When width = 0, height = 0, minDimension = 0, and maxDimension = 0,
keep the orignal frame resolution
When width = 0, height = 0, minDimension != 0, and maxDimension = 0,
keep the aspect ratio and resize the frame so that shorter edge size is minDimension
keep the aspect ratio and resize the frame so that shorter edge size is
minDimension
When width = 0, height = 0, minDimension = 0, and maxDimension != 0,
keep the aspect ratio and resize the frame so that longer edge size is maxDimension
keep the aspect ratio and resize the frame so that longer edge size is
maxDimension
When width = 0, height = 0, minDimension != 0, and maxDimension != 0,
resize the frame so that shorter edge size is minDimension, and
longer edge size is maxDimension. The aspect ratio may not be preserved
Expand All @@ -64,7 +66,8 @@ struct VideoFormat {
When width != 0, height = 0, minDimension = 0, and maxDimension = 0,
keep the aspect ratio and resize the frame so that frame width is $width
When width != 0, height != 0, minDimension = 0, and maxDimension = 0,
resize the frame so that frame width and height are set to $width and $height,
resize the frame so that frame width and height are set to $width and
$height,
respectively
*/
size_t width{0}; // width in pixels
Expand Down
11 changes: 5 additions & 6 deletions torchvision/csrc/cpu/decoder/util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,7 @@ size_t size(const AVSubtitle& sub) {
}

bool validateVideoFormat(const VideoFormat& f) {
// clang-format off
/*
Valid parameters values for decoder
____________________________________________________________________________________
Expand All @@ -307,6 +308,7 @@ bool validateVideoFormat(const VideoFormat& f) {
|_____|_____|______________|______________|___________|____________________________|

*/
// clang-format on
return (f.width == 0 && // #1, #6, #7 and #8
f.height == 0 && f.cropImage == 0) ||
(f.width != 0 && // #4 and #5
Expand Down Expand Up @@ -346,8 +348,7 @@ void setFormatDimensions(
destW = minDimension;
destH = round(double(srcH * minDimension) / srcW);
}
}
else if (minDimension == 0 && maxDimension > 0) { // #7
} else if (minDimension == 0 && maxDimension > 0) { // #7
if (srcW > srcH) {
// landscape
destW = maxDimension;
Expand All @@ -357,8 +358,7 @@ void setFormatDimensions(
destH = maxDimension;
destW = round(double(srcW * maxDimension) / srcH);
}
}
else if (minDimension > 0 && maxDimension > 0) { // #8
} else if (minDimension > 0 && maxDimension > 0) { // #8
if (srcW > srcH) {
// landscape
destW = maxDimension;
Expand All @@ -368,8 +368,7 @@ void setFormatDimensions(
destW = minDimension;
destH = maxDimension;
}
}
else { // #1
} else { // #1
destW = srcW;
destH = srcH;
}
Expand Down
52 changes: 27 additions & 25 deletions torchvision/csrc/cpu/decoder/util_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,30 +4,32 @@
#include "util.h"

TEST(Util, TestSetFormatDimensions) {
const size_t test_cases[][9] = {
// (userW, userH, srcW, srcH, minDimension, maxDimension, cropImage, destW, destH)
{0, 0, 172, 128, 0, 0, 0, 172, 128}, // #1
{86, 0, 172, 128, 0, 0, 0, 86, 64}, // #2
{64, 0, 128, 172, 0, 0, 0, 64, 86}, // #2
{0, 32, 172, 128, 0, 0, 0, 43, 32}, // #3
{32, 0, 128, 172, 0, 0, 0, 32, 43}, // #3
{60, 50, 172, 128, 0, 0, 0, 60, 50}, // #4
{50, 60, 128, 172, 0, 0, 0, 50, 60}, // #4
{86, 40, 172, 128, 0, 0, 1, 86, 64}, // #5
{86, 92, 172, 128, 0, 0, 1, 124, 92}, // #5
{0, 0, 172, 128, 256, 0, 0, 344, 256}, // #6
{0, 0, 128, 172, 256, 0, 0, 256, 344}, // #6
{0, 0, 128, 172, 0, 344, 0, 256, 344}, // #7
{0, 0, 172, 128, 0, 344, 0, 344, 256}, // #7
{0, 0, 172, 128, 100, 344, 0, 344, 100},// #8
{0, 0, 128, 172, 100, 344, 0, 100, 344} // #8
};
// clang-format off
const size_t test_cases[][9] = {
// (userW, userH, srcW, srcH, minDimension, maxDimension, cropImage, destW, destH)
{0, 0, 172, 128, 0, 0, 0, 172, 128}, // #1
{86, 0, 172, 128, 0, 0, 0, 86, 64}, // #2
{64, 0, 128, 172, 0, 0, 0, 64, 86}, // #2
{0, 32, 172, 128, 0, 0, 0, 43, 32}, // #3
{32, 0, 128, 172, 0, 0, 0, 32, 43}, // #3
{60, 50, 172, 128, 0, 0, 0, 60, 50}, // #4
{50, 60, 128, 172, 0, 0, 0, 50, 60}, // #4
{86, 40, 172, 128, 0, 0, 1, 86, 64}, // #5
{86, 92, 172, 128, 0, 0, 1, 124, 92}, // #5
{0, 0, 172, 128, 256, 0, 0, 344, 256}, // #6
{0, 0, 128, 172, 256, 0, 0, 256, 344}, // #6
{0, 0, 128, 172, 0, 344, 0, 256, 344}, // #7
{0, 0, 172, 128, 0, 344, 0, 344, 256}, // #7
{0, 0, 172, 128, 100, 344, 0, 344, 100},// #8
{0, 0, 128, 172, 100, 344, 0, 100, 344} // #8
};
// clang-format onn

for (const auto& tc : test_cases) {
size_t destW = 0;
size_t destH = 0;
ffmpeg::Util::setFormatDimensions(destW, destH, tc[0], tc[1], tc[2], tc[3], tc[4], tc[5], tc[6]);
CHECK(destW == tc[7]);
CHECK(destH == tc[8]);
}
for (const auto& tc : test_cases) {
size_t destW = 0;
size_t destH = 0;
ffmpeg::Util::setFormatDimensions(destW, destH, tc[0], tc[1], tc[2], tc[3], tc[4], tc[5], tc[6]);
CHECK(destW == tc[7]);
CHECK(destH == tc[8]);
}
}