summaryrefslogtreecommitdiff
path: root/vstream
diff options
context:
space:
mode:
authorMarcin Koƛcielnicki <koriakin@0x04.net>2011-12-25 01:21:11 +0100
committerMarcin Koƛcielnicki <koriakin@0x04.net>2011-12-25 01:21:11 +0100
commitae57f39b0a4ceedfa10f3aeaa1f50684fe4cf7df (patch)
tree8ccdcca5081aaee1ad719024c25b9c9a0883c162 /vstream
parent657cc59e8d8e17fda8dc67ecb9669f5779a8c306 (diff)
h264: Encoder fixes.
Diffstat (limited to 'vstream')
-rw-r--r--vstream/h264_cabac.c3
-rw-r--r--vstream/h264_se.c8
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) {