MCPcopy Create free account
hub / github.com/ImageEngine/cortex / frameListFromList

Method frameListFromList

src/IECore/FileSequenceFunctions.cpp:314–375  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

312}
313
314FrameListPtr IECore::frameListFromList( const std::vector< FrameList::Frame > &frames )
315{
316 if ( frames.size() == 0 )
317 {
318 return new EmptyFrameList();
319 }
320 else if ( frames.size() == 1 )
321 {
322 return new FrameRange( frames[0], frames[0] );
323 }
324
325 std::vector< FrameListPtr > frameLists;
326
327 FrameList::Frame rangeStart = 0;
328 FrameList::Frame rangeEnd = 1;
329 FrameList::Frame rangeStep = frames[ rangeEnd ] - frames[ rangeStart ];
330
331 while ( rangeEnd <= (FrameList::Frame)frames.size() )
332 {
333 if ( rangeEnd == (FrameList::Frame)frames.size() || frames[ rangeEnd ] - frames[ rangeEnd -1 ] != rangeStep )
334 {
335 /// we've come to the end of a run
336 if ( rangeEnd - 1 == rangeStart )
337 {
338 frameLists.push_back( new FrameRange( frames[ rangeStart ], frames[ rangeStart ] ) );
339 }
340 else
341 {
342 if ( rangeStep > 0)
343 {
344 frameLists.push_back( new FrameRange( frames[ rangeStart ], frames[ rangeEnd -1 ], rangeStep ) );
345 }
346 else
347 {
348 frameLists.push_back( new ReversedFrameList( new FrameRange(frames[ rangeEnd -1 ], frames[ rangeStart ], -rangeStep ) ));
349 }
350 }
351
352 rangeStart = rangeEnd;
353 rangeEnd = rangeStart + 1;
354
355 if ( rangeEnd < (FrameList::Frame)frames.size() )
356 {
357 rangeStep = frames[ rangeEnd ] - frames[ rangeStart ];
358 }
359 }
360 else
361 {
362 rangeEnd ++;
363 }
364 }
365
366 if ( frameLists.size() == 1 )
367 {
368 return frameLists[0];
369 }
370 else
371 {

Callers 3

doOperationMethod · 0.45
testMethod · 0.45

Calls 1

sizeMethod · 0.45

Tested by

no test coverage detected