Showing the changes to libavfilter (1 of 2 files). Show all
Unified · Split
| @@ -101,6 +101,7 @@ typedef struct DdagrabContext { · 100 unmodified lines | ||
| 101 | 101 | int out_fmt; |
| 102 | 102 | int allow_fallback; |
| 103 | 103 | int force_fmt; |
| 104 | + int dup_frames; | |
| 104 | 105 | } DdagrabContext; |
| 105 | 106 | |
| 106 | 107 | #define OFFSET(x) offsetof(DdagrabContext, x) |
| @@ -124,6 +125,8 @@ static const AVOption ddagrab_options[] = { · 17 unmodified lines | ||
| 124 | 125 | OFFSET(allow_fallback), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS }, |
| 125 | 126 | { "force_fmt", "exclude BGRA from format list (experimental, discouraged by Microsoft)", |
| 126 | 127 | OFFSET(force_fmt), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS }, |
| 128 | + { "dup_frames", "duplicate frames to maintain framerate", | |
| 129 | + OFFSET(dup_frames), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, FLAGS }, | |
| 127 | 130 | { NULL } |
| 128 | 131 | }; |
| 129 | 132 | |
| @@ -1067,7 +1070,9 @@ static int ddagrab_request_frame(AVFilterLink *outlink) · 937 unmodified lines | ||
| 1067 | 1070 | now -= dda->first_pts; |
| 1068 | 1071 | |
| 1069 | 1072 | if (!dda->probed_texture) { |
| 1070 | − ret = next_frame_internal(avctx, &cur_texture, 0); | |
| 1073 | + do { | |
| 1074 | + ret = next_frame_internal(avctx, &cur_texture, 0); | |
| 1075 | + } while (ret == AVERROR(EAGAIN) && !dda->dup_frames); | |
| 1071 | 1076 | } else { |
| 1072 | 1077 | cur_texture = dda->probed_texture; |
| 1073 | 1078 | dda->probed_texture = NULL; |