OpenCores
URL https://opencores.org/ocsvn/funbase_ip_library/funbase_ip_library/trunk

Subversion Repositories funbase_ip_library

[/] [funbase_ip_library/] [trunk/] [TUT/] [ip.application/] [h.263_encoder_main/] [1.0/] [src/] [memory.c] - Blame information for rev 145

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 145 lanttu
/*---------------------------------------------------------------------------
2
*
3
*  Course:   System Design II
4
*
5
*  Module:   memory.c
6
*
7
*  Purpose:  Load/Storing MBs from/to raw-image
8
*
9
*  Notes:
10
*
11
*  Author:   Tero Kangas
12
*
13
*  History:  31/10/2002: + Original version ready
14
*
15
**---------------------------------------------------------------------------
16
*/
17
#include "headers.h"
18
 
19
 
20
/*---------------------------------------------------------------------------
21
*
22
*  Function: memoryLoadMB
23
*
24
*  Input:    mb_data = pointer to macroblock data
25
*            image = source location in memory
26
*            xMB, yMB = coordinates in source image
27
*
28
*  Return:   none
29
*
30
*  Purpose:  Load one MB from source image in memory
31
*
32
**---------------------------------------------------------------------------
33
*/
34
void memoryLoadMB(const sint32 yMB,
35
                  const sint32 xMB,
36
                  const uint8 * const image,
37
                  uint8 *mb_data){
38
 
39
  sint32 block, j;
40
  sint32 xMBstart, yMBstart;
41
  const uint8 *block_ptr = NULL;
42
  sint32 pixelsInRow = 0;
43
  uint8 *pData;
44
 
45
  uint32 fourpixels;
46
 
47
  pData = mb_data;
48
  xMBstart = xMB*16;
49
  yMBstart = yMB*16*176;
50
 
51
  for (block=0; block<6; block++){
52
    switch( block ){
53
    case 0: /* 1st luma  */
54
      block_ptr = image + yMBstart + xMBstart;
55
      pixelsInRow = 176;
56
      break;
57
    case 1: /* 2nd luma  */
58
      block_ptr = image + yMBstart + xMBstart+8;
59
      break;
60
    case 2: /* 3rd luma  */
61
      block_ptr = image + yMBstart+8*176 + xMBstart;
62
      break;
63
    case 3: /* 4th luma  */
64
      block_ptr = image + yMBstart+8*176 + xMBstart+8;
65
      break;
66
    case 4: /* chroma blue */
67
      block_ptr = image+176*144 + yMBstart/4 + xMBstart/2;
68
      pixelsInRow = 88;
69
      break;
70
    case 5: /* chroma red */
71
      block_ptr = image+176*144+88*72 + yMBstart/4 + xMBstart/2;
72
      break;
73
    }
74
 
75
 
76
    for (j=0; j<8; j++, block_ptr+=pixelsInRow ) {
77
      fourpixels = *((uint32*)block_ptr);
78
      *(pData++) = (uint8)(fourpixels >> 0);
79
      *(pData++) = (uint8)(fourpixels >> 8);
80
      *(pData++) = (uint8)(fourpixels >> 16);
81
      *(pData++) = (uint8)(fourpixels >> 24);
82
      fourpixels = *((uint32*)(block_ptr+4));
83
      *(pData++) = (uint8)(fourpixels >> 0);
84
      *(pData++) = (uint8)(fourpixels >> 8);
85
      *(pData++) = (uint8)(fourpixels >> 16);
86
      *(pData++) = (uint8)(fourpixels >> 24);
87
    }
88
 
89
/*
90
    for (j=0; j<8; j++, block_ptr+=(pixelsInRow-8)) {
91
      for (i=0; i<8; i++) {
92
        *(pData++) = *(block_ptr++);
93
      }
94
    }
95
*/
96
  }
97
}
98
 
99
/*---------------------------------------------------------------------------
100
*
101
*  Function: memoryStoreMB
102
*
103
*  Input:    MB = pointer to macroblock data
104
*            image = target location in memory
105
*            xMB, yMB = coordinates in target image
106
*
107
*  Return:   none
108
*
109
*  Purpose:  Stores one MB to target image in memory
110
*
111
**---------------------------------------------------------------------------
112
*/
113
void memoryStoreMB(const sint32 yMB,
114
                   const sint32 xMB,
115
                   uint8 * const image,
116
                   const MBType * const MB){
117
 
118
  sint32 block, i, j;
119
  sint32 xMBstart, yMBstart;
120
  uint8 *block_ptr = NULL;
121
  sint32 pixelsInRow = 0;
122
  sint16 *pData;
123
 
124
  pData = MB->data;
125
  xMBstart = xMB*16;
126
  yMBstart = yMB*16*176;
127
 
128
  for (block=0; block<6; block++){
129
    switch( block ){
130
    case 0: /* 1st luma  */
131
      block_ptr = image + yMBstart + xMBstart;
132
      pixelsInRow = 176;
133
      break;
134
    case 1: /* 2nd luma  */
135
      block_ptr = image + yMBstart + xMBstart+8;
136
      break;
137
    case 2: /* 3rd luma  */
138
      block_ptr = image + yMBstart+8*176 + xMBstart;
139
      break;
140
    case 3: /* 4th luma  */
141
      block_ptr = image + yMBstart+8*176 + xMBstart+8;
142
      break;
143
    case 4: /* chroma blue */
144
      block_ptr = image+176*144 + yMBstart/4 + xMBstart/2;
145
      pixelsInRow = 88;
146
      break;
147
    case 5: /* chroma red */
148
      block_ptr = image+176*144+88*72 + yMBstart/4 + xMBstart/2;
149
      break;
150
    }
151
 
152
 
153
    for (j=0; j<8; j++, block_ptr+=(pixelsInRow-8))
154
      for (i=0; i<8; i++)
155
        *(block_ptr++) = (uint8)*(pData++);
156
 
157
  }
158
 
159
}
160
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.