@@ -3902,6 +3902,40 @@ def _first_frame(self, path, device):
39023902 frame = next (self ._decode (decoder , self ._demux (demuxer )))
39033903 return frame , converter
39043904
3905+ @pytest .mark .parametrize ("device_str" , _block_devices ())
3906+ def test_device_none_default_device (self , device_str ):
3907+ # PacketDecoder and ColorConverter default to device=None, which should
3908+ # respect both the torch.device() context manager and
3909+ # torch.set_default_device().
3910+
3911+ def assert_first_frame_is_on_default_device ():
3912+ # Note the absence of any device parameter.
3913+ demuxer = Demuxer (NASA_VIDEO .path )
3914+ decoder = PacketDecoder (demuxer )
3915+ converter = ColorConverter ()
3916+ decoded = next (self ._decode (decoder , self ._demux (demuxer )))
3917+ # DecodedFrame.device is a string, and it carries an index
3918+ # ("cuda:0") since that's what torch.get_default_device() reports.
3919+ assert torch .device (decoded .device ).type == device_str
3920+ assert converter .convert (decoded ).data .device .type == device_str
3921+
3922+ with torch .device (device_str ):
3923+ assert_first_frame_is_on_default_device ()
3924+
3925+ original_device = torch .get_default_device ()
3926+ try :
3927+ torch .set_default_device (device_str )
3928+ assert_first_frame_is_on_default_device ()
3929+ finally :
3930+ torch .set_default_device (original_device )
3931+
3932+ @pytest .mark .parametrize ("device" , _block_devices ())
3933+ def test_device_torch_device_instance (self , device ):
3934+ # device can be a torch.device instance, not just a string.
3935+ frame , converter = self ._first_frame (NASA_VIDEO .path , torch .device (device ))
3936+ assert torch .device (frame .device ).type == device
3937+ assert converter .convert (frame ).data .device .type == device
3938+
39053939 @pytest .mark .parametrize ("case" , _MATERIALIZE_VIDEOS , ids = _materialize_ids )
39063940 @pytest .mark .parametrize ("device" , _block_devices ())
39073941 def test_materialize_structure (self , case , device ):
0 commit comments