Skip to content

Commit b2bb169

Browse files
committed
vcompress: fix multi-tile lavc
fixes the commit 6902446 (from 2022-08-18) that has broken: `uv -F split:2:1 -t testcard:fps=30p -c lavc` The problem is that the `tile_cnt` was set _prior_ to the vcompress state reconfigure, which will yield 2 states. But prior that, the count was 1. The task was started for tile_cnt (== 1) but waited upon for separate_tiles.size() (== 2)!
1 parent d6b1b3f commit b2bb169

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

src/video_compress.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -432,20 +432,20 @@ static shared_ptr<video_frame> compress_frame_tiles(struct compress_state *proxy
432432
shared_ptr<video_frame> frame)
433433
{
434434
struct compress_state_real *s = proxy->ptr;
435-
const int tile_cnt = (int) proxy->ptr->state.size();
436435
vector<shared_ptr<video_frame>> separate_tiles;
437436
if (frame) {
438437
if (!check_state_count(frame->tile_count, proxy)) {
439438
return nullptr;
440439
}
441440
separate_tiles = vf_separate_tiles(frame);
442441
} else {
443-
separate_tiles.resize(tile_cnt);
442+
separate_tiles.resize(proxy->ptr->state.size());
444443
}
445444

446445
// frame pointer may no longer be valid
447446
frame = NULL;
448447

448+
const int tile_cnt = (int) proxy->ptr->state.size();
449449
vector<task_result_handle_t> task_handle(tile_cnt);
450450

451451
vector <compress_worker_data> data_tile(tile_cnt);
@@ -461,7 +461,7 @@ static shared_ptr<video_frame> compress_frame_tiles(struct compress_state *proxy
461461
vector<shared_ptr<video_frame>> compressed_tiles(separate_tiles.size());
462462

463463
bool failed = false;
464-
for(unsigned int i = 0; i < separate_tiles.size(); ++i) {
464+
for (int i = 0; i < tile_cnt; ++i) {
465465
struct compress_worker_data *data = (struct compress_worker_data *)
466466
wait_task(task_handle[i]);
467467

0 commit comments

Comments
 (0)