@@ -1417,13 +1417,23 @@ def test_get_frames_at_tensor_indices(self):
14171417
14181418 @needs_cuda
14191419 @pytest .mark .parametrize (
1420- "asset" , (NASA_VIDEO , TEST_SRC_2_720P , BT709_FULL_RANGE , TEST_SRC_2_720P_H265 )
1420+ "asset" ,
1421+ (
1422+ NASA_VIDEO ,
1423+ TEST_SRC_2_720P ,
1424+ BT709_FULL_RANGE ,
1425+ TEST_SRC_2_720P_H265 ,
1426+ AV1_VIDEO ,
1427+ ),
14211428 )
14221429 @pytest .mark .parametrize ("contiguous_indices" , (True , False ))
14231430 @pytest .mark .parametrize ("seek_mode" , ("exact" , "approximate" ))
14241431 def test_beta_cuda_interface_get_frame_at (
14251432 self , asset , contiguous_indices , seek_mode
14261433 ):
1434+ if asset == AV1_VIDEO and seek_mode == "approximate" :
1435+ pytest .skip ("AV1 asset doesn't work with approximate mode" )
1436+
14271437 ref_decoder = VideoDecoder (asset .path , device = "cuda" , seek_mode = seek_mode )
14281438 beta_decoder = VideoDecoder (
14291439 asset .path , device = "cuda:0:beta" , seek_mode = seek_mode
@@ -1449,13 +1459,23 @@ def test_beta_cuda_interface_get_frame_at(
14491459
14501460 @needs_cuda
14511461 @pytest .mark .parametrize (
1452- "asset" , (NASA_VIDEO , TEST_SRC_2_720P , BT709_FULL_RANGE , TEST_SRC_2_720P_H265 )
1462+ "asset" ,
1463+ (
1464+ NASA_VIDEO ,
1465+ TEST_SRC_2_720P ,
1466+ BT709_FULL_RANGE ,
1467+ TEST_SRC_2_720P_H265 ,
1468+ AV1_VIDEO ,
1469+ ),
14531470 )
14541471 @pytest .mark .parametrize ("contiguous_indices" , (True , False ))
14551472 @pytest .mark .parametrize ("seek_mode" , ("exact" , "approximate" ))
14561473 def test_beta_cuda_interface_get_frames_at (
14571474 self , asset , contiguous_indices , seek_mode
14581475 ):
1476+ if asset == AV1_VIDEO and seek_mode == "approximate" :
1477+ pytest .skip ("AV1 asset doesn't work with approximate mode" )
1478+
14591479 ref_decoder = VideoDecoder (asset .path , device = "cuda" , seek_mode = seek_mode )
14601480 beta_decoder = VideoDecoder (
14611481 asset .path , device = "cuda:0:beta" , seek_mode = seek_mode
@@ -1482,10 +1502,20 @@ def test_beta_cuda_interface_get_frames_at(
14821502
14831503 @needs_cuda
14841504 @pytest .mark .parametrize (
1485- "asset" , (NASA_VIDEO , TEST_SRC_2_720P , BT709_FULL_RANGE , TEST_SRC_2_720P_H265 )
1505+ "asset" ,
1506+ (
1507+ NASA_VIDEO ,
1508+ TEST_SRC_2_720P ,
1509+ BT709_FULL_RANGE ,
1510+ TEST_SRC_2_720P_H265 ,
1511+ AV1_VIDEO ,
1512+ ),
14861513 )
14871514 @pytest .mark .parametrize ("seek_mode" , ("exact" , "approximate" ))
14881515 def test_beta_cuda_interface_get_frame_played_at (self , asset , seek_mode ):
1516+ if asset == AV1_VIDEO and seek_mode == "approximate" :
1517+ pytest .skip ("AV1 asset doesn't work with approximate mode" )
1518+
14891519 ref_decoder = VideoDecoder (asset .path , device = "cuda" , seek_mode = seek_mode )
14901520 beta_decoder = VideoDecoder (
14911521 asset .path , device = "cuda:0:beta" , seek_mode = seek_mode
@@ -1499,17 +1529,30 @@ def test_beta_cuda_interface_get_frame_played_at(self, asset, seek_mode):
14991529 for pts in timestamps :
15001530 ref_frame = ref_decoder .get_frame_played_at (pts )
15011531 beta_frame = beta_decoder .get_frame_played_at (pts )
1502- torch .testing .assert_close (beta_frame .data , ref_frame .data , rtol = 0 , atol = 0 )
1532+ if get_ffmpeg_major_version () > 4 : # TODONVDEC P1 see above
1533+ torch .testing .assert_close (
1534+ beta_frame .data , ref_frame .data , rtol = 0 , atol = 0
1535+ )
15031536
15041537 assert beta_frame .pts_seconds == ref_frame .pts_seconds
15051538 assert beta_frame .duration_seconds == ref_frame .duration_seconds
15061539
15071540 @needs_cuda
15081541 @pytest .mark .parametrize (
1509- "asset" , (NASA_VIDEO , TEST_SRC_2_720P , BT709_FULL_RANGE , TEST_SRC_2_720P_H265 )
1542+ "asset" ,
1543+ (
1544+ NASA_VIDEO ,
1545+ TEST_SRC_2_720P ,
1546+ BT709_FULL_RANGE ,
1547+ TEST_SRC_2_720P_H265 ,
1548+ AV1_VIDEO ,
1549+ ),
15101550 )
15111551 @pytest .mark .parametrize ("seek_mode" , ("exact" , "approximate" ))
15121552 def test_beta_cuda_interface_get_frames_played_at (self , asset , seek_mode ):
1553+ if asset == AV1_VIDEO and seek_mode == "approximate" :
1554+ pytest .skip ("AV1 asset doesn't work with approximate mode" )
1555+
15131556 ref_decoder = VideoDecoder (asset .path , device = "cuda" , seek_mode = seek_mode )
15141557 beta_decoder = VideoDecoder (
15151558 asset .path , device = "cuda:0:beta" , seek_mode = seek_mode
@@ -1523,18 +1566,30 @@ def test_beta_cuda_interface_get_frames_played_at(self, asset, seek_mode):
15231566
15241567 ref_frames = ref_decoder .get_frames_played_at (timestamps )
15251568 beta_frames = beta_decoder .get_frames_played_at (timestamps )
1526- torch .testing .assert_close (beta_frames .data , ref_frames .data , rtol = 0 , atol = 0 )
1569+ if get_ffmpeg_major_version () > 4 : # TODONVDEC P1 see above
1570+ torch .testing .assert_close (
1571+ beta_frames .data , ref_frames .data , rtol = 0 , atol = 0
1572+ )
15271573 torch .testing .assert_close (beta_frames .pts_seconds , ref_frames .pts_seconds )
15281574 torch .testing .assert_close (
15291575 beta_frames .duration_seconds , ref_frames .duration_seconds
15301576 )
15311577
15321578 @needs_cuda
15331579 @pytest .mark .parametrize (
1534- "asset" , (NASA_VIDEO , TEST_SRC_2_720P , BT709_FULL_RANGE , TEST_SRC_2_720P_H265 )
1580+ "asset" ,
1581+ (
1582+ NASA_VIDEO ,
1583+ TEST_SRC_2_720P ,
1584+ BT709_FULL_RANGE ,
1585+ TEST_SRC_2_720P_H265 ,
1586+ AV1_VIDEO ,
1587+ ),
15351588 )
15361589 @pytest .mark .parametrize ("seek_mode" , ("exact" , "approximate" ))
15371590 def test_beta_cuda_interface_backwards (self , asset , seek_mode ):
1591+ if asset == AV1_VIDEO and seek_mode == "approximate" :
1592+ pytest .skip ("AV1 asset doesn't work with approximate mode" )
15381593
15391594 ref_decoder = VideoDecoder (asset .path , device = "cuda" , seek_mode = seek_mode )
15401595 beta_decoder = VideoDecoder (
@@ -1543,11 +1598,20 @@ def test_beta_cuda_interface_backwards(self, asset, seek_mode):
15431598
15441599 assert ref_decoder .metadata == beta_decoder .metadata
15451600
1546- for frame_index in [0 , 100 , 10 , 50 , 20 , 200 , 150 , 389 ]:
1601+ for frame_index in [0 , 1 , 2 , 1 , 0 , 100 , 10 , 50 , 20 , 200 , 150 , 150 , 150 , 389 , 2 ]:
1602+ # This is ugly, but OK: the indices values above are relevant for
1603+ # the NASA_VIDEO. We need to avoid going out of bounds for other
1604+ # videos so we cap the frame_index. This test still serves its
1605+ # purpose: no matter what the range of the video, we're still doing
1606+ # backwards seeks.
15471607 frame_index = min (frame_index , len (ref_decoder ) - 1 )
1608+
15481609 ref_frame = ref_decoder .get_frame_at (frame_index )
15491610 beta_frame = beta_decoder .get_frame_at (frame_index )
1550- torch .testing .assert_close (beta_frame .data , ref_frame .data , rtol = 0 , atol = 0 )
1611+ if get_ffmpeg_major_version () > 4 : # TODONVDEC P1 see above
1612+ torch .testing .assert_close (
1613+ beta_frame .data , ref_frame .data , rtol = 0 , atol = 0
1614+ )
15511615
15521616 assert beta_frame .pts_seconds == ref_frame .pts_seconds
15531617 assert beta_frame .duration_seconds == ref_frame .duration_seconds
@@ -1568,8 +1632,6 @@ def test_beta_cuda_interface_small_h265(self):
15681632
15691633 @needs_cuda
15701634 def test_beta_cuda_interface_error (self ):
1571- with pytest .raises (RuntimeError , match = "Unsupported codec type: av1" ):
1572- VideoDecoder (AV1_VIDEO .path , device = "cuda:0:beta" )
15731635 with pytest .raises (RuntimeError , match = "Unsupported device" ):
15741636 VideoDecoder (NASA_VIDEO .path , device = "cuda:0:bad_variant" )
15751637
0 commit comments