}
-int FileFFMPEG::set_video_position(int64_t pos)
-{
- if( !ff || pos < 0 || pos >= asset->video_length )
- return 1;
- return 0;
-}
-
-
-int FileFFMPEG::set_audio_position(int64_t pos)
-{
- if( !ff || pos < 0 || pos >= asset->audio_length )
- return 1;
- return 0;
-}
-
-
int FileFFMPEG::write_samples(double **buffer, int64_t len)
{
if( !ff || len < 0 ) return -1;
if( !ff || len < 0 ) return -1;
int ch = file->current_channel;
int64_t pos = file->current_sample;
- ff->decode(ch, pos, buffer, len);
- return 0;
+ int ret = ff->decode(ch, pos, buffer, len);
+ if( ret > 0 ) return 0;
+ memset(buffer,0,len*sizeof(*buffer));
+ return -1;
}
int FileFFMPEG::read_frame(VFrame *frame)
if( !ff ) return -1;
int layer = file->current_layer;
int64_t pos = file->current_frame;
- ff->decode(layer, pos, frame);
- return 0;
+ int ret = ff->decode(layer, pos, frame);
+ frame->set_status(ret);
+ if( ret >= 0 ) return 0;
+ frame->clear_frame();
+ return -1;
}