Skip to content
Snippets Groups Projects
pixel.cpp 2.82 KiB
Newer Older
#include <iostream>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
Vipin Thomas's avatar
Vipin Thomas committed
#include<math.h>

using namespace std;

Vipin Thomas's avatar
Vipin Thomas committed
typedef ap_axis<32,0,0,0> pkt_t;
Vipin Thomas's avatar
Vipin Thomas committed
static int count_streams = 0;
static long long charIn=0;
Vipin Thomas's avatar
Vipin Thomas committed
static int addNum=0;
Vipin Thomas's avatar
Vipin Thomas committed
//static int decrpyt=0;
//static long long asciiNum=0;
//static int asciiVal=0;
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
long long convert(int n);
Vipin Thomas's avatar
Vipin Thomas committed
long long toAscii(chr number);
int convertBinInt(long long n);
Vipin Thomas's avatar
Vipin Thomas committed
void stegnoDcrypt(int data);
int stegno(int c,int data,int position1,int position2);

void pixel(
Vipin Thomas's avatar
Vipin Thomas committed
		ap_int<32> position1,
		ap_int<32> position2,
Vipin Thomas's avatar
Vipin Thomas committed
		ap_int<32> stream_count,
Vipin Thomas's avatar
Vipin Thomas committed
		ap_int<32> character,
Vipin Thomas's avatar
Vipin Thomas committed
		ap_int<32> selector,
		hls::stream< pkt_t > &din,
Vipin Thomas's avatar
Vipin Thomas committed
		hls::stream< pkt_t > &dout
) {
	#pragma HLS INTERFACE ap_ctrl_none port=return
Vipin Thomas's avatar
Vipin Thomas committed
	#pragma HLS INTERFACE s_axilite port=position1
	#pragma HLS INTERFACE s_axilite port=position2
Vipin Thomas's avatar
Vipin Thomas committed
	#pragma HLS INTERFACE s_axilite port=stream_count
Vipin Thomas's avatar
Vipin Thomas committed
	#pragma HLS INTERFACE s_axilite port=character
Vipin Thomas's avatar
Vipin Thomas committed
	#pragma HLS INTERFACE s_axilite port=selector
	#pragma HLS INTERFACE axis port=din
	#pragma HLS INTERFACE axis port=dout

Vipin Thomas's avatar
Vipin Thomas committed
	pkt_t pkt=din.read();
Vipin Thomas's avatar
Vipin Thomas committed
    if (count_streams == 0){
        charIn=toAscii((char)character);
    }
    pkt.data=stegno(charIn,pkt.data,position1,position2);
Vipin Thomas's avatar
Vipin Thomas committed
	// switch(selector)
    // {
    //     case 0:
    //         pkt.data=stegno(character,pkt.data,position1,position2);
    //         break;
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
    //     case 1:
    //         stegnoDecrypt(pkt.data);
    //         break;
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
    //     default:
    //         break;
    // }
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
	count_streams++;
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
	if (count_streams == stream_count){
Vipin Thomas's avatar
Vipin Thomas committed
		count_streams = 0;
Vipin Thomas's avatar
Vipin Thomas committed
        charIn=0;
        addNum=0;
Vipin Thomas's avatar
Vipin Thomas committed
        // asciiVal= convertBinInt(asciiNum);
        // pkt.data=asciiVal;
        // dout.write(pkt);
Vipin Thomas's avatar
Vipin Thomas committed
	}

	// pending: have to make count=0 when TLAST signal is active -  for w not in the range of 0 to n(size of the array)
Vipin Thomas's avatar
Vipin Thomas committed
	//(count_streams==(position1+3*count_streams*w))&&((position1+3*count_streams*w) < position2) || (count_streams2==(position1
	//+3*count_streams*w)) && ((position2-3*count_streams*w) > position1)
Vipin Thomas's avatar
Vipin Thomas committed
    dout.write(pkt);
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
int stegno(int c,int data,int position1,int position2){

Vipin Thomas's avatar
Vipin Thomas committed
	
Vipin Thomas's avatar
Vipin Thomas committed
	if((count_streams >= 3 * (position1 - 1)) && (count_streams < 3 * (position2))){
Vipin Thomas's avatar
Vipin Thomas committed
		addNum=charIn%10;
		charIn=(int)charIn/10;
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
	}
Vipin Thomas's avatar
Vipin Thomas committed

	return convertBinInt((convert(data)/10)*10+addNum);

Vipin Thomas's avatar
Vipin Thomas committed
}

Vipin Thomas's avatar
Vipin Thomas committed
//void stegnoDcrypt(int data){
//
//    decrpyt=convert(data)%10;
//
//    asciiNum=asciiNum*10+decrpyt;
//
//}
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
long long convert(int n) {
    long long bin = 0;
    int rem, i = 1, step = 1;
    while (n != 0) {
        rem = n % 2;
        n /= 2;
        bin += rem * i;
        i *= 10;
    }
    return bin;
}

int convertBinInt(long long n) {
    int dec = 0, i = 0, rem;
    while (n != 0) {
        rem = n % 10;
        n /= 10;
        dec += rem * pow(2, i);
        ++i;
    }
    return dec;
}
Vipin Thomas's avatar
Vipin Thomas committed

Vipin Thomas's avatar
Vipin Thomas committed
long long toAscii(char c) {
    int n=(int)c;
    long long bin = convert(n);
Vipin Thomas's avatar
Vipin Thomas committed
    return bin;
Vipin Thomas's avatar
Vipin Thomas committed
}