@ -72,30 +72,33 @@ static inline uint16_t dv_audio_12to16(uint16_t sample)
return result ;
}
/*
* This is the dumbest implementation of all - - it simply looks at
* a fixed offset and if pack isn ' t there - - fails . We might want
* to have a fallback mechanism for complete search of missing packs .
*/
static const uint8_t * dv_extract_pack ( uint8_t * frame , enum dv_pack_type t )
{
int offs ;
int c ;
switch ( t ) {
case dv_audio_source :
offs = ( 80 * 6 + 80 * 16 * 3 + 3 ) ;
break ;
case dv_audio_control :
offs = ( 80 * 6 + 80 * 16 * 4 + 3 ) ;
break ;
case dv_video_control :
offs = ( 80 * 5 + 48 + 5 ) ;
break ;
case dv_timecode :
offs = ( 80 * 1 + 3 + 3 ) ;
break ;
default :
return NULL ;
for ( c = 0 ; c < 10 ; c + + ) {
switch ( t ) {
case dv_audio_source :
if ( c & 1 ) offs = ( 80 * 6 + 80 * 16 * 0 + 3 + c * 12000 ) ;
else offs = ( 80 * 6 + 80 * 16 * 3 + 3 + c * 12000 ) ;
break ;
case dv_audio_control :
if ( c & 1 ) offs = ( 80 * 6 + 80 * 16 * 1 + 3 + c * 12000 ) ;
else offs = ( 80 * 6 + 80 * 16 * 4 + 3 + c * 12000 ) ;
break ;
case dv_video_control :
if ( c & 1 ) offs = ( 80 * 3 + 8 + c * 12000 ) ;
else offs = ( 80 * 5 + 48 + 5 + c * 12000 ) ;
break ;
case dv_timecode :
offs = ( 80 * 1 + 3 + 3 ) ;
break ;
default :
return NULL ;
}
if ( frame [ offs ] = = t )
break ;
}
return frame [ offs ] = = t ? & frame [ offs ] : NULL ;