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_dct/] [1.0/] [src/] [main_dct.c] - Blame information for rev 145

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 145 lanttu
 
2
#include <mcapi.h>
3
#include "headers.h"
4
 
5
#define MAIN_NODE_NUM 0
6
#define DCT_NODE_NUM 1
7
 
8
#define WAIT_TIMEOUT 0xFFFFFFFF
9
 
10
#define mcapi_assert_success(s) \
11
        if (s != MCAPI_SUCCESS) { printf("%s:%d status %d\n", __FILE__, __LINE__, s); abort(); }
12
 
13
 
14
extern void fdct_8x8(uint8 *input_data, sint16 *output_data, sint32 num_fdcts);
15
 
16
int main_dct(){
17
 
18
  //printf("DCT starts MCAPI initialization\r\n");
19
 
20
  mcapi_status_t status;
21
  mcapi_request_t request, recv_request, send_request;
22
  size_t size;
23
  mcapi_version_t version;
24
  mcapi_endpoint_t  block_count_in, dct_data_out, dct_data_in , ext_dct_data_in;
25
 
26
  mcapi_pktchan_send_hndl_t       send_handle;
27
  mcapi_pktchan_recv_hndl_t       recv_handle;
28
 
29
  unsigned int my_node_id = DCT_NODE_NUM;
30
 
31
  mcapi_initialize(my_node_id,&version,&status);
32
  mcapi_assert_success(status);
33
 
34
  /* create endpoints */
35
  block_count_in = mcapi_create_endpoint ( 0 ,&status);
36
  dct_data_in = mcapi_create_endpoint ( 1 ,&status);
37
  dct_data_out =mcapi_create_endpoint ( 2 ,&status);
38
 
39
  //printf("Endpoints created succesfully\r\n");
40
 
41
 
42
  /* get main endpoint from database */
43
  ext_dct_data_in = mcapi_get_endpoint (MAIN_NODE_NUM, 1 , &status);
44
 
45
  //printf("Remote endpoint obtained succesfully\r\n");
46
 
47
 
48
  /* open pktchan for sending macroblocks */
49
  mcapi_open_pktchan_recv_i(&recv_handle, dct_data_in, &recv_request, &status);
50
  //mcapi_assert_success(status);
51
 
52
  /* open pktchan for receiving macroblocks from DCT */
53
  mcapi_open_pktchan_send_i(&send_handle, dct_data_out, &send_request, &status);
54
  //mcapi_assert_success(status);
55
 
56
  mcapi_wait(&send_request, &size, &status, WAIT_TIMEOUT);
57
  mcapi_assert_success(status);
58
 
59
  //printf("First wait!\r\n");
60
 
61
  mcapi_wait(&recv_request, &size, &status, WAIT_TIMEOUT);
62
  mcapi_assert_success(status);
63
 
64
 
65
  //printf("Packet channels opened successfully\r\n");
66
 
67
  // MCAPI INITIALIZATION DONE!
68
 
69
  /* Receive block count configuration from main node */
70
  size = 1;
71
  uint8 block_count;
72
 
73
  //printf("Waiting for config message..");
74
  mcapi_msg_recv(block_count_in, &block_count, 1 , &size ,&status);
75
  //printf("received %X\r\n", block_count);
76
  uint8 i = 0;
77
  uint8 ii = 0;
78
  uint8 *mb_data;
79
  sint16 *dct_data;
80
  dct_data=(sint16*)malloc(2*6*8*8);
81
 
82
  while(1) {
83
 
84
    /* receive data from main */
85
    //printf("Receiving macroblock packet from the main.\r\n");
86
    mcapi_pktchan_recv(recv_handle,(void *)&mb_data,&size,&status);
87
    mcapi_assert_success(status);
88
    mcapi_pktchan_free((void *)mb_data, &status);
89
    //printf("Transforming macroblocks\n");
90
 
91
 
92
    for(ii = 0; ii < 10; ii++)
93
    fdct_8x8(mb_data, dct_data, block_count);
94
 
95
    /* send transformed six macro blocks to main via mcapi */
96
    size =2*6*8*8;
97
    //printf("Sending transformed macroblocks to main\r\n");
98
    mcapi_pktchan_send(send_handle,dct_data,size,&status);
99
    mcapi_assert_success(status);
100
    //printf("Counter %u\n", i);
101
      i++;
102
    }
103
  free(dct_data);
104
  return 1;
105
 
106
}

powered by: WebSVN 2.1.0

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