Changeset 9865

Show
Ignore:
Timestamp:
03/05/09 11:57:54 (6 years ago)
Author:
robert
Message:

Added quick proof of concept for live video streaming under linux

Location:
OpenSceneGraph/trunk/src/osgPlugins/ffmpeg
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgPlugins/ffmpeg/FFmpegDecoder.cpp

    r9826 r9865  
    3636 
    3737 
    38  
    3938bool FFmpegDecoder::open(const std::string & filename) 
    4039{ 
     
    4443        AVFormatContext * p_format_context = 0; 
    4544 
    46         if (av_open_input_file(&p_format_context, filename.c_str(), 0, 0, 0) != 0) 
    47             throw std::runtime_error("av_open_input_file() failed"); 
    48  
     45        if (filename.compare(0, 5, "/dev/")==0) 
     46        { 
     47            avdevice_register_all(); 
     48         
     49            osg::notify(osg::NOTICE)<<"Attempting to stream "<<filename<<std::endl; 
     50 
     51            AVFormatParameters formatParams; 
     52            memset(&formatParams, 0, sizeof(AVFormatParameters)); 
     53            AVInputFormat *iformat; 
     54 
     55            formatParams.channel = 0; 
     56            formatParams.standard = 0; 
     57            formatParams.width = 640; 
     58            formatParams.height = 480; 
     59            formatParams.time_base.num = 1; 
     60            formatParams.time_base.den = 50; 
     61 
     62            iformat = av_find_input_format("video4linux2"); 
     63             
     64            if (iformat) 
     65            { 
     66                osg::notify(osg::NOTICE)<<"Found input format"<<std::endl; 
     67            } 
     68            else 
     69            { 
     70                osg::notify(osg::NOTICE)<<"Failed to find input_format"<<std::endl; 
     71            } 
     72 
     73            if (av_open_input_file(&p_format_context, filename.c_str(), iformat, 0, &formatParams) != 0) 
     74                throw std::runtime_error("av_open_input_file() failed"); 
     75        } 
     76        else 
     77        { 
     78            if (av_open_input_file(&p_format_context, filename.c_str(), 0, 0, 0) !=0 ) 
     79                throw std::runtime_error("av_open_input_file() failed"); 
     80        } 
     81         
    4982        m_format_context.reset(p_format_context); 
    5083 
  • OpenSceneGraph/trunk/src/osgPlugins/ffmpeg/FFmpegHeaders.hpp

    r9854 r9865  
    1010#include <avcodec.h> 
    1111#include <avformat.h> 
     12#include <avdevice.h> 
    1213 
    1314#ifdef USE_SWSCALE     
  • OpenSceneGraph/trunk/src/osgPlugins/ffmpeg/ReaderWriterFFmpeg.cpp

    r9854 r9865  
    4141    virtual ReadResult readImage(const std::string & filename, const osgDB::ReaderWriter::Options * options) const 
    4242    { 
     43        if (filename.compare(0, 5, "/dev/")==0) 
     44        { 
     45            return readImageStream(filename, options); 
     46        } 
     47     
    4348        const std::string ext = osgDB::getLowerCaseFileExtension(filename); 
    44  
    4549        if (! acceptsExtension(ext)) 
    4650            return ReadResult::FILE_NOT_HANDLED; 
     
    5357            return ReadResult::FILE_NOT_FOUND; 
    5458 
    55         osg::notify(osg::INFO) << "ReaderWriterFFmpeg::readImage " << path << std::endl; 
     59        return readImageStream(filename, options); 
     60    } 
     61     
     62    ReadResult readImageStream(const std::string& filename, const osgDB::ReaderWriter::Options * options) const 
     63    { 
     64        osg::notify(osg::INFO) << "ReaderWriterFFmpeg::readImage " << filename << std::endl; 
    5665 
    5766        osg::ref_ptr<osgFFmpeg::FFmpegImageStream> image_stream(new osgFFmpeg::FFmpegImageStream); 
    5867 
    59         if (! image_stream->open(path)) 
     68        if (! image_stream->open(filename)) 
    6069            return ReadResult::FILE_NOT_HANDLED; 
    6170