History

avcodec/ffv1enc: Eliminate copy_state

Michael Niedermayer committed 1 year ago

Commit 3faee891 parent 2f0500f1 file · +25 −52Browse files

Showing the changes to libavcodec (1 of 1 file). Show all

Unified · Split

libavcodec/ffv1enc.c+25−52
@@ -1271,44 +1271,26 @@ typedef struct RemapEncoderState { · 1270 unmodified lines
12711271 int run1start_mul_index;
12721272 } RemapEncoderState;
12731273
1274−static inline void copy_state(RemapEncoderState *dst, const RemapEncoderState *src)
1275−{
1276− dst->rc = src->rc;
1277− memcpy(dst->mul, src->mul, (src->mul_count + 1) * sizeof(src->mul[0]));
1278− memcpy(dst->state, src->state, sizeof(dst->state));
1279− dst->lu = src->lu;
1280− dst->run = src->run;
1281− dst->last_val = src->last_val;
1282− dst->compact_index = src->compact_index;
1283− dst->mul_count = src->mul_count;
1284− dst->i = src->i;
1285− dst->pixel_num = src->pixel_num;
1286− dst->p = src->p;
1287− dst->current_mul_index = src->current_mul_index;
1288− dst->run1final = src->run1final;
1289− dst->run1start_i = src->run1start_i;
1290− dst->run1start_last_val = src->run1start_last_val;
1291− dst->run1start_mul_index = src->run1start_mul_index;
1292−}
1293−
12941274 static int encode_float32_remap_segment(FFV1SliceContext *sc,
1295− RemapEncoderState *state_arg, int update, int final)
1275+ int p, int mul_count, int *mul_tab, int update, int final)
12961276 {
12971277 RemapEncoderState s;
12981278
1299− copy_state(&s, state_arg);
1300−
1301− if (s.i == 0) {
1302− memset(s.state, 128, sizeof(s.state));
1303− put_symbol(&s.rc, s.state[0][0], s.mul_count, 0);
1304− memset(s.state, 128, sizeof(s.state));
1305− s.last_val = -1;
1306− s.compact_index = -1;
1307− s.lu = 0;
1308− s.run = 0;
1309− s.current_mul_index = -1;
1310− s.run1final = 0;
1311− }
1279+ s.pixel_num = sc->slice_width * sc->slice_height;
1280+ s.p = p;
1281+ s.i = 0;
1282+ s.rc = sc->c;
1283+ s.mul_count = mul_count;
1284+ memcpy(s.mul, mul_tab, sizeof(*mul_tab)*(mul_count+1));
1285+ memset(s.state, 128, sizeof(s.state));
1286+ put_symbol(&s.rc, s.state[0][0], s.mul_count, 0);
1287+ memset(s.state, 128, sizeof(s.state));
1288+ s.last_val = -1;
1289+ s.compact_index = -1;
1290+ s.lu = 0;
1291+ s.run = 0;
1292+ s.current_mul_index = -1;
1293+ s.run1final = 0;
13121294
13131295 for (; s.i < s.pixel_num+1; s.i++) {
13141296 int current_mul = s.current_mul_index < 0 ? 1 : FFABS(s.mul[s.current_mul_index]);
@@ -1395,7 +1377,7 @@ static int encode_float32_remap_segment(FFV1SliceContext *sc, · 80 unmodified lines
13951377 }
13961378
13971379 if (update) {
1398− copy_state(state_arg, &s);
1380+ sc->c = s.rc;
13991381 }
14001382 return get_rac_count(&s.rc);
14011383 }
@@ -1403,25 +1385,22 @@ static int encode_float32_remap_segment(FFV1SliceContext *sc, · 1 unmodified line
14031385 static void encode_float32_remap(FFV1Context *f, FFV1SliceContext *sc,
14041386 const uint8_t *src[4])
14051387 {
1406− RemapEncoderState s;
1407− s.pixel_num = sc->slice_width * sc->slice_height;
1388+ int pixel_num = sc->slice_width * sc->slice_height;
1389+ int mul_count;
14081390
1409− av_assert0 (s.pixel_num <= 65536);
1391+ av_assert0 (pixel_num <= 65536);
14101392
14111393 for (int p= 0; p < 1 + 2*f->chroma_planes + f->transparency; p++) {
14121394 float score_sum[2] = {0};
14131395 int mul_all[2][513];
1414− s.rc = sc->c;
1415− s.i = 0;
1416− s.p = p;
14171396
1418− for (int mul_count= 1; mul_count<=512; mul_count+=511) {
1397+ for (mul_count= 1; mul_count<=512; mul_count+=511) {
14191398 float score_tab_all[513][23] = {0};
14201399 int64_t last_val = -1;
14211400 int *mul_tab = mul_all[mul_count>>9];
14221401 int last_mul_index = -1;
14231402 score_sum[mul_count>>9] += log2(mul_count);
1424− for (int i= 0; i<s.pixel_num; i++) {
1403+ for (int i= 0; i<pixel_num; i++) {
14251404 int64_t val = sc->unit[p][i].val;
14261405 int mul_index = (val + 1LL)*mul_count >> 32;
14271406 if (val != last_val) {
@@ -1461,17 +1440,11 @@ static void encode_float32_remap(FFV1Context *f, FFV1SliceContext *sc, · 33 unmodified lines
14611440 }
14621441 mul_tab[mul_count] = 1;
14631442
1464− s.mul_count = mul_count;
1465− memcpy(s.mul, mul_all[s.mul_count>>9], sizeof(*s.mul)*(s.mul_count+1));
1466− score_sum[mul_count>>9] = encode_float32_remap_segment(sc, &s, 0, 0);
1443+ score_sum[mul_count>>9] = encode_float32_remap_segment(sc, p, mul_count, mul_all[mul_count>>9], 0, 0);
14671444 }
14681445
1469− s.mul_count = score_sum[0] <= score_sum[1] ? 1 : 512;
1470− memcpy(s.mul, mul_all[s.mul_count>>9], sizeof(*s.mul)*(s.mul_count+1));
1471−
1472− encode_float32_remap_segment(sc, &s, 1, 1);
1473−
1474− sc->c = s.rc;
1446+ mul_count = score_sum[0] <= score_sum[1] ? 1 : 512;
1447+ encode_float32_remap_segment(sc, p, mul_count, mul_all[mul_count>>9], 1, 1);
14751448 }
14761449 }
14771450

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t