From 60b2894fdcb0b17426be0d42d6350672268084a9 Mon Sep 17 00:00:00 2001 From: Vasilis Vryniotis Date: Wed, 27 Jan 2021 19:34:13 +0000 Subject: [PATCH 1/5] Moving jpegcommon inside cpu implementation --- torchvision/csrc/io/image/{ => cpu}/jpegcommon.cpp | 2 +- torchvision/csrc/io/image/{ => cpu}/jpegcommon.h | 5 ----- torchvision/csrc/io/image/cpu/readjpeg_impl.cpp | 2 +- torchvision/csrc/io/image/cpu/writejpeg_impl.cpp | 2 +- 4 files changed, 3 insertions(+), 8 deletions(-) rename torchvision/csrc/io/image/{ => cpu}/jpegcommon.cpp (100%) rename torchvision/csrc/io/image/{ => cpu}/jpegcommon.h (84%) diff --git a/torchvision/csrc/io/image/jpegcommon.cpp b/torchvision/csrc/io/image/cpu/jpegcommon.cpp similarity index 100% rename from torchvision/csrc/io/image/jpegcommon.cpp rename to torchvision/csrc/io/image/cpu/jpegcommon.cpp index 744e9cfd72a..23cc9f6fac8 100644 --- a/torchvision/csrc/io/image/jpegcommon.cpp +++ b/torchvision/csrc/io/image/cpu/jpegcommon.cpp @@ -1,6 +1,6 @@ -#if JPEG_FOUND #include "jpegcommon.h" +#if JPEG_FOUND void torch_jpeg_error_exit(j_common_ptr cinfo) { /* cinfo->err really points to a torch_jpeg_error_mgr struct, so coerce * pointer */ diff --git a/torchvision/csrc/io/image/jpegcommon.h b/torchvision/csrc/io/image/cpu/jpegcommon.h similarity index 84% rename from torchvision/csrc/io/image/jpegcommon.h rename to torchvision/csrc/io/image/cpu/jpegcommon.h index 275b4a1e1e8..a3d1bd6a2cd 100644 --- a/torchvision/csrc/io/image/jpegcommon.h +++ b/torchvision/csrc/io/image/cpu/jpegcommon.h @@ -1,10 +1,5 @@ #pragma once -// clang-format off -#include -#include -// clang-format on - #if JPEG_FOUND #include #include diff --git a/torchvision/csrc/io/image/cpu/readjpeg_impl.cpp b/torchvision/csrc/io/image/cpu/readjpeg_impl.cpp index 3c2a8808e3d..0f8d3672ac0 100644 --- a/torchvision/csrc/io/image/cpu/readjpeg_impl.cpp +++ b/torchvision/csrc/io/image/cpu/readjpeg_impl.cpp @@ -6,7 +6,7 @@ torch::Tensor decodeJPEG(const torch::Tensor& data, ImageReadMode mode) { false, "decodeJPEG: torchvision not compiled with libjpeg support"); } #else -#include "../jpegcommon.h" +#include "jpegcommon.h" struct torch_jpeg_mgr { struct jpeg_source_mgr pub; diff --git a/torchvision/csrc/io/image/cpu/writejpeg_impl.cpp b/torchvision/csrc/io/image/cpu/writejpeg_impl.cpp index 46e0dde3b7c..310e4da2ad9 100644 --- a/torchvision/csrc/io/image/cpu/writejpeg_impl.cpp +++ b/torchvision/csrc/io/image/cpu/writejpeg_impl.cpp @@ -8,7 +8,7 @@ torch::Tensor encodeJPEG(const torch::Tensor& data, int64_t quality) { } #else -#include "../jpegcommon.h" +#include "jpegcommon.h" torch::Tensor encodeJPEG(const torch::Tensor& data, int64_t quality) { // Define compression structures and error handling From 7fdc7ba39d22cc2f99a5417a1eac550ece8a4d57 Mon Sep 17 00:00:00 2001 From: Vasilis Vryniotis Date: Wed, 27 Jan 2021 20:27:00 +0000 Subject: [PATCH 2/5] Adding namespaces on image and moving private methods to anonymous. --- torchvision/csrc/io/image/cpu/jpegcommon.cpp | 8 ++++++++ torchvision/csrc/io/image/cpu/jpegcommon.h | 11 +++++++++++ torchvision/csrc/io/image/cpu/pngcommon.h | 6 ++++++ .../csrc/io/image/cpu/read_image_impl.cpp | 6 ++++++ torchvision/csrc/io/image/cpu/read_image_impl.h | 6 ++++++ .../csrc/io/image/cpu/read_write_file_impl.cpp | 12 ++++++++++++ .../csrc/io/image/cpu/read_write_file_impl.h | 7 ++++++- torchvision/csrc/io/image/cpu/readjpeg_impl.cpp | 16 ++++++++++++++-- torchvision/csrc/io/image/cpu/readjpeg_impl.h | 6 ++++++ torchvision/csrc/io/image/cpu/readpng_impl.cpp | 11 ++++++++--- torchvision/csrc/io/image/cpu/readpng_impl.h | 6 ++++++ torchvision/csrc/io/image/cpu/writejpeg_impl.cpp | 10 +++++++++- torchvision/csrc/io/image/cpu/writejpeg_impl.h | 6 ++++++ torchvision/csrc/io/image/cpu/writepng_impl.cpp | 13 +++++++++++-- torchvision/csrc/io/image/cpu/writepng_impl.h | 6 ++++++ torchvision/csrc/io/image/image.cpp | 6 ++++++ torchvision/csrc/io/image/image_read_mode.h | 8 ++++++++ 17 files changed, 135 insertions(+), 9 deletions(-) create mode 100644 torchvision/csrc/io/image/cpu/pngcommon.h diff --git a/torchvision/csrc/io/image/cpu/jpegcommon.cpp b/torchvision/csrc/io/image/cpu/jpegcommon.cpp index 23cc9f6fac8..5575f37df27 100644 --- a/torchvision/csrc/io/image/cpu/jpegcommon.cpp +++ b/torchvision/csrc/io/image/cpu/jpegcommon.cpp @@ -1,5 +1,9 @@ #include "jpegcommon.h" +namespace vision { +namespace image { +namespace detail { + #if JPEG_FOUND void torch_jpeg_error_exit(j_common_ptr cinfo) { /* cinfo->err really points to a torch_jpeg_error_mgr struct, so coerce @@ -16,3 +20,7 @@ void torch_jpeg_error_exit(j_common_ptr cinfo) { longjmp(myerr->setjmp_buffer, 1); } #endif + +} // namespace detail +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/cpu/jpegcommon.h b/torchvision/csrc/io/image/cpu/jpegcommon.h index a3d1bd6a2cd..bbfe6084457 100644 --- a/torchvision/csrc/io/image/cpu/jpegcommon.h +++ b/torchvision/csrc/io/image/cpu/jpegcommon.h @@ -3,6 +3,13 @@ #if JPEG_FOUND #include #include +#endif + +namespace vision { +namespace image { +namespace detail { + +#if JPEG_FOUND static const JOCTET EOI_BUFFER[1] = {JPEG_EOI}; struct torch_jpeg_error_mgr { @@ -15,3 +22,7 @@ using torch_jpeg_error_ptr = struct torch_jpeg_error_mgr*; void torch_jpeg_error_exit(j_common_ptr cinfo); #endif + +} // namespace detail +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/cpu/pngcommon.h b/torchvision/csrc/io/image/cpu/pngcommon.h new file mode 100644 index 00000000000..68400d48e05 --- /dev/null +++ b/torchvision/csrc/io/image/cpu/pngcommon.h @@ -0,0 +1,6 @@ +#pragma once + +#if PNG_FOUND +#include +#include +#endif diff --git a/torchvision/csrc/io/image/cpu/read_image_impl.cpp b/torchvision/csrc/io/image/cpu/read_image_impl.cpp index 0301371485c..bc9e20a270a 100644 --- a/torchvision/csrc/io/image/cpu/read_image_impl.cpp +++ b/torchvision/csrc/io/image/cpu/read_image_impl.cpp @@ -3,6 +3,9 @@ #include "readjpeg_impl.h" #include "readpng_impl.h" +namespace vision { +namespace image { + torch::Tensor decode_image(const torch::Tensor& data, ImageReadMode mode) { // Check that the input tensor dtype is uint8 TORCH_CHECK(data.dtype() == torch::kU8, "Expected a torch.uint8 tensor"); @@ -27,3 +30,6 @@ torch::Tensor decode_image(const torch::Tensor& data, ImageReadMode mode) { "are currently supported."); } } + +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/cpu/read_image_impl.h b/torchvision/csrc/io/image/cpu/read_image_impl.h index 199c17ea481..853d6d91afa 100644 --- a/torchvision/csrc/io/image/cpu/read_image_impl.h +++ b/torchvision/csrc/io/image/cpu/read_image_impl.h @@ -3,6 +3,12 @@ #include #include "../image_read_mode.h" +namespace vision { +namespace image { + C10_EXPORT torch::Tensor decode_image( const torch::Tensor& data, ImageReadMode mode = IMAGE_READ_MODE_UNCHANGED); + +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/cpu/read_write_file_impl.cpp b/torchvision/csrc/io/image/cpu/read_write_file_impl.cpp index ac29308d853..ea1e61a71b0 100644 --- a/torchvision/csrc/io/image/cpu/read_write_file_impl.cpp +++ b/torchvision/csrc/io/image/cpu/read_write_file_impl.cpp @@ -1,9 +1,17 @@ #include "read_write_file_impl.h" +#include + #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN #include +#endif + +namespace vision { +namespace image { +#ifdef _WIN32 +namespace { std::wstring utf8_decode(const std::string& str) { if (str.empty()) { return std::wstring(); @@ -21,6 +29,7 @@ std::wstring utf8_decode(const std::string& str) { size_needed); return wstrTo; } +} // namespace #endif torch::Tensor read_file(const std::string& filename) { @@ -90,3 +99,6 @@ void write_file(const std::string& filename, torch::Tensor& data) { fwrite(fileBytes, sizeof(uint8_t), data.numel(), outfile); fclose(outfile); } + +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/cpu/read_write_file_impl.h b/torchvision/csrc/io/image/cpu/read_write_file_impl.h index e0459f4d090..a5a712dd8e2 100644 --- a/torchvision/csrc/io/image/cpu/read_write_file_impl.h +++ b/torchvision/csrc/io/image/cpu/read_write_file_impl.h @@ -1,8 +1,13 @@ #pragma once -#include #include +namespace vision { +namespace image { + C10_EXPORT torch::Tensor read_file(const std::string& filename); C10_EXPORT void write_file(const std::string& filename, torch::Tensor& data); + +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/cpu/readjpeg_impl.cpp b/torchvision/csrc/io/image/cpu/readjpeg_impl.cpp index 0f8d3672ac0..45ed3bad6f1 100644 --- a/torchvision/csrc/io/image/cpu/readjpeg_impl.cpp +++ b/torchvision/csrc/io/image/cpu/readjpeg_impl.cpp @@ -1,4 +1,10 @@ #include "readjpeg_impl.h" +#include "jpegcommon.h" + +namespace vision { +namespace image { + +using namespace detail; #if !JPEG_FOUND torch::Tensor decodeJPEG(const torch::Tensor& data, ImageReadMode mode) { @@ -6,7 +12,8 @@ torch::Tensor decodeJPEG(const torch::Tensor& data, ImageReadMode mode) { false, "decodeJPEG: torchvision not compiled with libjpeg support"); } #else -#include "jpegcommon.h" + +namespace { struct torch_jpeg_mgr { struct jpeg_source_mgr pub; @@ -64,6 +71,8 @@ static void torch_jpeg_set_source_mgr( src->pub.next_input_byte = src->data; } +} // namespace + torch::Tensor decodeJPEG(const torch::Tensor& data, ImageReadMode mode) { // Check that the input tensor dtype is uint8 TORCH_CHECK(data.dtype() == torch::kU8, "Expected a torch.uint8 tensor"); @@ -146,4 +155,7 @@ torch::Tensor decodeJPEG(const torch::Tensor& data, ImageReadMode mode) { return tensor.permute({2, 0, 1}); } -#endif // JPEG_FOUND +#endif + +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/cpu/readjpeg_impl.h b/torchvision/csrc/io/image/cpu/readjpeg_impl.h index e99bcd1e3e9..d5dad5f493c 100644 --- a/torchvision/csrc/io/image/cpu/readjpeg_impl.h +++ b/torchvision/csrc/io/image/cpu/readjpeg_impl.h @@ -3,6 +3,12 @@ #include #include "../image_read_mode.h" +namespace vision { +namespace image { + C10_EXPORT torch::Tensor decodeJPEG( const torch::Tensor& data, ImageReadMode mode = IMAGE_READ_MODE_UNCHANGED); + +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/cpu/readpng_impl.cpp b/torchvision/csrc/io/image/cpu/readpng_impl.cpp index 118651f2558..178c7c5a5ff 100644 --- a/torchvision/csrc/io/image/cpu/readpng_impl.cpp +++ b/torchvision/csrc/io/image/cpu/readpng_impl.cpp @@ -1,12 +1,14 @@ #include "readpng_impl.h" +#include "pngcommon.h" + +namespace vision { +namespace image { #if !PNG_FOUND torch::Tensor decodePNG(const torch::Tensor& data, ImageReadMode mode) { TORCH_CHECK(false, "decodePNG: torchvision not compiled with libPNG support"); } #else -#include -#include torch::Tensor decodePNG(const torch::Tensor& data, ImageReadMode mode) { // Check that the input tensor dtype is uint8 @@ -160,4 +162,7 @@ torch::Tensor decodePNG(const torch::Tensor& data, ImageReadMode mode) { png_destroy_read_struct(&png_ptr, &info_ptr, nullptr); return tensor.permute({2, 0, 1}); } -#endif // PNG_FOUND +#endif + +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/cpu/readpng_impl.h b/torchvision/csrc/io/image/cpu/readpng_impl.h index e62d5cc82e0..4f0328e46dc 100644 --- a/torchvision/csrc/io/image/cpu/readpng_impl.h +++ b/torchvision/csrc/io/image/cpu/readpng_impl.h @@ -3,6 +3,12 @@ #include #include "../image_read_mode.h" +namespace vision { +namespace image { + C10_EXPORT torch::Tensor decodePNG( const torch::Tensor& data, ImageReadMode mode = IMAGE_READ_MODE_UNCHANGED); + +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/cpu/writejpeg_impl.cpp b/torchvision/csrc/io/image/cpu/writejpeg_impl.cpp index 310e4da2ad9..06941162087 100644 --- a/torchvision/csrc/io/image/cpu/writejpeg_impl.cpp +++ b/torchvision/csrc/io/image/cpu/writejpeg_impl.cpp @@ -1,4 +1,10 @@ #include "writejpeg_impl.h" +#include "jpegcommon.h" + +namespace vision { +namespace image { + +using namespace detail; #if !JPEG_FOUND @@ -8,7 +14,6 @@ torch::Tensor encodeJPEG(const torch::Tensor& data, int64_t quality) { } #else -#include "jpegcommon.h" torch::Tensor encodeJPEG(const torch::Tensor& data, int64_t quality) { // Define compression structures and error handling @@ -98,3 +103,6 @@ torch::Tensor encodeJPEG(const torch::Tensor& data, int64_t quality) { return outTensor; } #endif + +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/cpu/writejpeg_impl.h b/torchvision/csrc/io/image/cpu/writejpeg_impl.h index ad7d2561764..10856bd0e97 100644 --- a/torchvision/csrc/io/image/cpu/writejpeg_impl.h +++ b/torchvision/csrc/io/image/cpu/writejpeg_impl.h @@ -2,4 +2,10 @@ #include +namespace vision { +namespace image { + C10_EXPORT torch::Tensor encodeJPEG(const torch::Tensor& data, int64_t quality); + +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/cpu/writepng_impl.cpp b/torchvision/csrc/io/image/cpu/writepng_impl.cpp index ec8fea24a61..e7a8bf96ad5 100644 --- a/torchvision/csrc/io/image/cpu/writepng_impl.cpp +++ b/torchvision/csrc/io/image/cpu/writepng_impl.cpp @@ -1,4 +1,8 @@ #include "writejpeg_impl.h" +#include "pngcommon.h" + +namespace vision { +namespace image { #if !PNG_FOUND @@ -7,8 +11,8 @@ torch::Tensor encodePNG(const torch::Tensor& data, int64_t compression_level) { } #else -#include -#include + +namespace { struct torch_mem_encode { char* buffer; @@ -59,6 +63,8 @@ void torch_png_write_data( p->size += length; } +} // namespace + torch::Tensor encodePNG(const torch::Tensor& data, int64_t compression_level) { // Define compression structures and error handling png_structp png_write; @@ -171,3 +177,6 @@ torch::Tensor encodePNG(const torch::Tensor& data, int64_t compression_level) { } #endif + +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/cpu/writepng_impl.h b/torchvision/csrc/io/image/cpu/writepng_impl.h index 68543cdcd94..98d25046ea5 100644 --- a/torchvision/csrc/io/image/cpu/writepng_impl.h +++ b/torchvision/csrc/io/image/cpu/writepng_impl.h @@ -2,6 +2,12 @@ #include +namespace vision { +namespace image { + C10_EXPORT torch::Tensor encodePNG( const torch::Tensor& data, int64_t compression_level); + +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/image.cpp b/torchvision/csrc/io/image/image.cpp index fffdebaad76..16d340941b6 100644 --- a/torchvision/csrc/io/image/image.cpp +++ b/torchvision/csrc/io/image/image.cpp @@ -11,6 +11,9 @@ PyMODINIT_FUNC PyInit_image(void) { } #endif +namespace vision { +namespace image { + static auto registry = torch::RegisterOperators() .op("image::decode_png", &decodePNG) .op("image::encode_png", &encodePNG) @@ -19,3 +22,6 @@ static auto registry = torch::RegisterOperators() .op("image::read_file", &read_file) .op("image::write_file", &write_file) .op("image::decode_image", &decode_image); + +} // namespace image +} // namespace vision diff --git a/torchvision/csrc/io/image/image_read_mode.h b/torchvision/csrc/io/image/image_read_mode.h index 5df82d373d9..84425265c34 100644 --- a/torchvision/csrc/io/image/image_read_mode.h +++ b/torchvision/csrc/io/image/image_read_mode.h @@ -1,5 +1,10 @@ #pragma once +#include + +namespace vision { +namespace image { + /* Should be kept in-sync with Python ImageReadMode enum */ using ImageReadMode = int64_t; const ImageReadMode IMAGE_READ_MODE_UNCHANGED = 0; @@ -7,3 +12,6 @@ const ImageReadMode IMAGE_READ_MODE_GRAY = 1; const ImageReadMode IMAGE_READ_MODE_GRAY_ALPHA = 2; const ImageReadMode IMAGE_READ_MODE_RGB = 3; const ImageReadMode IMAGE_READ_MODE_RGB_ALPHA = 4; + +} // namespace image +} // namespace vision From 7136251269b1cbb7bf585e5e533107cd36c54862 Mon Sep 17 00:00:00 2001 From: Vasilis Vryniotis Date: Wed, 27 Jan 2021 20:40:53 +0000 Subject: [PATCH 3/5] Fixing headers. --- torchvision/csrc/io/image/cpu/jpegcommon.h | 2 ++ torchvision/csrc/io/image/cpu/writejpeg_impl.cpp | 1 + torchvision/csrc/io/image/cpu/writepng_impl.cpp | 1 + 3 files changed, 4 insertions(+) diff --git a/torchvision/csrc/io/image/cpu/jpegcommon.h b/torchvision/csrc/io/image/cpu/jpegcommon.h index bbfe6084457..3131da589f6 100644 --- a/torchvision/csrc/io/image/cpu/jpegcommon.h +++ b/torchvision/csrc/io/image/cpu/jpegcommon.h @@ -1,6 +1,8 @@ #pragma once #if JPEG_FOUND +#include + #include #include #endif diff --git a/torchvision/csrc/io/image/cpu/writejpeg_impl.cpp b/torchvision/csrc/io/image/cpu/writejpeg_impl.cpp index 06941162087..ab19ee0a854 100644 --- a/torchvision/csrc/io/image/cpu/writejpeg_impl.cpp +++ b/torchvision/csrc/io/image/cpu/writejpeg_impl.cpp @@ -1,4 +1,5 @@ #include "writejpeg_impl.h" + #include "jpegcommon.h" namespace vision { diff --git a/torchvision/csrc/io/image/cpu/writepng_impl.cpp b/torchvision/csrc/io/image/cpu/writepng_impl.cpp index e7a8bf96ad5..62b66fd9852 100644 --- a/torchvision/csrc/io/image/cpu/writepng_impl.cpp +++ b/torchvision/csrc/io/image/cpu/writepng_impl.cpp @@ -1,4 +1,5 @@ #include "writejpeg_impl.h" + #include "pngcommon.h" namespace vision { From 22925ff7a10eed4afc7f87fbbb72166c3f82e93e Mon Sep 17 00:00:00 2001 From: Vasilis Vryniotis Date: Wed, 27 Jan 2021 21:40:49 +0000 Subject: [PATCH 4/5] Renaming public image methods to match the ones on python. --- .../io/image/cpu/{jpegcommon.cpp => common_jpeg.cpp} | 2 +- .../io/image/cpu/{jpegcommon.h => common_jpeg.h} | 0 .../csrc/io/image/cpu/{pngcommon.h => common_png.h} | 0 .../cpu/{read_image_impl.cpp => decode_image.cpp} | 10 +++++----- .../image/cpu/{read_image_impl.h => decode_image.h} | 0 .../image/cpu/{readjpeg_impl.cpp => decode_jpeg.cpp} | 10 +++++----- .../io/image/cpu/{readpng_impl.h => decode_jpeg.h} | 2 +- .../image/cpu/{readpng_impl.cpp => decode_png.cpp} | 11 ++++++----- .../io/image/cpu/{readjpeg_impl.h => decode_png.h} | 2 +- .../cpu/{writejpeg_impl.cpp => encode_jpeg.cpp} | 10 +++++----- .../io/image/cpu/{writejpeg_impl.h => encode_jpeg.h} | 4 +++- .../image/cpu/{writepng_impl.cpp => encode_png.cpp} | 11 ++++++----- .../io/image/cpu/{writepng_impl.h => encode_png.h} | 2 +- ...{read_write_file_impl.cpp => read_write_file.cpp} | 2 +- .../{read_write_file_impl.h => read_write_file.h} | 0 torchvision/csrc/io/image/image.cpp | 8 ++++---- torchvision/csrc/io/image/image.h | 12 ++++++------ 17 files changed, 45 insertions(+), 41 deletions(-) rename torchvision/csrc/io/image/cpu/{jpegcommon.cpp => common_jpeg.cpp} (96%) rename torchvision/csrc/io/image/cpu/{jpegcommon.h => common_jpeg.h} (100%) rename torchvision/csrc/io/image/cpu/{pngcommon.h => common_png.h} (100%) rename torchvision/csrc/io/image/cpu/{read_image_impl.cpp => decode_image.cpp} (85%) rename torchvision/csrc/io/image/cpu/{read_image_impl.h => decode_image.h} (100%) rename torchvision/csrc/io/image/cpu/{readjpeg_impl.cpp => decode_jpeg.cpp} (94%) rename torchvision/csrc/io/image/cpu/{readpng_impl.h => decode_jpeg.h} (86%) rename torchvision/csrc/io/image/cpu/{readpng_impl.cpp => decode_png.cpp} (94%) rename torchvision/csrc/io/image/cpu/{readjpeg_impl.h => decode_png.h} (86%) rename torchvision/csrc/io/image/cpu/{writejpeg_impl.cpp => encode_jpeg.cpp} (90%) rename torchvision/csrc/io/image/cpu/{writejpeg_impl.h => encode_jpeg.h} (57%) rename torchvision/csrc/io/image/cpu/{writepng_impl.cpp => encode_png.cpp} (93%) rename torchvision/csrc/io/image/cpu/{writepng_impl.h => encode_png.h} (83%) rename torchvision/csrc/io/image/cpu/{read_write_file_impl.cpp => read_write_file.cpp} (98%) rename torchvision/csrc/io/image/cpu/{read_write_file_impl.h => read_write_file.h} (100%) diff --git a/torchvision/csrc/io/image/cpu/jpegcommon.cpp b/torchvision/csrc/io/image/cpu/common_jpeg.cpp similarity index 96% rename from torchvision/csrc/io/image/cpu/jpegcommon.cpp rename to torchvision/csrc/io/image/cpu/common_jpeg.cpp index 5575f37df27..4c993106b45 100644 --- a/torchvision/csrc/io/image/cpu/jpegcommon.cpp +++ b/torchvision/csrc/io/image/cpu/common_jpeg.cpp @@ -1,4 +1,4 @@ -#include "jpegcommon.h" +#include "common_jpeg.h" namespace vision { namespace image { diff --git a/torchvision/csrc/io/image/cpu/jpegcommon.h b/torchvision/csrc/io/image/cpu/common_jpeg.h similarity index 100% rename from torchvision/csrc/io/image/cpu/jpegcommon.h rename to torchvision/csrc/io/image/cpu/common_jpeg.h diff --git a/torchvision/csrc/io/image/cpu/pngcommon.h b/torchvision/csrc/io/image/cpu/common_png.h similarity index 100% rename from torchvision/csrc/io/image/cpu/pngcommon.h rename to torchvision/csrc/io/image/cpu/common_png.h diff --git a/torchvision/csrc/io/image/cpu/read_image_impl.cpp b/torchvision/csrc/io/image/cpu/decode_image.cpp similarity index 85% rename from torchvision/csrc/io/image/cpu/read_image_impl.cpp rename to torchvision/csrc/io/image/cpu/decode_image.cpp index bc9e20a270a..1cc05dc76ca 100644 --- a/torchvision/csrc/io/image/cpu/read_image_impl.cpp +++ b/torchvision/csrc/io/image/cpu/decode_image.cpp @@ -1,7 +1,7 @@ -#include "read_image_impl.h" +#include "decode_image.h" -#include "readjpeg_impl.h" -#include "readpng_impl.h" +#include "decode_jpeg.h" +#include "decode_png.h" namespace vision { namespace image { @@ -20,9 +20,9 @@ torch::Tensor decode_image(const torch::Tensor& data, ImageReadMode mode) { const uint8_t png_signature[4] = {137, 80, 78, 71}; // == "\211PNG" if (memcmp(jpeg_signature, datap, 3) == 0) { - return decodeJPEG(data, mode); + return decode_jpeg(data, mode); } else if (memcmp(png_signature, datap, 4) == 0) { - return decodePNG(data, mode); + return decode_png(data, mode); } else { TORCH_CHECK( false, diff --git a/torchvision/csrc/io/image/cpu/read_image_impl.h b/torchvision/csrc/io/image/cpu/decode_image.h similarity index 100% rename from torchvision/csrc/io/image/cpu/read_image_impl.h rename to torchvision/csrc/io/image/cpu/decode_image.h diff --git a/torchvision/csrc/io/image/cpu/readjpeg_impl.cpp b/torchvision/csrc/io/image/cpu/decode_jpeg.cpp similarity index 94% rename from torchvision/csrc/io/image/cpu/readjpeg_impl.cpp rename to torchvision/csrc/io/image/cpu/decode_jpeg.cpp index 45ed3bad6f1..dbe10d4a738 100644 --- a/torchvision/csrc/io/image/cpu/readjpeg_impl.cpp +++ b/torchvision/csrc/io/image/cpu/decode_jpeg.cpp @@ -1,5 +1,5 @@ -#include "readjpeg_impl.h" -#include "jpegcommon.h" +#include "decode_jpeg.h" +#include "common_jpeg.h" namespace vision { namespace image { @@ -7,9 +7,9 @@ namespace image { using namespace detail; #if !JPEG_FOUND -torch::Tensor decodeJPEG(const torch::Tensor& data, ImageReadMode mode) { +torch::Tensor decode_jpeg(const torch::Tensor& data, ImageReadMode mode) { TORCH_CHECK( - false, "decodeJPEG: torchvision not compiled with libjpeg support"); + false, "decode_jpeg: torchvision not compiled with libjpeg support"); } #else @@ -73,7 +73,7 @@ static void torch_jpeg_set_source_mgr( } // namespace -torch::Tensor decodeJPEG(const torch::Tensor& data, ImageReadMode mode) { +torch::Tensor decode_jpeg(const torch::Tensor& data, ImageReadMode mode) { // Check that the input tensor dtype is uint8 TORCH_CHECK(data.dtype() == torch::kU8, "Expected a torch.uint8 tensor"); // Check that the input tensor is 1-dimensional diff --git a/torchvision/csrc/io/image/cpu/readpng_impl.h b/torchvision/csrc/io/image/cpu/decode_jpeg.h similarity index 86% rename from torchvision/csrc/io/image/cpu/readpng_impl.h rename to torchvision/csrc/io/image/cpu/decode_jpeg.h index 4f0328e46dc..97ed3d51a54 100644 --- a/torchvision/csrc/io/image/cpu/readpng_impl.h +++ b/torchvision/csrc/io/image/cpu/decode_jpeg.h @@ -6,7 +6,7 @@ namespace vision { namespace image { -C10_EXPORT torch::Tensor decodePNG( +C10_EXPORT torch::Tensor decode_jpeg( const torch::Tensor& data, ImageReadMode mode = IMAGE_READ_MODE_UNCHANGED); diff --git a/torchvision/csrc/io/image/cpu/readpng_impl.cpp b/torchvision/csrc/io/image/cpu/decode_png.cpp similarity index 94% rename from torchvision/csrc/io/image/cpu/readpng_impl.cpp rename to torchvision/csrc/io/image/cpu/decode_png.cpp index 178c7c5a5ff..5ee33635a1c 100644 --- a/torchvision/csrc/io/image/cpu/readpng_impl.cpp +++ b/torchvision/csrc/io/image/cpu/decode_png.cpp @@ -1,16 +1,17 @@ -#include "readpng_impl.h" -#include "pngcommon.h" +#include "decode_png.h" +#include "common_png.h" namespace vision { namespace image { #if !PNG_FOUND -torch::Tensor decodePNG(const torch::Tensor& data, ImageReadMode mode) { - TORCH_CHECK(false, "decodePNG: torchvision not compiled with libPNG support"); +torch::Tensor decode_png(const torch::Tensor& data, ImageReadMode mode) { + TORCH_CHECK( + false, "decode_png: torchvision not compiled with libPNG support"); } #else -torch::Tensor decodePNG(const torch::Tensor& data, ImageReadMode mode) { +torch::Tensor decode_png(const torch::Tensor& data, ImageReadMode mode) { // Check that the input tensor dtype is uint8 TORCH_CHECK(data.dtype() == torch::kU8, "Expected a torch.uint8 tensor"); // Check that the input tensor is 1-dimensional diff --git a/torchvision/csrc/io/image/cpu/readjpeg_impl.h b/torchvision/csrc/io/image/cpu/decode_png.h similarity index 86% rename from torchvision/csrc/io/image/cpu/readjpeg_impl.h rename to torchvision/csrc/io/image/cpu/decode_png.h index d5dad5f493c..471bf77d935 100644 --- a/torchvision/csrc/io/image/cpu/readjpeg_impl.h +++ b/torchvision/csrc/io/image/cpu/decode_png.h @@ -6,7 +6,7 @@ namespace vision { namespace image { -C10_EXPORT torch::Tensor decodeJPEG( +C10_EXPORT torch::Tensor decode_png( const torch::Tensor& data, ImageReadMode mode = IMAGE_READ_MODE_UNCHANGED); diff --git a/torchvision/csrc/io/image/cpu/writejpeg_impl.cpp b/torchvision/csrc/io/image/cpu/encode_jpeg.cpp similarity index 90% rename from torchvision/csrc/io/image/cpu/writejpeg_impl.cpp rename to torchvision/csrc/io/image/cpu/encode_jpeg.cpp index ab19ee0a854..6b4bede56db 100644 --- a/torchvision/csrc/io/image/cpu/writejpeg_impl.cpp +++ b/torchvision/csrc/io/image/cpu/encode_jpeg.cpp @@ -1,6 +1,6 @@ -#include "writejpeg_impl.h" +#include "encode_jpeg.h" -#include "jpegcommon.h" +#include "common_jpeg.h" namespace vision { namespace image { @@ -9,14 +9,14 @@ using namespace detail; #if !JPEG_FOUND -torch::Tensor encodeJPEG(const torch::Tensor& data, int64_t quality) { +torch::Tensor encode_jpeg(const torch::Tensor& data, int64_t quality) { TORCH_CHECK( - false, "encodeJPEG: torchvision not compiled with libjpeg support"); + false, "encode_jpeg: torchvision not compiled with libjpeg support"); } #else -torch::Tensor encodeJPEG(const torch::Tensor& data, int64_t quality) { +torch::Tensor encode_jpeg(const torch::Tensor& data, int64_t quality) { // Define compression structures and error handling struct jpeg_compress_struct cinfo; struct torch_jpeg_error_mgr jerr; diff --git a/torchvision/csrc/io/image/cpu/writejpeg_impl.h b/torchvision/csrc/io/image/cpu/encode_jpeg.h similarity index 57% rename from torchvision/csrc/io/image/cpu/writejpeg_impl.h rename to torchvision/csrc/io/image/cpu/encode_jpeg.h index 10856bd0e97..25084e154d6 100644 --- a/torchvision/csrc/io/image/cpu/writejpeg_impl.h +++ b/torchvision/csrc/io/image/cpu/encode_jpeg.h @@ -5,7 +5,9 @@ namespace vision { namespace image { -C10_EXPORT torch::Tensor encodeJPEG(const torch::Tensor& data, int64_t quality); +C10_EXPORT torch::Tensor encode_jpeg( + const torch::Tensor& data, + int64_t quality); } // namespace image } // namespace vision diff --git a/torchvision/csrc/io/image/cpu/writepng_impl.cpp b/torchvision/csrc/io/image/cpu/encode_png.cpp similarity index 93% rename from torchvision/csrc/io/image/cpu/writepng_impl.cpp rename to torchvision/csrc/io/image/cpu/encode_png.cpp index 62b66fd9852..6be2b085426 100644 --- a/torchvision/csrc/io/image/cpu/writepng_impl.cpp +++ b/torchvision/csrc/io/image/cpu/encode_png.cpp @@ -1,14 +1,15 @@ -#include "writejpeg_impl.h" +#include "encode_jpeg.h" -#include "pngcommon.h" +#include "common_png.h" namespace vision { namespace image { #if !PNG_FOUND -torch::Tensor encodePNG(const torch::Tensor& data, int64_t compression_level) { - TORCH_CHECK(false, "encodePNG: torchvision not compiled with libpng support"); +torch::Tensor encode_png(const torch::Tensor& data, int64_t compression_level) { + TORCH_CHECK( + false, "encode_png: torchvision not compiled with libpng support"); } #else @@ -66,7 +67,7 @@ void torch_png_write_data( } // namespace -torch::Tensor encodePNG(const torch::Tensor& data, int64_t compression_level) { +torch::Tensor encode_png(const torch::Tensor& data, int64_t compression_level) { // Define compression structures and error handling png_structp png_write; png_infop info_ptr; diff --git a/torchvision/csrc/io/image/cpu/writepng_impl.h b/torchvision/csrc/io/image/cpu/encode_png.h similarity index 83% rename from torchvision/csrc/io/image/cpu/writepng_impl.h rename to torchvision/csrc/io/image/cpu/encode_png.h index 98d25046ea5..86a67c8706e 100644 --- a/torchvision/csrc/io/image/cpu/writepng_impl.h +++ b/torchvision/csrc/io/image/cpu/encode_png.h @@ -5,7 +5,7 @@ namespace vision { namespace image { -C10_EXPORT torch::Tensor encodePNG( +C10_EXPORT torch::Tensor encode_png( const torch::Tensor& data, int64_t compression_level); diff --git a/torchvision/csrc/io/image/cpu/read_write_file_impl.cpp b/torchvision/csrc/io/image/cpu/read_write_file.cpp similarity index 98% rename from torchvision/csrc/io/image/cpu/read_write_file_impl.cpp rename to torchvision/csrc/io/image/cpu/read_write_file.cpp index ea1e61a71b0..a0bb7df72d5 100644 --- a/torchvision/csrc/io/image/cpu/read_write_file_impl.cpp +++ b/torchvision/csrc/io/image/cpu/read_write_file.cpp @@ -1,4 +1,4 @@ -#include "read_write_file_impl.h" +#include "read_write_file.h" #include diff --git a/torchvision/csrc/io/image/cpu/read_write_file_impl.h b/torchvision/csrc/io/image/cpu/read_write_file.h similarity index 100% rename from torchvision/csrc/io/image/cpu/read_write_file_impl.h rename to torchvision/csrc/io/image/cpu/read_write_file.h diff --git a/torchvision/csrc/io/image/image.cpp b/torchvision/csrc/io/image/image.cpp index 16d340941b6..51cf9c7ce3e 100644 --- a/torchvision/csrc/io/image/image.cpp +++ b/torchvision/csrc/io/image/image.cpp @@ -15,10 +15,10 @@ namespace vision { namespace image { static auto registry = torch::RegisterOperators() - .op("image::decode_png", &decodePNG) - .op("image::encode_png", &encodePNG) - .op("image::decode_jpeg", &decodeJPEG) - .op("image::encode_jpeg", &encodeJPEG) + .op("image::decode_png", &decode_png) + .op("image::encode_png", &encode_png) + .op("image::decode_jpeg", &decode_jpeg) + .op("image::encode_jpeg", &encode_jpeg) .op("image::read_file", &read_file) .op("image::write_file", &write_file) .op("image::decode_image", &decode_image); diff --git a/torchvision/csrc/io/image/image.h b/torchvision/csrc/io/image/image.h index 837c121b3ff..fb09d6d71b8 100644 --- a/torchvision/csrc/io/image/image.h +++ b/torchvision/csrc/io/image/image.h @@ -1,8 +1,8 @@ #pragma once -#include "cpu/read_image_impl.h" -#include "cpu/read_write_file_impl.h" -#include "cpu/readjpeg_impl.h" -#include "cpu/readpng_impl.h" -#include "cpu/writejpeg_impl.h" -#include "cpu/writepng_impl.h" +#include "cpu/decode_image.h" +#include "cpu/decode_jpeg.h" +#include "cpu/decode_png.h" +#include "cpu/encode_jpeg.h" +#include "cpu/encode_png.h" +#include "cpu/read_write_file.h" From 8bad5859091c05662c9642567c35f8f39cdc8011 Mon Sep 17 00:00:00 2001 From: Vasilis Vryniotis Date: Thu, 28 Jan 2021 10:05:19 +0000 Subject: [PATCH 5/5] Refactoring to remove the double ifs in common_jpeg.h --- torchvision/csrc/io/image/cpu/common_jpeg.h | 7 ++----- torchvision/csrc/io/image/cpu/decode_jpeg.cpp | 4 ++-- torchvision/csrc/io/image/cpu/encode_jpeg.cpp | 4 ++-- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/torchvision/csrc/io/image/cpu/common_jpeg.h b/torchvision/csrc/io/image/cpu/common_jpeg.h index 3131da589f6..7f7f9f0ccf1 100644 --- a/torchvision/csrc/io/image/cpu/common_jpeg.h +++ b/torchvision/csrc/io/image/cpu/common_jpeg.h @@ -5,14 +5,11 @@ #include #include -#endif namespace vision { namespace image { namespace detail { -#if JPEG_FOUND - static const JOCTET EOI_BUFFER[1] = {JPEG_EOI}; struct torch_jpeg_error_mgr { struct jpeg_error_mgr pub; /* "public" fields */ @@ -23,8 +20,8 @@ struct torch_jpeg_error_mgr { using torch_jpeg_error_ptr = struct torch_jpeg_error_mgr*; void torch_jpeg_error_exit(j_common_ptr cinfo); -#endif - } // namespace detail } // namespace image } // namespace vision + +#endif diff --git a/torchvision/csrc/io/image/cpu/decode_jpeg.cpp b/torchvision/csrc/io/image/cpu/decode_jpeg.cpp index dbe10d4a738..928a9df9b35 100644 --- a/torchvision/csrc/io/image/cpu/decode_jpeg.cpp +++ b/torchvision/csrc/io/image/cpu/decode_jpeg.cpp @@ -4,8 +4,6 @@ namespace vision { namespace image { -using namespace detail; - #if !JPEG_FOUND torch::Tensor decode_jpeg(const torch::Tensor& data, ImageReadMode mode) { TORCH_CHECK( @@ -13,6 +11,8 @@ torch::Tensor decode_jpeg(const torch::Tensor& data, ImageReadMode mode) { } #else +using namespace detail; + namespace { struct torch_jpeg_mgr { diff --git a/torchvision/csrc/io/image/cpu/encode_jpeg.cpp b/torchvision/csrc/io/image/cpu/encode_jpeg.cpp index 6b4bede56db..c84ad37005d 100644 --- a/torchvision/csrc/io/image/cpu/encode_jpeg.cpp +++ b/torchvision/csrc/io/image/cpu/encode_jpeg.cpp @@ -5,8 +5,6 @@ namespace vision { namespace image { -using namespace detail; - #if !JPEG_FOUND torch::Tensor encode_jpeg(const torch::Tensor& data, int64_t quality) { @@ -16,6 +14,8 @@ torch::Tensor encode_jpeg(const torch::Tensor& data, int64_t quality) { #else +using namespace detail; + torch::Tensor encode_jpeg(const torch::Tensor& data, int64_t quality) { // Define compression structures and error handling struct jpeg_compress_struct cinfo;