@@ -151,6 +151,7 @@ def __init__(self):
151151
152152 self ._print_each_iteration_time = False
153153 api_pref = None
154+ # Check backend abi/api for compatibility
154155 for backend in vr .getStreamBufferedBackends ():
155156 if not vr .hasBackend (backend ):
156157 continue
@@ -170,24 +171,24 @@ def decode_frames(self, video_file, pts_list):
170171 raise ValueError ("Could not open video stream" )
171172
172173 fps = cap .get (cv2 .CAP_PROP_FPS )
173- frames = int (cap .get (cv2 .CAP_PROP_FRAME_COUNT ))
174- approx_frame_numbers = [int (pts * fps ) for pts in pts_list ]
174+ approx_frame_indices = [int (pts * fps ) for pts in pts_list ]
175175
176176 current_frame = 0
177177 frames = []
178178 while True :
179179 ok = cap .grab ()
180180 if not ok :
181- break
182- if current_frame in approx_frame_numbers : # only decompress needed
181+ raise ValueError ( "Could not grab video frame" )
182+ if current_frame in approx_frame_indices : # only decompress needed
183183 ret , frame = cap .retrieve ()
184184 if ret :
185185 frames .append (frame )
186186
187- if len (frames ) == len (approx_frame_numbers ):
187+ if len (frames ) == len (approx_frame_indices ):
188188 break
189189 current_frame += 1
190190 cap .release ()
191+ assert len (frames ) == len (approx_frame_indices )
191192 return frames
192193
193194 def decode_first_n_frames (self , video_file , n ):
@@ -201,11 +202,12 @@ def decode_first_n_frames(self, video_file, n):
201202 for i in range (n ):
202203 ok = cap .grab ()
203204 if not ok :
204- break
205+ raise ValueError ( "Could not grab video frame" )
205206 ret , frame = cap .retrieve ()
206207 if ret :
207208 frames .append (frame )
208209 cap .release ()
210+ assert len (frames ) == n
209211 return frames
210212
211213 def decode_and_resize (self , video_file , pts_list , height , width , device ):
0 commit comments