コード例 #1
0
ファイル: decode.c プロジェクト: andrecunha/AAI-Codec
void dec_run_length(FILE *in_fp)
{
    printf("Applying run-length decoding...\n");

    for(curr_channel=0; curr_channel<input_file_header->numChannels; curr_channel++) {
        bdestroy(&data_buffer[curr_channel]);

        binit(&data_buffer[curr_channel], output_buffer[curr_channel].n_bytes*8-(8-output_buffer[curr_channel].bits_last));

        bit_buffer_cpy(&data_buffer[curr_channel], &output_buffer[curr_channel], output_buffer[curr_channel].n_bytes*8-(8-output_buffer[curr_channel].bits_last));

        bdestroy(&output_buffer[curr_channel]);
        
        binit(&output_buffer[curr_channel], input_file_header->subchunk2size);
        if(sec_enc==RUN_LENGTH){ 
            
            rl_decode(max_bits[curr_channel]+1, nbits_code[curr_channel], nbits_run[curr_channel], &data_buffer[curr_channel], &output_buffer[curr_channel]);

        }else{
            rl_decode(input_file_header->bitsPerSample, nbits_code[curr_channel], nbits_run[curr_channel], &data_buffer[curr_channel], &output_buffer[curr_channel]);
        }
            /*bprint(&output_buffer[curr_channel]);*/
    }
}
コード例 #2
0
ファイル: rldec.c プロジェクト: Dama624/Caltech-CS024
int main(int argc, char **argv) {
    FILE *input, *output;
    int input_size, output_size;
    char *input_buffer, *output_buffer;

    /* If we didn't get enough arguments, complain. */
    if (argc != 3) {
        usage(argv[0]);
        return 1;
    }

    input = fopen(argv[1], "rb");
    if (input == NULL) {
        printf("Couldn't open input file \"%s\"!\n", argv[1]);
        return 2;
    }

    output = fopen(argv[2], "wb");
    if (output == NULL) {
        printf("Couldn't open output file \"%s\"!\n", argv[2]);
        return 3;
    }

    printf("Decoding file \"%s\" into file \"%s\".\n", argv[1], argv[2]);

    /* Load the input file into a buffer in memory. */
    fseek(input, 0, SEEK_END);
    input_size = ftell(input);
    fseek(input, 0, SEEK_SET);
    input_buffer = malloc(input_size + 1);

    fread(input_buffer, sizeof(unsigned char), input_size, input);

    /* Decode the input file, and write the resutls to the output file. */
    output_buffer = rl_decode(input_buffer, input_size, &output_size);

    fwrite(output_buffer, sizeof(unsigned char), output_size, output);

    printf("All done!\n");

    fclose(output);
    fclose(input);

    free(input_buffer);
    free(output_buffer);

    return 0;
}