1/* 2 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at> 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21#include <stdint.h> 22#include <stdio.h> 23 24#include "libavutil/internal.h" 25#include "libavutil/mem.h" 26 27#include "libavcodec/get_bits.h" 28#include "libavcodec/golomb.h" 29#include "libavcodec/put_bits.h" 30#include "libavcodec/put_golomb.h" 31 32#define COUNT 8191 33#define SIZE (COUNT * 4) 34 35int main(void) 36{ 37 int i, ret = 0; 38 uint8_t *temp; 39 PutBitContext pb; 40 GetBitContext gb; 41 42 temp = av_malloc(SIZE); 43 if (!temp) 44 return 2; 45 46 init_put_bits(&pb, temp, SIZE); 47 for (i = 0; i < COUNT; i++) 48 set_ue_golomb(&pb, i); 49 flush_put_bits(&pb); 50 51 init_get_bits(&gb, temp, 8 * SIZE); 52 for (i = 0; i < COUNT; i++) { 53 int j, s = show_bits(&gb, 25); 54 55 j = get_ue_golomb(&gb); 56 if (j != i) { 57 fprintf(stderr, "get_ue_golomb: expected %d, got %d. bits: %7x\n", 58 i, j, s); 59 ret = 1; 60 } 61 } 62 63#define EXTEND(i) ((i) << 3 | (i) & 7) 64 init_put_bits(&pb, temp, SIZE); 65 for (i = 0; i < COUNT; i++) 66 set_ue_golomb(&pb, EXTEND(i)); 67 flush_put_bits(&pb); 68 69 init_get_bits(&gb, temp, 8 * SIZE); 70 for (i = 0; i < COUNT; i++) { 71 int j, s = show_bits_long(&gb, 32); 72 73 j = get_ue_golomb_long(&gb); 74 if (j != EXTEND(i)) { 75 fprintf(stderr, "get_ue_golomb_long: expected %d, got %d. " 76 "bits: %8x\n", EXTEND(i), j, s); 77 ret = 1; 78 } 79 } 80 81#define EXTEND_L(i) ((i) << 4 | (i) & 15) 82 init_put_bits(&pb, temp, SIZE); 83 for (i = 0; i < COUNT; i++) 84 set_ue_golomb_long(&pb, EXTEND_L(i)); 85 flush_put_bits(&pb); 86 87 init_get_bits(&gb, temp, 8 * SIZE); 88 for (i = 0; i < COUNT; i++) { 89 int j, s = show_bits_long(&gb, 32); 90 91 j = get_ue_golomb_long(&gb); 92 if (j != EXTEND_L(i)) { 93 fprintf(stderr, "get_ue_golomb_long: expected %d, got %d. " 94 "bits: %8x\n", EXTEND_L(i), j, s); 95 ret = 1; 96 } 97 } 98 99 init_put_bits(&pb, temp, SIZE); 100 for (i = 0; i < COUNT; i++) 101 set_se_golomb(&pb, i - COUNT / 2); 102 flush_put_bits(&pb); 103 104 init_get_bits(&gb, temp, 8 * SIZE); 105 for (i = 0; i < COUNT; i++) { 106 int j, s = show_bits(&gb, 25); 107 108 j = get_se_golomb(&gb); 109 if (j != i - COUNT / 2) { 110 fprintf(stderr, "get_se_golomb: expected %d, got %d. bits: %7x\n", 111 i - COUNT / 2, j, s); 112 ret = 1; 113 } 114 } 115 116 av_free(temp); 117 118 return ret; 119} 120