Changeset 9854

Show
Ignore:
Timestamp:
03/04/09 12:05:55 (5 years ago)
Author:
robert
Message:

Added support for using libswscale

Location:
OpenSceneGraph/trunk
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/CMakeModules/FindFFmpeg.cmake

    r9840 r9854  
    2121    pkg_check_modules(FFMPEG_LIBAVCODEC libavcodec) 
    2222    pkg_check_modules(FFMPEG_LIBAVUTIL libavutil) 
     23    pkg_check_modules(FFMPEG_LIBSWSCALE libswscale) 
    2324 
    2425ENDIF(PKG_CONFIG_FOUND) 
  • OpenSceneGraph/trunk/src/osgPlugins/ffmpeg/CMakeLists.txt

    r9847 r9854  
    11# INCLUDE_DIRECTORIES( ${FFMPEG_INCLUDE_DIRS} ) 
    22 
    3 INCLUDE_DIRECTORIES(  
    4     ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS} ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS}/libavformat ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS}/ffmpeg 
    5     ${FFMPEG_LIBAVDEVICE_INCLUDE_DIRS} ${FFMPEG_LIBAVDEVICE_INCLUDE_DIRS}/libavdevice ${FFMPEG_LIBAVDEVICE_INCLUDE_DIRS}/ffmpeg 
    6     ${FFMPEG_LIBAVCODEC_INCLUDE_DIRS} ${FFMPEG_LIBAVCODEC_INCLUDE_DIRS}/libavcodec ${FFMPEG_LIBAVCODEC_INCLUDE_DIRS}/ffmpeg 
    7     ${FFMPEG_LIBAVUTIL_INCLUDE_DIRS} ${FFMPEG_LIBAVUTIL_INCLUDE_DIRS}/libavcodec ${FFMPEG_LIBAVUTIL_INCLUDE_DIRS}/ffmpeg 
    8 ) 
     3IF (FFMPEG_LIBSWSCALE_FOUND) 
     4 
     5    INCLUDE_DIRECTORIES(  
     6        ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS} ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS}/libavformat ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS}/ffmpeg 
     7        ${FFMPEG_LIBAVDEVICE_INCLUDE_DIRS} ${FFMPEG_LIBAVDEVICE_INCLUDE_DIRS}/libavdevice ${FFMPEG_LIBAVDEVICE_INCLUDE_DIRS}/ffmpeg 
     8        ${FFMPEG_LIBAVCODEC_INCLUDE_DIRS} ${FFMPEG_LIBAVCODEC_INCLUDE_DIRS}/libavcodec ${FFMPEG_LIBAVCODEC_INCLUDE_DIRS}/ffmpeg 
     9        ${FFMPEG_LIBAVUTIL_INCLUDE_DIRS} ${FFMPEG_LIBAVUTIL_INCLUDE_DIRS}/libavcodec ${FFMPEG_LIBAVUTIL_INCLUDE_DIRS}/ffmpeg 
     10        ${FFMPEG_LIBSWSCALE_INCLUDE_DIRS} ${FFMPEG_LIBSWSCALE_INCLUDE_DIRS}/libswscale ${FFMPEG_LIBSWSCALE_INCLUDE_DIRS}/ffmpeg 
     11    ) 
     12 
     13    ADD_DEFINITIONS(-DUSE_SWSCALE) 
     14 
     15    LINK_DIRECTORIES(${FFMPEG_LIBRARY_DIRS}) 
     16 
     17    SET(TARGET_EXTERNAL_LIBRARIES ${FFMPEG_LIBRARIES} ${FFMPEG_LIBSWSCALE_LIBRARIES}) 
     18 
     19ELSE(FFMPEG_LIBSWSCALE_FOUND) 
     20 
     21    INCLUDE_DIRECTORIES(  
     22        ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS} ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS}/libavformat ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS}/ffmpeg 
     23        ${FFMPEG_LIBAVDEVICE_INCLUDE_DIRS} ${FFMPEG_LIBAVDEVICE_INCLUDE_DIRS}/libavdevice ${FFMPEG_LIBAVDEVICE_INCLUDE_DIRS}/ffmpeg 
     24        ${FFMPEG_LIBAVCODEC_INCLUDE_DIRS} ${FFMPEG_LIBAVCODEC_INCLUDE_DIRS}/libavcodec ${FFMPEG_LIBAVCODEC_INCLUDE_DIRS}/ffmpeg 
     25        ${FFMPEG_LIBAVUTIL_INCLUDE_DIRS} ${FFMPEG_LIBAVUTIL_INCLUDE_DIRS}/libavcodec ${FFMPEG_LIBAVUTIL_INCLUDE_DIRS}/ffmpeg 
     26    ) 
     27 
     28    LINK_DIRECTORIES(${FFMPEG_LIBRARY_DIRS}) 
     29 
     30    SET(TARGET_EXTERNAL_LIBRARIES ${FFMPEG_LIBRARIES} ) 
     31 
     32ENDIF() 
    933 
    1034# MESSAGE("FFMPEG_LIBAVFORMAT_INCLUDE_DIRS = "  ${FFMPEG_LIBAVFORMAT_INCLUDE_DIRS} ) 
     
    3761) 
    3862 
    39 LINK_DIRECTORIES(${FFMPEG_LIBRARY_DIRS}) 
    40  
    41 SET(TARGET_EXTERNAL_LIBRARIES ${FFMPEG_LIBRARIES} ) 
    4263 
    4364 
  • OpenSceneGraph/trunk/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp

    r9837 r9854  
    66#include <string.h> 
    77 
     8#if 0 
    89extern "C"  
    910{ 
     
    1213 
    1314}; 
     15#endif 
    1416 
    1517namespace osgFFmpeg { 
     
    2830    m_user_data(0), 
    2931    m_publish_func(0), 
    30     m_exit(false) 
     32    m_exit(false), 
     33    m_swscale_ctx(0) 
    3134{ 
    3235 
     
    4144        m_exit = true; 
    4245        join(); 
     46    } 
     47     
     48    if (m_swscale_ctx) 
     49    { 
     50        sws_freeContext(m_swscale_ctx); 
     51        m_swscale_ctx = 0; 
    4352    } 
    4453} 
     
    211220} 
    212221 
     222int FFmpegDecoderVideo::convert(AVPicture *dst, int dst_pix_fmt, const AVPicture *src, 
     223            int src_pix_fmt, int src_width, int src_height) 
     224{ 
     225#ifdef USE_SWSCALE 
     226    if (m_swscale_ctx==0) 
     227    { 
     228        m_swscale_ctx = sws_getContext(src_width, src_height, src_pix_fmt, 
     229                                      src_width, src_height, dst_pix_fmt,                                     
     230                                      SWS_BILINEAR, NULL, NULL, NULL); 
     231    } 
     232     
     233    return sws_scale(m_swscale_ctx, 
     234           src->data, src->linesize, 0, src_height, 
     235           dst->data, dst->linesize); 
     236#else 
     237    return convert(dst, dst_pix_fmt, src, 
     238                   src_pix_fmt, src_width, src_height) 
     239#endif 
     240} 
    213241 
    214242 
     
    231259        yuva420pToRgba(dst, src, width(), height()); 
    232260    else 
    233         img_convert(dst, PIX_FMT_RGB32, src, m_context->pix_fmt, width(), height()); 
     261        convert(dst, PIX_FMT_RGB32, src, m_context->pix_fmt, width(), height()); 
    234262 
    235263    // Flip and swap buffer 
     
    267295void FFmpegDecoderVideo::yuva420pToRgba(AVPicture * const dst, const AVPicture * const src, int width, int height) 
    268296{ 
    269     img_convert(dst, PIX_FMT_RGB32, src, m_context->pix_fmt, width, height); 
     297    convert(dst, PIX_FMT_RGB32, src, m_context->pix_fmt, width, height); 
    270298 
    271299    const size_t bpp = 4; 
  • OpenSceneGraph/trunk/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.hpp

    r9840 r9854  
    9090    void yuva420pToRgba(AVPicture *dst, const AVPicture *src, int width, int height); 
    9191 
     92    int convert(AVPicture *dst, int dst_pix_fmt, const AVPicture *src, 
     93                int src_pix_fmt, int src_width, int src_height); 
     94 
     95 
    9296    static int getBuffer(AVCodecContext * context, AVFrame * picture); 
    9397    static void releaseBuffer(AVCodecContext * context, AVFrame * picture); 
    9498 
    95     PacketQueue &        m_packets; 
    96     FFmpegClocks &        m_clocks; 
    97     AVStream *            m_stream; 
    98     AVCodecContext *    m_context; 
    99     AVCodec *            m_codec; 
    100     const uint8_t *        m_packet_data; 
    101     int                    m_bytes_remaining; 
    102     int64_t                m_packet_pts; 
     99    PacketQueue &           m_packets; 
     100    FFmpegClocks &          m_clocks; 
     101    AVStream *              m_stream; 
     102    AVCodecContext *        m_context; 
     103    AVCodec *               m_codec; 
     104    const uint8_t *         m_packet_data; 
     105    int                     m_bytes_remaining; 
     106    int64_t                 m_packet_pts; 
    103107     
    104     FramePtr            m_frame; 
    105     FramePtr            m_frame_rgba; 
    106     Buffer                m_buffer_rgba; 
    107     Buffer                m_buffer_rgba_public; 
     108    FramePtr                m_frame; 
     109    FramePtr                m_frame_rgba; 
     110    Buffer                  m_buffer_rgba; 
     111    Buffer                  m_buffer_rgba_public; 
    108112 
    109     void *                m_user_data; 
    110     PublishFunc            m_publish_func; 
     113    void *                  m_user_data; 
     114    PublishFunc             m_publish_func; 
    111115 
    112     double                m_frame_rate; 
    113     double                m_aspect_ratio; 
    114     int                    m_width; 
    115     int                    m_height; 
    116     size_t                m_next_frame_index; 
    117     bool                m_alpha_channel; 
     116    double                  m_frame_rate; 
     117    double                  m_aspect_ratio; 
     118    int                     m_width; 
     119    int                     m_height; 
     120    size_t                  m_next_frame_index; 
     121    bool                    m_alpha_channel; 
    118122 
    119     volatile bool        m_exit; 
     123    volatile bool           m_exit; 
     124     
     125#if USE_SWSCALE     
     126    struct SwsContext *     m_swscale_ctx; 
     127#endif 
    120128}; 
    121129 
  • OpenSceneGraph/trunk/src/osgPlugins/ffmpeg/FFmpegHeaders.hpp

    r9827 r9854  
    1010#include <avcodec.h> 
    1111#include <avformat.h> 
     12 
     13#ifdef USE_SWSCALE     
     14    #include <swscale.h> 
     15#endif 
     16 
    1217} 
    1318 
  • OpenSceneGraph/trunk/src/osgPlugins/ffmpeg/ReaderWriterFFmpeg.cpp

    r9838 r9854  
    4646            return ReadResult::FILE_NOT_HANDLED; 
    4747 
    48         const std::string path = osgDB::findDataFile(filename, options); 
     48        const std::string path = osgDB::containsServerAddress(filename) ? 
     49            filename : 
     50            osgDB::findDataFile(filename, options); 
    4951 
    5052        if (path.empty())