stream_io_callback.cpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:3k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * mkv.cpp : matroska demuxer
  3.  *****************************************************************************
  4.  * Copyright (C) 2003-2004 the VideoLAN team
  5.  * $Id: c5570e797d0518828c1816bdcf2a444d4542ed55 $
  6.  *
  7.  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  8.  *          Steve Lhomme <steve.lhomme@free.fr>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  23.  *****************************************************************************/
  24. #include "stream_io_callback.hpp"
  25. #include "matroska_segment.hpp"
  26. #include "demux.hpp"
  27. /*****************************************************************************
  28.  * Stream managment
  29.  *****************************************************************************/
  30. vlc_stream_io_callback::vlc_stream_io_callback( stream_t *s_, bool b_owner_ )
  31. {
  32.     s = s_;
  33.     b_owner = b_owner_;
  34.     mb_eof = false;
  35. }
  36. uint32 vlc_stream_io_callback::read( void *p_buffer, size_t i_size )
  37. {
  38.     if( i_size <= 0 || mb_eof )
  39.     {
  40.         return 0;
  41.     }
  42.     return stream_Read( s, p_buffer, i_size );
  43. }
  44. void vlc_stream_io_callback::setFilePointer(int64_t i_offset, seek_mode mode )
  45. {
  46.     int64_t i_pos;
  47.     switch( mode )
  48.     {
  49.         case seek_beginning:
  50.             i_pos = i_offset;
  51.             break;
  52.         case seek_end:
  53.             i_pos = stream_Size( s ) - i_offset;
  54.             break;
  55.         default:
  56.             i_pos= stream_Tell( s ) + i_offset;
  57.             break;
  58.     }
  59.     if( i_pos < 0 || i_pos >= stream_Size( s ) )
  60.     {
  61.         mb_eof = true;
  62.         return;
  63.     }
  64.     mb_eof = false;
  65.     if( stream_Seek( s, i_pos ) )
  66.     {
  67.         mb_eof = true;
  68.     }
  69.     return;
  70. }
  71. size_t vlc_stream_io_callback::write( const void *p_buffer, size_t i_size )
  72. {
  73.     return 0;
  74. }
  75. uint64 vlc_stream_io_callback::getFilePointer( void )
  76. {
  77.     if ( s == NULL )
  78.         return 0;
  79.     return stream_Tell( s );
  80. }
  81. void vlc_stream_io_callback::close( void )
  82. {
  83.     return;
  84. }