diff options
author | Marcin KoĆcielnicki <koriakin@0x04.net> | 2011-12-25 01:21:11 +0100 |
---|---|---|
committer | Marcin KoĆcielnicki <koriakin@0x04.net> | 2011-12-25 01:21:11 +0100 |
commit | ae57f39b0a4ceedfa10f3aeaa1f50684fe4cf7df (patch) | |
tree | 8ccdcca5081aaee1ad719024c25b9c9a0883c162 /vstream | |
parent | 657cc59e8d8e17fda8dc67ecb9669f5779a8c306 (diff) |
h264: Encoder fixes.
Diffstat (limited to 'vstream')
-rw-r--r-- | vstream/h264_cabac.c | 3 | ||||
-rw-r--r-- | vstream/h264_se.c | 8 |
2 files changed, 6 insertions, 5 deletions
diff --git a/vstream/h264_cabac.c b/vstream/h264_cabac.c index 91869ba7..9a8c1fb7 100644 --- a/vstream/h264_cabac.c +++ b/vstream/h264_cabac.c @@ -1348,7 +1348,8 @@ static int put_bit(struct bitstream *str, struct h264_cabac_context *cabac, uint if (vs_u(str, &bit, 1)) return 1; } - while (cabac->bitsOutstanding--) { + while (cabac->bitsOutstanding) { + cabac->bitsOutstanding--; if (vs_u(str, &nbit, 1)) return 1; } diff --git a/vstream/h264_se.c b/vstream/h264_se.c index 4c8332f7..920c868b 100644 --- a/vstream/h264_se.c +++ b/vstream/h264_se.c @@ -453,7 +453,7 @@ int h264_coded_block_pattern(struct bitstream *str, struct h264_cabac_context *c bit[2] = *val >> 2 & 1; bit[3] = *val >> 3 & 1; bit[4] = *val >> 4 > 0; - bit[5] = *val >> 5 > 1; + bit[5] = *val >> 4 > 1; } for (i = 0; i < 4; i++) { mbA = h264_mb_nb_b(cabac->slice, H264_MB_A, H264_BLOCK_8X8, 0, i, &idxA); @@ -461,7 +461,7 @@ int h264_coded_block_pattern(struct bitstream *str, struct h264_cabac_context *c int condTermFlagA = !(mbA == mbT ? bit[idxA] : mbA->coded_block_pattern >> idxA & 1); int condTermFlagB = !(mbB == mbT ? bit[idxB] : mbB->coded_block_pattern >> idxB & 1); ctxIdx = H264_CABAC_CTXIDX_CODED_BLOCK_PATTERN_LUMA + condTermFlagA + condTermFlagB * 2; - h264_cabac_decision(str, cabac, ctxIdx, &bit[i]); + if (h264_cabac_decision(str, cabac, ctxIdx, &bit[i])) return 1; } if (has_chroma) { mbA = h264_mb_nb(cabac->slice, H264_MB_A, 0); @@ -469,12 +469,12 @@ int h264_coded_block_pattern(struct bitstream *str, struct h264_cabac_context *c int condTermFlagA = (mbA->coded_block_pattern >> 4) > 0; int condTermFlagB = (mbB->coded_block_pattern >> 4) > 0; ctxIdx = H264_CABAC_CTXIDX_CODED_BLOCK_PATTERN_CHROMA + condTermFlagA + condTermFlagB * 2; - h264_cabac_decision(str, cabac, ctxIdx, &bit[4]); + if (h264_cabac_decision(str, cabac, ctxIdx, &bit[4])) return 1; if (bit[4]) { int condTermFlagA = (mbA->coded_block_pattern >> 4) > 1; int condTermFlagB = (mbB->coded_block_pattern >> 4) > 1; ctxIdx = H264_CABAC_CTXIDX_CODED_BLOCK_PATTERN_CHROMA + condTermFlagA + condTermFlagB * 2 + 4; - h264_cabac_decision(str, cabac, ctxIdx, &bit[5]); + if (h264_cabac_decision(str, cabac, ctxIdx, &bit[5])) return 1; } } if (str->dir == VS_DECODE) { |