projects
/
goodguy
/
cinelerra.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vicon checkout fix, checkout tweak, remove_all/delete_oldest rework, ffmpeg seek...
[goodguy/cinelerra.git]
/
cinelerra-5.1
/
cinelerra
/
ffmpeg.C
diff --git
a/cinelerra-5.1/cinelerra/ffmpeg.C
b/cinelerra-5.1/cinelerra/ffmpeg.C
index 493be6abeace4e55e9eac4177964649a63c6fc2e..23549f9a0c603a82175ffd1f1176f8d59193b19a 100644
(file)
--- a/
cinelerra-5.1/cinelerra/ffmpeg.C
+++ b/
cinelerra-5.1/cinelerra/ffmpeg.C
@@
-285,6
+285,7
@@
FFStream::FFStream(FFMPEG *ffmpeg, AVStream *st, int fidx)
FFStream::~FFStream()
{
FFStream::~FFStream()
{
+ frm_lock->lock("FFStream::~FFStream");
if( reading > 0 || writing > 0 ) avcodec_close(avctx);
if( avctx ) avcodec_free_context(&avctx);
if( fmt_ctx ) avformat_close_input(&fmt_ctx);
if( reading > 0 || writing > 0 ) avcodec_close(avctx);
if( avctx ) avcodec_free_context(&avctx);
if( fmt_ctx ) avformat_close_input(&fmt_ctx);
@@
-295,6
+296,7
@@
FFStream::~FFStream()
if( frame ) av_frame_free(&frame);
if( fframe ) av_frame_free(&fframe);
if( probe_frame ) av_frame_free(&probe_frame);
if( frame ) av_frame_free(&frame);
if( fframe ) av_frame_free(&fframe);
if( probe_frame ) av_frame_free(&probe_frame);
+ frm_lock->unlock();
delete frm_lock;
if( stats_fp ) fclose(stats_fp);
if( stats_in ) av_freep(&stats_in);
delete frm_lock;
if( stats_fp ) fclose(stats_fp);
if( stats_in ) av_freep(&stats_in);
@@
-491,7
+493,7
@@
int FFStream::decode(AVFrame *frame)
}
int ret = 0;
int retries = MAX_RETRY;
}
int ret = 0;
int retries = MAX_RETRY;
-
+ frm_lock->lock("FFStream::decode");
while( ret >= 0 && !flushed && --retries >= 0 ) {
if( need_packet ) {
if( (ret=read_packet()) < 0 ) break;
while( ret >= 0 && !flushed && --retries >= 0 ) {
if( need_packet ) {
if( (ret=read_packet()) < 0 ) break;
@@
-514,6
+516,7
@@
int FFStream::decode(AVFrame *frame)
flushed = st_eof();
}
}
flushed = st_eof();
}
}
+ frm_lock->unlock();
if( retries < 0 ) {
fprintf(stderr, "FFStream::decode: Retry limit\n");
if( retries < 0 ) {
fprintf(stderr, "FFStream::decode: Retry limit\n");
@@
-726,6
+729,7
@@
int FFStream::seek(int64_t no, double rate)
tstmp = av_rescale_q(tstmp, time_base, AV_TIME_BASE_Q);
idx = -1;
#endif
tstmp = av_rescale_q(tstmp, time_base, AV_TIME_BASE_Q);
idx = -1;
#endif
+ frm_lock->lock("FFStream::seek");
av_frame_free(&probe_frame);
avcodec_flush_buffers(avctx);
avformat_flush(fmt_ctx);
av_frame_free(&probe_frame);
avcodec_flush_buffers(avctx);
avformat_flush(fmt_ctx);
@@
-758,7
+762,9
@@
int FFStream::seek(int64_t no, double rate)
if( pkt_ts >= tstmp ) break;
}
if( retry < 0 ) {
if( pkt_ts >= tstmp ) break;
}
if( retry < 0 ) {
- fprintf(stderr,"FFStream::seek: retry limit, pos=%jd tstmp=%jd\n",pos,tstmp);
+ ff_err(AVERROR(EIO), "FFStream::seek: %s\n"
+ " retry limit, pos=%jd tstmp=%jd, ",
+ ffmpeg->fmt_ctx->url, pos, tstmp);
ret = -1;
}
if( ret < 0 ) break;
ret = -1;
}
if( ret < 0 ) break;
@@
-772,6
+778,7
@@
int FFStream::seek(int64_t no, double rate)
break;
}
}
break;
}
}
+ frm_lock->unlock();
if( ret < 0 ) {
printf("** seek fail %jd, %jd\n", pos, tstmp);
seeked = need_packet = 0;
if( ret < 0 ) {
printf("** seek fail %jd, %jd\n", pos, tstmp);
seeked = need_packet = 0;