int cache_stream_fill_buffer(stream_t *s){ int len; int sector_size; if(!s->cache_pid) return stream_fill_buffer(s); if(s->pos!=((cache_vars_t*)s->cache_data)->read_filepos) mp_msg(MSGT_CACHE,MSGL_ERR,"!!! read_filepos differs!!! report this bug...\n"); sector_size = ((cache_vars_t*)s->cache_data)->sector_size; if (sector_size > STREAM_MAX_SECTOR_SIZE) { mp_msg(MSGT_CACHE, MSGL_ERR, "Sector size %i larger than maximum %i\n", sector_size, STREAM_MAX_SECTOR_SIZE); sector_size = STREAM_MAX_SECTOR_SIZE; } len=cache_read(s->cache_data,s->buffer, sector_size); //printf("cache_stream_fill_buffer->read -> %d\n",len); if(len<=0){ s->eof=1; s->buf_pos=s->buf_len=0; return 0; } s->eof=0; s->buf_pos=0; s->buf_len=len; s->pos+=len; // printf("[%d]",len);fflush(stdout); if (s->capture_file) stream_capture_do(s); return len; }
int stream_fill_buffer(stream_t *s){ int len; // we will retry even if we already reached EOF previously. switch(s->type){ case STREAMTYPE_STREAM: #ifdef CONFIG_NETWORKING if( s->streaming_ctrl!=NULL && s->streaming_ctrl->streaming_read ) { len=s->streaming_ctrl->streaming_read(s->fd,s->buffer,STREAM_BUFFER_SIZE, s->streaming_ctrl); } else #endif if (s->fill_buffer) len = s->fill_buffer(s, s->buffer, STREAM_BUFFER_SIZE); else len=read(s->fd,s->buffer,STREAM_BUFFER_SIZE); break; case STREAMTYPE_DS: len = demux_read_data((demux_stream_t*)s->priv,s->buffer,STREAM_BUFFER_SIZE); break; default: len= s->fill_buffer ? s->fill_buffer(s,s->buffer,STREAM_BUFFER_SIZE) : 0; } if(len<=0){ s->eof=1; return 0; } // When reading succeeded we are obviously not at eof. // This e.g. avoids issues with eof getting stuck when lavf seeks in MPEG-TS s->eof=0; s->buf_pos=0; s->buf_len=len; s->pos+=len; // printf("[%d]",len);fflush(stdout); if (s->capture_file) stream_capture_do(s); return len; }
int stream_fill_buffer(stream_t *s){ int len = stream_read_internal(s, s->buffer, STREAM_BUFFER_SIZE); if (len <= 0) return 0; s->buf_pos=0; s->buf_len=len; // printf("[%d]",len);fflush(stdout); if (s->capture_file) stream_capture_do(s); return len; }
int stream_fill_buffer(stream_t *s){ int len = stream_read_internal(s, s->buffer, STREAM_BUFFER_SIZE); if (len <= 0) return 0; s->buf_pos=0; s->buf_len=len; while (s->buf_len < STREAM_BUFFER_MIN) { assert(s->buf_len + STREAM_BUFFER_MIN < STREAM_BUFFER_SIZE); len = stream_read_internal(s, s->buffer + s->buf_len, STREAM_BUFFER_MIN); if (len <= 0) break; s->buf_len += len; } // since the first read succeeded we are // definitely not at EOF yet s->eof = 0; // printf("[%d]",len);fflush(stdout); if (s->capture_file) stream_capture_do(s); return s->buf_len; }