17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* 27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License. 67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at 77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and 147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License. 157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Types.h" 187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h" 197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VD_Tools.h" 217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file M4VD_Tools.c 257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief 267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This file implements helper functions for Bitstream parser 277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_UInt32 M4VD_Tools_GetBitsFromMemory(M4VS_Bitstream_ctxt* parsingCtxt, 317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 nb_bits) 327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 code; 347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i; 357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = 0; 367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i < nb_bits; i++) 377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (parsingCtxt->stream_index == 8) 397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //M4OSA_memcpy( (M4OSA_MemAddr8)&(parsingCtxt->stream_byte), parsingCtxt->in, 417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi // sizeof(unsigned char)); 427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi parsingCtxt->stream_byte = (unsigned char)(parsingCtxt->in)[0]; 437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi parsingCtxt->in++; 447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //fread(&stream_byte, sizeof(unsigned char),1,in); 457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi parsingCtxt->stream_index = 0; 467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = (code << 1); 487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code |= ((parsingCtxt->stream_byte & 0x80) >> 7); 497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi parsingCtxt->stream_byte = (parsingCtxt->stream_byte << 1); 517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi parsingCtxt->stream_index++; 527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return code; 557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VD_Tools_WriteBitsToMemory(M4OSA_UInt32 bitsToWrite, 587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_MemAddr32 dest_bits, 597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 offset, M4OSA_UInt8 nb_bits) 607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 i,j; 627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 temp_dest = 0, mask = 0, temp = 1; 637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 input = bitsToWrite; 647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi input = (input << (32 - nb_bits - offset)); 657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Put destination buffer to 0 */ 677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(j=0;j<3;j++) 687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i=0;i<8;i++) 707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((j*8)+i >= offset && (j*8)+i < nb_bits + offset) 727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mask |= (temp << ((7*(j+1))-i+j)); 747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi mask = ~mask; 787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *dest_bits &= mask; 797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Parse input bits, and fill output buffer */ 817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(j=0;j<3;j++) 827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(i=0;i<8;i++) 847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((j*8)+i >= offset && (j*8)+i < nb_bits + offset) 867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi temp = ((input & (0x80000000 >> offset)) >> (31-offset)); 887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //*dest_bits |= (temp << (31 - i)); 897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *dest_bits |= (temp << ((7*(j+1))-i+j)); 907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi input = (input << 1); 917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 100