00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <stdint.h>
00022 #include <stdio.h>
00023
00024 #include "libavutil/mem.h"
00025
00026 #include "get_bits.h"
00027 #include "golomb.h"
00028 #include "put_bits.h"
00029
00030 #define COUNT 8191
00031 #define SIZE (COUNT * 4)
00032
00033 int main(void)
00034 {
00035 int i, ret = 0;
00036 uint8_t *temp;
00037 PutBitContext pb;
00038 GetBitContext gb;
00039
00040 temp = av_malloc(SIZE);
00041 if (!temp)
00042 return 2;
00043
00044 init_put_bits(&pb, temp, SIZE);
00045 for (i = 0; i < COUNT; i++)
00046 set_ue_golomb(&pb, i);
00047 flush_put_bits(&pb);
00048
00049 init_get_bits(&gb, temp, 8 * SIZE);
00050 for (i = 0; i < COUNT; i++) {
00051 int j, s = show_bits(&gb, 25);
00052
00053 j = get_ue_golomb(&gb);
00054 if (j != i) {
00055 fprintf(stderr, "get_ue_golomb: expected %d, got %d. bits: %7x\n",
00056 i, j, s);
00057 ret = 1;
00058 }
00059 }
00060
00061 #define EXTEND(i) (i << 3 | i & 7)
00062 init_put_bits(&pb, temp, SIZE);
00063 for (i = 0; i < COUNT; i++)
00064 set_ue_golomb(&pb, EXTEND(i));
00065 flush_put_bits(&pb);
00066
00067 init_get_bits(&gb, temp, 8 * SIZE);
00068 for (i = 0; i < COUNT; i++) {
00069 int j, s = show_bits_long(&gb, 32);
00070
00071 j = get_ue_golomb_long(&gb);
00072 if (j != EXTEND(i)) {
00073 fprintf(stderr, "get_ue_golomb_long: expected %d, got %d. "
00074 "bits: %8x\n", EXTEND(i), j, s);
00075 ret = 1;
00076 }
00077 }
00078
00079 init_put_bits(&pb, temp, SIZE);
00080 for (i = 0; i < COUNT; i++)
00081 set_se_golomb(&pb, i - COUNT / 2);
00082 flush_put_bits(&pb);
00083
00084 init_get_bits(&gb, temp, 8 * SIZE);
00085 for (i = 0; i < COUNT; i++) {
00086 int j, s = show_bits(&gb, 25);
00087
00088 j = get_se_golomb(&gb);
00089 if (j != i - COUNT / 2) {
00090 fprintf(stderr, "get_se_golomb: expected %d, got %d. bits: %7x\n",
00091 i - COUNT / 2, j, s);
00092 ret = 1;
00093 }
00094 }
00095
00096 av_free(temp);
00097
00098 return ret;
00099 }