nudge = AV_NOPTS_VALUE;
seek_pos = curr_pos = 0;
seeked = 1; eof = 0;
- index_markers = 0;
reading = writing = 0;
flushed = 0;
need_packet = 1;
// default ffmpeg native seek
int npkts = 1;
int64_t pos = no, plmt = -1;
+ IndexMarks *index_markers = get_markers();
if( index_markers && index_markers->size() > 1 ) {
IndexMarks &marks = *index_markers;
int i = marks.find(pos);
void FFAudioStream::load_markers()
{
IndexState *index_state = ffmpeg->file_base->asset->index_state;
- if( index_state->marker_status == MARKERS_NOTTESTED ) return;
if( !index_state || idx >= index_state->audio_markers.size() ) return;
+ if( index_state->marker_status == MARKERS_NOTTESTED ) return;
FFStream::load_markers(*index_state->audio_markers[idx], sample_rate);
}
+IndexMarks *FFAudioStream::get_markers()
+{
+ IndexState *index_state = ffmpeg->file_base->asset->index_state;
+ if( !index_state || idx >= index_state->audio_markers.size() ) return 0;
+ return index_state->audio_markers[idx];
+}
+
FFVideoStream::FFVideoStream(FFMPEG *ffmpeg, AVStream *strm, int idx, int fidx)
: FFStream(ffmpeg, strm, fidx)
{
void FFVideoStream::load_markers()
{
IndexState *index_state = ffmpeg->file_base->asset->index_state;
- if( idx >= index_state->video_markers.size() ) return;
+ if( !index_state || idx >= index_state->video_markers.size() ) return;
FFStream::load_markers(*index_state->video_markers[idx], frame_rate);
}
+IndexMarks *FFVideoStream::get_markers()
+{
+ IndexState *index_state = ffmpeg->file_base->asset->index_state;
+ if( !index_state || idx >= index_state->video_markers.size() ) return 0;
+ return !index_state ? 0 : index_state->video_markers[idx];
+}
+
FFMPEG::FFMPEG(FileBase *file_base)
{
void FFStream::load_markers(IndexMarks &marks, double rate)
{
- index_markers = &marks;
int in = 0;
int64_t sz = marks.size();
int max_entries = fmt_ctx->max_index_size / sizeof(AVIndexEntry) - 1;