MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / dvbsub_read_2bit_string

Function dvbsub_read_2bit_string

libavcodec/dvbsubdec.c:432–535  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

430}
431
432static int dvbsub_read_2bit_string(uint8_t *destbuf, int dbuf_len,
433 const uint8_t **srcbuf, int buf_size,
434 int non_mod, uint8_t *map_table)
435{
436 GetBitContext gb;
437
438 int bits;
439 int run_length;
440 int pixels_read = 0;
441
442 init_get_bits(&gb, *srcbuf, buf_size << 3);
443
444 while (get_bits_count(&gb) < buf_size << 3 && pixels_read < dbuf_len) {
445 bits = get_bits(&gb, 2);
446
447 if (bits) {
448 if (non_mod != 1 || bits != 1) {
449 if (map_table)
450 *destbuf++ = map_table[bits];
451 else
452 *destbuf++ = bits;
453 }
454 pixels_read++;
455 } else {
456 bits = get_bits1(&gb);
457 if (bits == 1) {
458 run_length = get_bits(&gb, 3) + 3;
459 bits = get_bits(&gb, 2);
460
461 if (non_mod == 1 && bits == 1)
462 pixels_read += run_length;
463 else {
464 if (map_table)
465 bits = map_table[bits];
466 while (run_length-- > 0 && pixels_read < dbuf_len) {
467 *destbuf++ = bits;
468 pixels_read++;
469 }
470 }
471 } else {
472 bits = get_bits1(&gb);
473 if (bits == 0) {
474 bits = get_bits(&gb, 2);
475 if (bits == 2) {
476 run_length = get_bits(&gb, 4) + 12;
477 bits = get_bits(&gb, 2);
478
479 if (non_mod == 1 && bits == 1)
480 pixels_read += run_length;
481 else {
482 if (map_table)
483 bits = map_table[bits];
484 while (run_length-- > 0 && pixels_read < dbuf_len) {
485 *destbuf++ = bits;
486 pixels_read++;
487 }
488 }
489 } else if (bits == 3) {

Callers 1

Calls 5

init_get_bitsFunction · 0.85
get_bits_countFunction · 0.85
get_bitsFunction · 0.85
get_bits1Function · 0.85
av_logFunction · 0.85

Tested by

no test coverage detected