Show
Ignore:
Timestamp:
01/23/15 18:15:20 (4 days ago)
Author:
robert
Message:

From Javier Taibo,
"I have found a "bug" in the new audio decoding code (actually I think the bug is in ffmpeg, but anyway it should be wise to protect the OSG plug-in about it). I am attaching a security check in FFmpegDecoderAudio.cpp.

If anybody is curious about the problem, it happens sometimes when decoding an AAC audio stream. It eventually includes a PCE block inside the AAC audio frame and then ffmpeg audio decoding function signals a "new_frame" with 1024 samples, but a null pointer instead of the audio data. It can be easily detected because in these cases number of channels is 0. Maybe this is the intended behaviour for ffmpeg, but I find it quite weird.
"

" It seems that libav does not have a channels attribute in AVFrame structure. This new version should do."

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgUtil/MeshOptimizers.cpp

    r13488 r13502  
    8686                _arrayList.push_back(array); 
    8787        } 
    88         else if (binding == osg::Geometry::BIND_PER_PRIMITIVE) 
    89             _useDrawElements = false; 
    9088    } 
    9189 
     
    232230void IndexMeshVisitor::makeMesh(Geometry& geom) 
    233231{ 
    234         if (geom.getNormalBinding()==osg::Geometry::BIND_PER_PRIMITIVE || 
    235         geom.getNormalBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET) return; 
    236  
    237     if (geom.getColorBinding()==osg::Geometry::BIND_PER_PRIMITIVE || 
    238         geom.getColorBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET) return; 
    239  
    240     if (geom.getSecondaryColorBinding()==osg::Geometry::BIND_PER_PRIMITIVE || 
    241         geom.getSecondaryColorBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET) return; 
    242  
    243     if (geom.getFogCoordBinding()==osg::Geometry::BIND_PER_PRIMITIVE || 
    244         geom.getFogCoordBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET) return; 
     232    if (geom.containsDeprecatedData()) geom.fixDeprecatedData(); 
     233 
     234    if (geom.getNormalBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET) return; 
     235 
     236    if (geom.getColorBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET) return; 
     237 
     238    if (geom.getSecondaryColorBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET) return; 
     239 
     240    if (geom.getFogCoordBinding()==osg::Geometry::BIND_PER_PRIMITIVE_SET) return; 
    245241 
    246242    // no point optimizing if we don't have enough vertices.