>> + /* >> + * If this is a live stream and this playlist looks like it is one >> segment >> + * behind, try to sync it up so that every substream starts at the same >> + * time position (so e.g. avformat_find_stream_info() will see packets >> from >> + * all active streams within the first few seconds). This is not very >> generic, >> + * though, as the sequence numbers are technically independent. >> + */ >> + highest_cur_seq_no = 0; >> + for (i = 0; i < c->n_playlists; i++) { >> + struct playlist *pls = c->playlists[i]; >> + if (!pls->parsed) >> + continue; >> + if (pls->cur_seq_no > highest_cur_seq_no) >> + highest_cur_seq_no = pls->cur_seq_no; >> + } >> + if (!pls->finished && pls->cur_seq_no == highest_cur_seq_no - 1 && >> + highest_cur_seq_no < pls->start_seq_no + pls->n_segments) { >> + pls->cur_seq_no = highest_cur_seq_no; >> + } >> + >> + pls->read_buffer = av_malloc(INITIAL_BUFFER_SIZE); >> + if (!pls->read_buffer){ >> + ret = AVERROR(ENOMEM); >> + avformat_free_context(pls->ctx); >> + pls->ctx = NULL; >> + return ret; >> + } >> + ffio_init_context(&pls->pb, pls->read_buffer, INITIAL_BUFFER_SIZE, 0, >> pls, >> + read_data, NULL, NULL); >> + pls->pb.seekable = 0; >> + ret = av_probe_input_buffer(&pls->pb, &in_fmt, pls->segments[0]->url, >> + NULL, 0, 0); >> + if (ret < 0) { >> + /* Free the ctx - it isn't initialized properly at this point, >> + * so avformat_close_input shouldn't be called. If >> + * avformat_open_input fails below, it frees and zeros the >> + * context, so it doesn't need any special treatment like this. */ >> + av_log(c->ctx, AV_LOG_ERROR, "Error when loading first segment >> '%s'\n", pls->segments[0]->url); >> + avformat_free_context(pls->ctx); >> + pls->ctx = NULL; >> + return ret; > Is that pls->read_buffer will memleak? > >
yes, looks like this. this is already an issue in current code. nevertheless, I will fix it here. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel