void FormatData::load( LoadContextPtr context ) { Data::load( context ); assert( ( sizeof( FormatData::ValueType ) / sizeof( FormatData::BaseType ) ) == 4 ); const IndexedIO *container; FormatData::BaseType *p = FormatData::baseWritable(); try { container = context->rawContainer(); container->read( "window", (int*&)p, 4 ); } catch( ... ) { unsigned int v = 0; container = context->container( staticTypeName(), v ); container->read( "window", (int*&)p, 4 ); } const IndexedIO *rawContainer = context->rawContainer(); double aspect = 1.; rawContainer->read( "aspect", aspect ); writable().setPixelAspect( aspect ); }
void DateTimeData::load( LoadContextPtr context ) { Data::load( context ); const IndexedIO *container = context->rawContainer(); std::string t; container->read( g_valueEntry, t ); try { writable() = boost::posix_time::from_iso_string( t ); } catch ( boost::bad_lexical_cast ) { /// Do these checks here instead of first as they're likely to be the least-used cases. if ( t == "not-a-date-time" ) { writable() = boost::posix_time::not_a_date_time; } else if ( t == "+infinity" ) { writable() = boost::posix_time::pos_infin; } else if ( t == "-infinity" ) { writable() = boost::posix_time::neg_infin; } else { throw; } } }
void TimeCodeData::load( LoadContextPtr context ) { Data::load( context ); const IndexedIO *container = context->rawContainer(); unsigned data[2]; unsigned *dataPtr = &data[0]; container->read( g_valueEntry, dataPtr, 2 ); Imf::TimeCode &timeCode = writable(); timeCode.setTimeAndFlags( data[0] ); timeCode.setUserData( data[1] ); }