Support 3-channel RGB images for Mac Python
PiperOrigin-RevId: 577240413
This commit is contained in:
		
							parent
							
								
									eaf0807849
								
							
						
					
					
						commit
						d73ef24406
					
				| 
						 | 
				
			
			@ -244,12 +244,26 @@ void ImageSubmodule(pybind11::module* module) {
 | 
			
		|||
  image.def_static(
 | 
			
		||||
      "create_from_file",
 | 
			
		||||
      [](const std::string& file_name) {
 | 
			
		||||
        unsigned char* image_data = nullptr;
 | 
			
		||||
        int width;
 | 
			
		||||
        int height;
 | 
			
		||||
        int channels;
 | 
			
		||||
        auto* image_data =
 | 
			
		||||
            stbi_load(file_name.c_str(), &width, &height, &channels,
 | 
			
		||||
                      /*desired_channels=*/0);
 | 
			
		||||
 | 
			
		||||
#if TARGET_OS_OSX && !MEDIAPIPE_DISABLE_GPU
 | 
			
		||||
        // Our ObjC layer does not support 3-channel images, so we read the
 | 
			
		||||
        // number of channels first and request RGBA if needed.
 | 
			
		||||
        if (stbi_info(file_name.c_str(), &width, &height, &channels)) {
 | 
			
		||||
          if (channels == 3) {
 | 
			
		||||
            channels = 4;
 | 
			
		||||
          }
 | 
			
		||||
          int unused;
 | 
			
		||||
          image_data =
 | 
			
		||||
              stbi_load(file_name.c_str(), &width, &height, &unused, channels);
 | 
			
		||||
        }
 | 
			
		||||
#else
 | 
			
		||||
        image_data = stbi_load(file_name.c_str(), &width, &height, &channels,
 | 
			
		||||
                               /*desired_channels=*/0);
 | 
			
		||||
#endif  // TARGET_OS_OSX && !MEDIAPIPE_DISABLE_GPU
 | 
			
		||||
        if (image_data == nullptr) {
 | 
			
		||||
          throw RaisePyError(PyExc_RuntimeError,
 | 
			
		||||
                             absl::StrFormat("Image decoding failed (%s): %s",
 | 
			
		||||
| 
						 | 
				
			
			@ -263,11 +277,13 @@ void ImageSubmodule(pybind11::module* module) {
 | 
			
		|||
                ImageFormat::GRAY8, width, height, width, image_data,
 | 
			
		||||
                stbi_image_free);
 | 
			
		||||
            break;
 | 
			
		||||
#if !TARGET_OS_OSX || MEDIAPIPE_DISABLE_GPU
 | 
			
		||||
          case 3:
 | 
			
		||||
            image_frame = std::make_shared<ImageFrame>(
 | 
			
		||||
                ImageFormat::SRGB, width, height, 3 * width, image_data,
 | 
			
		||||
                stbi_image_free);
 | 
			
		||||
            break;
 | 
			
		||||
#endif  // !TARGET_OS_OSX || MEDIAPIPE_DISABLE_GPU
 | 
			
		||||
          case 4:
 | 
			
		||||
            image_frame = std::make_shared<ImageFrame>(
 | 
			
		||||
                ImageFormat::SRGBA, width, height, 4 * width, image_data,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user