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] - Rev 145

Compare with Previous | Blame | View Log

 
#include <mcapi.h>
#include "headers.h"
 
#define MAIN_NODE_NUM 0
#define DCT_NODE_NUM 1
 
#define WAIT_TIMEOUT 0xFFFFFFFF
 
#define mcapi_assert_success(s) \
        if (s != MCAPI_SUCCESS) { printf("%s:%d status %d\n", __FILE__, __LINE__, s); abort(); }
 
 
extern void fdct_8x8(uint8 *input_data, sint16 *output_data, sint32 num_fdcts);
 
int main_dct(){
 
  //printf("DCT starts MCAPI initialization\r\n");
 
  mcapi_status_t status;
  mcapi_request_t request, recv_request, send_request;
  size_t size;
  mcapi_version_t version;
  mcapi_endpoint_t  block_count_in, dct_data_out, dct_data_in , ext_dct_data_in;  
 
  mcapi_pktchan_send_hndl_t       send_handle;
  mcapi_pktchan_recv_hndl_t       recv_handle;
 
  unsigned int my_node_id = DCT_NODE_NUM;
 
  mcapi_initialize(my_node_id,&version,&status);
  mcapi_assert_success(status);
 
  /* create endpoints */
  block_count_in = mcapi_create_endpoint ( 0 ,&status);
  dct_data_in = mcapi_create_endpoint ( 1 ,&status);
  dct_data_out =mcapi_create_endpoint ( 2 ,&status);
 
  //printf("Endpoints created succesfully\r\n");
 
 
  /* get main endpoint from database */ 
  ext_dct_data_in = mcapi_get_endpoint (MAIN_NODE_NUM, 1 , &status);
 
  //printf("Remote endpoint obtained succesfully\r\n");
 
 
  /* open pktchan for sending macroblocks */
  mcapi_open_pktchan_recv_i(&recv_handle, dct_data_in, &recv_request, &status);
  //mcapi_assert_success(status);
 
  /* open pktchan for receiving macroblocks from DCT */
  mcapi_open_pktchan_send_i(&send_handle, dct_data_out, &send_request, &status);
  //mcapi_assert_success(status);
 
  mcapi_wait(&send_request, &size, &status, WAIT_TIMEOUT);	
  mcapi_assert_success(status);
 
  //printf("First wait!\r\n");
 
  mcapi_wait(&recv_request, &size, &status, WAIT_TIMEOUT);	
  mcapi_assert_success(status);
 
 
  //printf("Packet channels opened successfully\r\n");
 
  // MCAPI INITIALIZATION DONE!
 
  /* Receive block count configuration from main node */
  size = 1;
  uint8 block_count;
 
  //printf("Waiting for config message..");
  mcapi_msg_recv(block_count_in, &block_count, 1 , &size ,&status);
  //printf("received %X\r\n", block_count);
  uint8 i = 0;
  uint8 ii = 0;
  uint8 *mb_data;
  sint16 *dct_data;
  dct_data=(sint16*)malloc(2*6*8*8);
 
  while(1) {
 
    /* receive data from main */
    //printf("Receiving macroblock packet from the main.\r\n");
    mcapi_pktchan_recv(recv_handle,(void *)&mb_data,&size,&status);
    mcapi_assert_success(status);
    mcapi_pktchan_free((void *)mb_data, &status);
    //printf("Transforming macroblocks\n");
 
 
    for(ii = 0; ii < 10; ii++)
    fdct_8x8(mb_data, dct_data, block_count);
 
    /* send transformed six macro blocks to main via mcapi */
    size =2*6*8*8;
    //printf("Sending transformed macroblocks to main\r\n");
    mcapi_pktchan_send(send_handle,dct_data,size,&status);     
    mcapi_assert_success(status);
    //printf("Counter %u\n", i);
      i++;
    }
  free(dct_data);
  return 1;
 
}
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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