Exemple #1
0
void bgr2yuv(BYTE *pYUVFrame, RGBTRIPLE *pRGBFrame, int width, int height)
{
	int i,j;
	int r,g,b;
	__u8 y,u,v;
	int num = 0;
	int yuv_offset = 0;
	BYTE pRGB[3];
	BYTE pYUV[3];
	for(i=height-1; i>=0; i--)
	{
		for(j=0;j<width;j++)
		{
			pRGB[0]=pRGBFrame[i*width+j].B;
			pRGB[1]=pRGBFrame[i*width+j].G;
			pRGB[2]=pRGBFrame[i*width+j].R;
			RGB2YUV(pRGB,pYUV);
			y = pYUV[0];
			u = pYUV[1];
			v = pYUV[2];
			pYUVFrame[yuv_offset++] = y;
			if(num%2 == 0)
			{
				pYUVFrame[yuv_offset++] = u;
			}
			else
			{
				pYUVFrame[yuv_offset++] = v;
			}
			num++;
		}
	}	
}
Exemple #2
0
void
bayerGBRG_to_yuv422planar_nearest_neighbour(const unsigned char *bayer, unsigned char *yuv,
					    unsigned int width, unsigned int height)
{
  unsigned char *y = yuv;
  unsigned char *u = YUV422_PLANAR_U_PLANE(yuv, width, height);
  unsigned char *v = YUV422_PLANAR_V_PLANE(yuv, width, height);
  const unsigned char *b = bayer;

  int y1, u1, v1, y2, u2, v2;
  int t1, t2;

  for ( unsigned int h = 0; h < height; h += 2) {

    // g  b  ... line
    for (unsigned int w = 0; w < width; w += 2) {
      t1 = b[width];
      t2 = b[1];
      RGB2YUV(t1, *b, t2, y1, u1, v1);
      ++b;

      t1 = b[width - 1];
      t2 = b[-1];
      RGB2YUV(t1, t2, *b, y2, u2, v2);
      ++b;

      assign(y, u, v, y1, u1, v1, y2, u2, v2);
    }

    // r  g  ... line
    for (unsigned int w = 0; w < width; w += 2) {
      t1 = b[1];
      t2 = b[-width+1];
      RGB2YUV(*b, t1, t2, y1, u1, v1);
      ++b;

      t1 = b[-1];
      t2 = b[-width];
      RGB2YUV(t1, *b, t2, y2, u2, v2);
      ++b;

      assign(y, u, v, y1, u1, v1, y2, u2, v2);
    }
  }
}
void ColorGuiFrame::OnClick(wxMouseEvent &event)
{
  int r, g, b, y, u, v;

  int px = (event.m_x/scale_) + ((scale_pos_x_*scale_) - scale_pos_x_)/scale_;
  int py = (event.m_y/scale_) + ((scale_pos_y_*scale_) - scale_pos_y_)/scale_;

  r = rgb_image_[py * (width_ * 3) + px * 3 + 0];
  g = rgb_image_[py * (width_ * 3) + px * 3 + 1];
  b = rgb_image_[py * (width_ * 3) + px * 3 + 2];

  std::ostringstream stream1;
  stream1 << "(" <<  r  << ", " << g << ", " << b << ")";
  rgbText_->SetValue(wxString::FromAscii(stream1.str().c_str()));

  RGB2YUV(r, g, b, y, u, v);

  int y_low, y_high, u_low, u_high, v_low, v_high;

  vision_->getThreshold(0, y_low, y_high, u_low, u_high, v_low, v_high);

  if (y_low == 0 && y_high == 0)
  {
    y_low = y;
    y_high = y;
  }
  if (u_low == 0 && u_high == 0)
  {
    u_low = u;
    u_high = u;
  }
  if (v_low == 0 && v_high == 0)
  {
    v_low = v;
    v_high = v;
  }

  y_low = std::min(y, y_low);
  y_high = std::max(y, y_high);

  u_low = std::min(u, u_low);
  u_high = std::max(u, u_high);

  v_low = std::min(v, v_low);
  v_high = std::max(v, v_high);

  vision_->setThreshold(0, y_low, y_high, u_low, u_high, v_low, v_high);

  std::ostringstream stream;
  stream << "( " << y_low << ":" << y_high << ", " 
         << u_low << ":" << u_high << ", "
         << v_low << ":" << v_high << " ) ";

  yuvText_->SetValue(wxString::FromAscii(stream.str().c_str()));
}
static inline
void rgb2yuy2 (unsigned char *RGB, unsigned char *YUV, uint32_t NumPixels) {
  int i, j;
  register int y0, y1, u0, u1, v0, v1 ;
  register int r, g, b;

  for (i = 0, j = 0; i < 3 * NumPixels; i += 6, j += 4) {
    r = RGB[i + 0];
    g = RGB[i + 1];
    b = RGB[i + 2];
    RGB2YUV (r, g, b, y0, u0 , v0);
    r = RGB[i + 3];
    g = RGB[i + 4];
    b = RGB[i + 5];
    RGB2YUV (r, g, b, y1, u1 , v1);
    YUV[j + 0] = y0;
    YUV[j + 1] = (u0+u1)/2;
    YUV[j + 2] = y1;
    YUV[j + 3] = (v0+v1)/2;
  }
}
Exemple #5
0
int mlt_convert_rgb24a_to_yuv422(uint8_t *rgba, int width, int height, int stride, uint8_t *yuv, uint8_t *alpha) {
    int ret = 0;
    register int y0, y1, u0, u1, v0, v1;
    register int r, g, b;
    register uint8_t *d = yuv;
    register int i, j;

    if(alpha)
        for(i = 0; i < height; i++) {
            register uint8_t *s = rgba + (stride * i);
            for(j = 0; j < (width / 2); j++) {
                r = *s++;
                g = *s++;
                b = *s++;
                *alpha++ = *s++;
                RGB2YUV(r, g, b, y0, u0, v0);
                r = *s++;
                g = *s++;
                b = *s++;
                *alpha++ = *s++;
                RGB2YUV(r, g, b, y1, u1, v1);
                *d++ = y0;
                *d++ = (u0 + u1) >> 1;
                *d++ = y1;
                *d++ = (v0 + v1) >> 1;
            }
            if(width % 2) {
                r = *s++;
                g = *s++;
                b = *s++;
                *alpha++ = *s++;
                RGB2YUV(r, g, b, y0, u0, v0);
                *d++ = y0;
                *d++ = u0;
            }
        }
    else
        for(i = 0; i < height; i++) {
Exemple #6
0
void
bayerRGGB_to_yuv422planar_nearest_neighbour(const unsigned char *bayer,
					    unsigned char *yuv,
					    unsigned int width,
					    unsigned int height)
{
  unsigned char *y = yuv;
  unsigned char *u = YUV422_PLANAR_U_PLANE(yuv, width, height);
  unsigned char *v = YUV422_PLANAR_V_PLANE(yuv, width, height);
  const unsigned char *b = bayer;

  int y1, u1, v1, y2, u2, v2;

  for ( unsigned int h = 0; h < height; h += 2) {

    // r  g  ... line
    for (unsigned int w = 0; w < width; w += 2) {
      RGB2YUV(*b, b[1], b[width+1], y1, u1, v1);
      ++b;

      RGB2YUV(b[-1], *b, b[width], y2, u2, v2);
      ++b;

      assign(y, u, v, y1, u1, v1, y2, u2, v2);
    }

    // g  b  ... line
    for (unsigned int w = 0; w < width; w += 2) {
      RGB2YUV(*(b-width), *b, b[1], y1, u1, v1);
      ++b;

      RGB2YUV(*(b-width-1), b[-1], *b, y2, u2, v2);
      ++b;

      assign(y, u, v, y1, u1, v1, y2, u2, v2);
    }
  }
}
Exemple #7
0
/**
* @brief   convert rgb to yuv
*
* @author wangxi
* @date 2012-07-05
* @param[in] color888 	RGB888
* @return T_U32
* @retval yuv420
*/
T_U32 ColorConvert_RgbToYuv(T_U32 color888)
{
	T_U8 R = 0;
	T_U8 G = 0;
	T_U8 B = 0;
	T_U8 Y = 0;
	T_U8 U = 0;
	T_U8 V = 0;
    B = (T_U8)color888;         // B
    G = (T_U8)(color888 >> 8);  // G
    R = (T_U8)(color888 >> 16); // R

    RGB2YUV(Y, U, V, R, G, B);

    return ((V<<16) | (U<<8) | Y);
}
void rtspStream::SendData(unsigned char* data ,int size,int type,RTSPStreamHandle lpParam)//type:0-RGB;1-YUV
{
	rtspStream* pStream = (rtspStream*)lpParam;
	unsigned long ul =pStream->m_nWidth * pStream->m_nHeight *1.5;
	switch(type)
	{
	case 0:
		//RGB data needs to be translated into YUV data
		RGB2YUV(data,pStream->m_nWidth,pStream->m_nHeight,pStream->pLoadBuf,&ul);
		break;
	case 1:
		// YUV data
		memcpy(pStream->pLoadBuf,data,size);
		break;
	}
	SetEvent(pStream->m_hSendEvent);
	//pStream->GetOneFrame();
}
void AvgColSegmentator::AssignColor(int i, int j, CvScalar *color) 
{
	int segCount = cvmGet(m_SegmentCount, i,j);
	
	if (0 && segCount == 1)
	{
		for (int n=0; n<m_nScribbles; n++) 
		{
			if (cvmGet(m_Segmentations[n],i,j))
			{
					RGB2YUV(m_scribbles[n].GetColor(), color);
					return;
			}
		}
	}

	// Assigned to multiple segmentations
	// Average out colors of all assigned scribbles
	CvScalar scrYUV;
	double val[3];
	{
		
		double probCount = 0;
		
		val[0] = 0;
		val[1] = 0;
		val[2] = 0;	
		
		double maxProb = 0;
		double minProb = 1000;
		double sumProb = 0;
		for (int n=0; n<m_nScribbles; n++) 
		{
			double prob = (cvmGet(m_Probabilities[n],i,j));
			if (prob < minProb)
				minProb = prob;			
			if (prob > maxProb)
				maxProb = prob;
				
			sumProb += prob;
		}
			
		for (int n=0; n<m_nScribbles; n++) 
		{

			double prob = maxProb-(cvmGet(m_Probabilities[n],i,j))+minProb;
			//double prob = sumProb-(cvmGet(m_Probabilities[n],i,j));
			
			// Give more weight to selected scribbles
			if (cvmGet(m_Segmentations[n],i,j))
				prob *= 10;
			
			//printf("Prob[%d]=%lf\n", n,prob);
			RGB2YUV(m_scribbles[n].GetColor(), &scrYUV);
			
			val[0] += scrYUV.val[0] * prob;
			val[1] += scrYUV.val[1] * prob;
			val[2] += scrYUV.val[2] * prob;
				
			probCount += prob;
		}
			
		val[0] /= probCount;
		val[1] /= probCount;
		val[2] /= probCount;
		
		color->val[0] = val[0];
		color->val[1] = val[1];
		color->val[2] = val[2];
	
	}	
}
// 转换RGB
void CRGB2YUVView::OnConvertPAL() 
{
	CDC *pDC = GetDC();
	CRect rect;
	CBrush brush(RGB(128,128,128));
	GetClientRect(&rect);
	pDC->FillRect(&rect, &brush);

	// PAL 720x576 : 中国的电视标准为PAL制	
	int CurrentXRes = 720;
	int CurrentYRes = 576;
	int size        = CurrentXRes * CurrentYRes;
    
	// 分配内存
	byte *Video_Field0 = (byte*)malloc(CurrentXRes*CurrentYRes);  
	byte *Video_Field1 = (byte*)malloc(CurrentXRes*CurrentYRes);
	
	// 保存内存指针
	byte *Video_Field0_ = Video_Field0;
	byte *Video_Field1_ = Video_Field1;

	byte yuv_y0, yuv_u0, yuv_v0, yuv_v1;  // {y0, u0, v0, v1};
	byte bufRGB[3];  // 临时保存{R,G,B}
	byte bufYUV[3];  // 临时保存{Y,U,V}

	// 初始化数组空间
    ZeroMemory(bufRGB, sizeof(byte)*3);
	ZeroMemory(bufYUV, sizeof(byte)*3);

	// 初始化内存
	ZeroMemory(Video_Field0, CurrentXRes*CurrentYRes);
	ZeroMemory(Video_Field1, CurrentXRes*CurrentYRes);
	
	// BMP 位图操作
	BITMAPFILEHEADER bmfh;
	BITMAPINFOHEADER bmih;

    char strFileName[MAX_PATH]="720bmp.bmp";
	CFile* f;
	f = new CFile();
	f->Open(strFileName, CFile::modeRead);
	f->SeekToBegin();
	f->Read(&bmfh, sizeof(bmfh));
	f->Read(&bmih, sizeof(bmih));
 
    // 分配图片像素内存
    RGBTRIPLE *rgb;
	rgb = new RGBTRIPLE[bmih.biWidth*bmih.biHeight];

	f->SeekToBegin();
	f->Seek(54,CFile::begin);  // BMP 54个字节之后的是位像素数据
	f->Read(rgb, bmih.biWidth * bmih.biHeight * 3);	 // 这里只读24位RGB(r,g,b)图像
	
	// 上场  (1,3,5,7...行)
	for (int i = bmih.biHeight-1; i>=0; i--) {
		for (int j = 0; j<bmih.biWidth; j++) {
			if(!(i%2)==0) 
			{
				bufRGB[0] = rgb[i*bmih.biWidth+j].rgbtRed;   //	R
				bufRGB[1] = rgb[i*bmih.biWidth+j].rgbtGreen; // G
				bufRGB[2] = rgb[i*bmih.biWidth+j].rgbtBlue;  // B

				// RGB转换为YUV
				RGB2YUV(bufRGB,bufYUV);
				yuv_y0 = bufYUV[0];   // y
				yuv_u0 = bufYUV[1];   // u
				yuv_v0 = bufYUV[2];   // v
				
				for (int k=0; k<1000; k++) ;  //延时
				// 视图中显示
				pDC->SetPixel(j, (bmih.biHeight-1)-i, RGB(bufRGB[0], bufRGB[1], bufRGB[2]));
				
				// UYVY标准  [U0 Y0 V0 Y1] [U1 Y2 V1 Y3] [U2 Y4 V2 Y5] 每像素点两个字节,[内]为四个字节 
				if ((j%2)==0) 
				{
					*Video_Field0 = yuv_u0;  
					Video_Field0++;
					yuv_v1 = yuv_v0;   // v保存起来供下一字节使用
				} 
				else
				{
					*Video_Field0 = yuv_v1;  
					Video_Field0++;
				}
				*Video_Field0 = yuv_y0;      
				Video_Field0++;
			}// end if i%2
		}
	}

    // 下场 (2,4,6,8...行)
	for (int i_ = bmih.biHeight-1; i_>=0; i_--) {
		for (int j_ = 0; j_<bmih.biWidth; j_++) {
			if((i_%2)==0) 
			{
				bufRGB[0] = rgb[i_*bmih.biWidth+j_].rgbtRed;   //	R
				bufRGB[1] = rgb[i_*bmih.biWidth+j_].rgbtGreen; // G
				bufRGB[2] = rgb[i_*bmih.biWidth+j_].rgbtBlue;  // B

				// RGB转换为YUV
				RGB2YUV(bufRGB,bufYUV);
				yuv_y0 = bufYUV[0];   // y
				yuv_u0 = bufYUV[1];   // u
				yuv_v0 = bufYUV[2];   // v

				for (int k=0; k<1000; k++) ;  //延时
				// 视图中显示
				pDC->SetPixel(j_, (bmih.biHeight-1)-i_, RGB(bufRGB[0], bufRGB[1], bufRGB[2]));

				// UYVY标准  [U0 Y0 V0 Y1] [U1 Y2 V1 Y3] [U2 Y4 V2 Y5] 每像素点两个字节,[内]为四个字节 
				if ((j_%2)==0) 
				{
					*Video_Field1 = yuv_u0;  
					Video_Field1++;
					yuv_v1 = yuv_v0;   // v保存起来供下一字节使用
				} 
				else
				{
					*Video_Field1 = yuv_v1;  
					Video_Field1++;
				}
				*Video_Field1 = yuv_y0;      
				Video_Field1++;
			}
		}
	}

    // 关闭BMP位图文件
	f->Close();
	WriteYUV(Video_Field0_, Video_Field1_, size);
	
	// 释放内存
	free( Video_Field0_ ); 
	free( Video_Field1_ );
	delete f;
	delete rgb;
}
Exemple #11
0
void
bayerGBRG_to_yuv422planar_bilinear(const unsigned char *bayer, unsigned char *yuv,
				   unsigned int width, unsigned int height)
{
  unsigned char *y = yuv;
  unsigned char *u = YUV422_PLANAR_U_PLANE(yuv, width, height);
  unsigned char *v = YUV422_PLANAR_V_PLANE(yuv, width, height);
  const unsigned char *bf = bayer;

  int y1, u1, v1, y2, u2, v2;
  int r, g, b;

  // first line is special
  // g  b  ... line
  // not full data in first columns
  RGB2YUV(bf[width], *bf, bf[1], y1, u1, v1);
  ++bf;

  r = (bf[width - 1] + bf[width + 1]) >> 1;
  // correct:
  // g = (bf[-1] + bf[width] + bf[1]) / 3;
  // faster:
  g = (bf[-1] + bf[1]) >> 1;
  RGB2YUV(r, g, *bf, y2, u2, v2);
  ++bf;

  assign(y, u, v, y1, u1, v1, y2, u2, v2);

  // rest of first line
  for (unsigned int w = 2; w < width - 2; w += 2) {
    b = (bf[-1] + bf[1]) >> 1;
    RGB2YUV(bf[width], *bf, b, y1, u1, v1);
    ++bf;

    r = (bf[width - 1] + bf[width + 1]) >> 1;
    // correct:
    // g = (bf[-1] + bf[width] + bf[1]) / 3;
    // faster:
    g = (bf[-1] + bf[1]) >> 1;
    RGB2YUV(r, g, *bf, y2, u2, v2);
    ++bf;

    assign(y, u, v, y1, u1, v1, y2, u2, v2);
  }

  // not full data in last columns
  b = (bf[-1] + bf[1]) >> 1;
  RGB2YUV(bf[width], *bf, b, y1, u1, v1);
  ++bf;

  g = (bf[-1] + bf[width]) >> 1;
  RGB2YUV(bf[width - 1], g, *bf, y2, u2, v2);
  ++bf;

  assign(y, u, v, y1, u1, v1, y2, u2, v2);

  for ( unsigned int h = 1; h < height - 1; h += 2) {

    // r  g  ... line
    // correct: g = (bf[-width] + bf[1] + bf[width]) / 3;
    // faster:
    g = (bf[-width] + bf[1]) >> 1;
    b = (bf[width-1] + bf[width+1]) >> 1;
    RGB2YUV(*bf, g, b, y1, u1, v1);
    ++bf;

    r = (bf[-1] + bf[1]) >> 1;
    b = (bf[-width] + bf[width]) >> 1;
    RGB2YUV(r, *bf, b, y2, u2, v2);
    ++bf;

    assign(y, u, v, y1, u1, v1, y2, u2, v2);

    for (unsigned int w = 2; w < width - 2; w += 2) {
      g = (bf[-width] + bf[1] + bf[width] + bf[-1]) >> 2;
      b = (bf[-width-1] + bf[-width+1] + bf[width-1] + bf[width+1]) >> 2;
      RGB2YUV(*bf, g, b, y1, u1, v1);
      ++bf;

      r = (bf[-1] + bf[1]) >> 1;
      b = (bf[-width] + bf[width]) >> 1;
      RGB2YUV(r, *bf, b, y2, u2, v2);
      ++bf;

      assign(y, u, v, y1, u1, v1, y2, u2, v2);
    }

    g = (bf[-width] + bf[1] + bf[width] + bf[-1]) >> 2;
    b = (bf[-width-1] + bf[-width+1] + bf[width-1] + bf[width+1]) >> 2;
    RGB2YUV(*bf, g, b, y1, u1, v1);
    ++bf;

    b = (bf[-width] + bf[width]) >> 1;
    RGB2YUV(bf[-1], *bf, g, y2, u2, v2);
    ++bf;

    assign(y, u, v, y1, u1, v1, y2, u2, v2);



    // g  b  ... line
    r = (bf[width] + bf[-width]) >> 1;
    RGB2YUV(r, *bf, bf[1], y1, u1, v1);
    ++bf;

    r = (bf[-width-1] + bf[-width+1] + bf[width - 1] + bf[width + 1]) >> 2;
    g = (bf[-width] + bf[1] + bf[width] + bf[-1]) >> 2;
    RGB2YUV(r, g, *bf, y2, u2, v2);
    ++bf;

    assign(y, u, v, y1, u1, v1, y2, u2, v2);

    for (unsigned int w = 2; w < width - 2; w += 2) {
      r = (bf[width] + bf[-width]) >> 1;
      b = (bf[-1] + bf[1]) >> 1;
      RGB2YUV(r, *bf, b, y1, u1, v1);
      ++bf;

      r = (bf[-width-1] + bf[-width+1] + bf[width-1] + bf[width+1]) >> 2;
      g = (bf[-width] + bf[1] + bf[width] + bf[-1]) >> 2;
      RGB2YUV(r, g, *bf, y2, u2, v2);
      ++bf;

      assign(y, u, v, y1, u1, v1, y2, u2, v2);
    }

    r = (bf[width] + bf[-width]) >> 1;
    b = (bf[-1] + bf[1]) >> 1;
    RGB2YUV(r, *bf, b, y1, u1, v1);
    ++bf;

    r = (bf[-width-1] + bf[width-1]) >> 1;
    // correct: g = (bf[-width] + bf[width] + bf[-1]) / 3;
    // faster:
    g = (bf[-width] + bf[-1]) >> 1;
    RGB2YUV(r, g, *bf, y2, u2, v2);
    ++bf;

    assign(y, u, v, y1, u1, v1, y2, u2, v2);
  }

  // last r  g  ... line
  // correct: g = (bf[-width] + bf[1] + bf[width]) / 3;
  // faster:
  g = (bf[-width] + bf[1]) >> 1;
  b = bf[-width+1];
  RGB2YUV(*bf, g, b, y1, u1, v1);
  ++bf;

  r = (bf[-1] + bf[1]) >> 1;
  b = bf[-width];
  RGB2YUV(r, g, *bf, y2, u2, v2);
  ++bf;

  assign(y, u, v, y1, u1, v1, y2, u2, v2);

  for (unsigned int w = 2; w < width - 2; w += 2) {
    // correct: g = (bf[-width] + bf[1] + bf[-1]) / 3
    // faster:
    g = (bf[-width] + bf[-1]) >> 1;
    b = (bf[-width-1] + bf[-width+1]) >> 1;
    RGB2YUV(*bf, g, b, y1, u1, v1);
    ++bf;

    r = (bf[-1] + bf[1]) >> 1;
    b = bf[-width];
    RGB2YUV(r, *bf, b, y2, u2, v2);
    ++bf;

    assign(y, u, v, y1, u1, v1, y2, u2, v2);
  }

  // correct: g = (bf[-width] + bf[1] + bf[-1]) / 3;
  // faster:
  g = (bf[-width] + bf[-1]) >> 1;
  b = (bf[-width-1] + bf[-width+1]) >> 1;
  RGB2YUV(*bf, g, b, y1, u1, v1);
  ++bf;

  b = bf[-width];
  RGB2YUV(bf[-1], *bf, b, y2, u2, v2);
  ++bf;

  assign(y, u, v, y1, u1, v1, y2, u2, v2);

}
Exemple #12
0
void
bayerGBRG_to_yuv422planar_bilinear2(const unsigned char *bayer, unsigned char *yuv,
				   unsigned int width, unsigned int height)
{
  unsigned char *y = yuv;
  unsigned char *u = YUV422_PLANAR_U_PLANE(yuv, width, height);
  unsigned char *v = YUV422_PLANAR_V_PLANE(yuv, width, height);
  const unsigned char *bf = bayer;

  int y1, u1, v1, y2, u2, v2;
  int r, g, b;

  // ignore first g  b  ... line
  bf += width;
  y  += width;
  u  += width >> 1;
  v  += width >> 1;

  for ( unsigned int h = 1; h < height - 1; h += 2) {

    // r  g  ... line
    // ignore first two columns
    ++bf; ++bf;
    ++y; ++y;
    ++u; ++v;

    for (unsigned int w = 2; w < width - 2; w += 2) {
      g = (bf[1] + bf[-1]) >> 1;
      b = (bf[width-1] + bf[width+1]) >> 1;
      RGB2YUV(*bf, g, b, y1, u1, v1);
      ++bf;

      r = (bf[-1] + bf[1]) >> 1;
      b = (bf[-width] + bf[width]) >> 1;
      RGB2YUV(r, *bf, b, y2, u2, v2);
      ++bf;

      assign(y, u, v, y1, u1, v1, y2, u2, v2);
    }

    // ignore last two columns
    ++bf; ++bf;
    ++y; ++y;
    ++u; ++v;

    // g  b  ... line
    // ignore first two columns
    ++bf; ++bf;
    ++y; ++y;
    ++u; ++v;

    for (unsigned int w = 2; w < width - 2; w += 2) {
      r = (bf[width] + bf[-width]) >> 1;
      b = (bf[-1] + bf[1]) >> 1;
      RGB2YUV(r, *bf, b, y1, u1, v1);
      ++bf;

      r = (bf[width-1] + bf[width+1]) >> 1;
      g = (bf[1] + bf[width]) >> 1;
      RGB2YUV(r, g, *bf, y2, u2, v2);
      ++bf;

      assign(y, u, v, y1, u1, v1, y2, u2, v2);
    }

    // ignore last two columns
    ++bf; ++bf;
    ++y; ++y;
    ++u; ++v;
  }

  // ignore last r  g  ... line

}
void
SDLDisplayPattern(chain_t *display_service)
{
  displaythread_info_t *info=(displaythread_info_t*)display_service->data;
  unsigned char *pimage;
  int sx = display_service->current_buffer->frame.size[0];
  int sy = display_service->current_buffer->frame.size[1];
  int y,u,v,is,ie,js,je;
  unsigned char block[4];
  register int i;
  register int j;

  is = (7*sx)/16; is = is-is%2;
  ie = (9*sx)/16; ie = ie-ie%2;
  js = (7*sy)/16;
  je = (9*sy)/16;

  RGB2YUV(display_service->camera->prefs.overlay_color_r,
	  display_service->camera->prefs.overlay_color_g,
	  display_service->camera->prefs.overlay_color_b,y,u,v);

  switch(display_service->camera->prefs.overlay_type) {
  case OVERLAY_TYPE_REPLACE:
    switch(preferences.overlay_byte_order) {
    case DC1394_BYTE_ORDER_YUYV:
      block[0]=y;
      block[1]=u;
      block[2]=y;
      block[3]=v;
      break;
    case DC1394_BYTE_ORDER_UYVY:
      block[0]=u;
      block[1]=y;
      block[2]=v;
      block[3]=y;
      break;
    default:
      fprintf(stderr,"Invalid overlay byte order coding: %d\n",preferences.overlay_byte_order);
      break;
    }
    break;
  case OVERLAY_TYPE_RANDOM:
    switch(preferences.overlay_byte_order) {
    case DC1394_BYTE_ORDER_YUYV:
      block[0]=random()/(RAND_MAX/255);
      block[1]=random()/(RAND_MAX/255);
      block[2]=block[0];
      block[3]=random()/(RAND_MAX/255);
      break;
    case DC1394_BYTE_ORDER_UYVY:
      block[0]=random()/(RAND_MAX/255);
      block[1]=random()/(RAND_MAX/255);
      block[2]=random()/(RAND_MAX/255);
      block[3]=block[1];
      break;
    }
    break;
  case OVERLAY_TYPE_INVERT:
    memset(block, 0, sizeof(block));
    break;
  default:
    fprintf(stderr,"Invalid display overlay type: %d\n",display_service->camera->prefs.overlay_type);
    memset(block, 0, sizeof(block));
    break;
  }

  pthread_mutex_lock(&watchthread_info.mutex_area);
  pimage=info->sdloverlay->pixels[0];
  switch(display_service->camera->prefs.overlay_pattern) {
  case OVERLAY_PATTERN_OFF:
    break;
  case OVERLAY_PATTERN_RECTANGLE:
    if (display_service->camera->prefs.overlay_type==OVERLAY_TYPE_INVERT) {
      j=js;
      for (i=is;i<=ie;i+=2) {
	INVPIX(pimage, ((j*sx+i)<<1));
	INVPIX(pimage, (((j-1)*sx+i)<<1));
      }
      j=je;
      for (i=is;i<=ie;i+=2) {
	INVPIX(pimage,  ((j*sx+i)<<1));
	INVPIX(pimage, (((j+1)*sx+i)<<1));
      }
      i=is;
      for (j=js;j<=je;j++) {
	INVPIX(pimage, ((j*sx+i)<<1));
      }
      i=ie;
      for (j=js;j<=je;j++) {
	INVPIX(pimage, ((j*sx+i)<<1));
      }
    }
    else {
      j=js;
      for (i=is;i<=ie;i+=2) {
	REPLPIX(pimage, block, ((j*sx+i)<<1));
	REPLPIX(pimage, block, (((j-1)*sx+i)<<1));
      }
      j=je;
      for (i=is;i<=ie;i+=2) {
	REPLPIX(pimage, block, ((j*sx+i)<<1));
	REPLPIX(pimage, block, (((j+1)*sx+i)<<1));
      }
      i=is;
      for (j=js;j<=je;j++) {
	REPLPIX(pimage, block, ((j*sx+i)<<1));
      }
      i=ie;
      for (j=js;j<=je;j++) {
	REPLPIX(pimage, block, ((j*sx+i)<<1));
      }
    }
    break;
  case OVERLAY_PATTERN_SMALL_CROSS:
    if (display_service->camera->prefs.overlay_type==OVERLAY_TYPE_INVERT) {
      j=sy/2; 
      for (i=is;i<=ie;i+=2) {
	INVPIX(pimage, ((j*sx+i)<<1));
	INVPIX(pimage, (((j-1)*sx+i)<<1));
      }
      i=sx/2; i=i-i%2;
      for (j=js;j<=je;j++) {
	INVPIX(pimage, ((j*sx+i)<<1));
      }
    }
    else {
      j=sy/2;
      for (i=is;i<=ie;i+=2) {
	REPLPIX(pimage, block, ((j*sx+i)<<1));
	REPLPIX(pimage, block, (((j-1)*sx+i)<<1));
      }
      i=sx/2; i=i-i%2;
      for (j=js;j<=je;j++) {
	REPLPIX(pimage, block, ((j*sx+i)<<1));
      }
    }
    break;
  case OVERLAY_PATTERN_LARGE_CROSS:
    if (display_service->camera->prefs.overlay_type==OVERLAY_TYPE_INVERT) {
      j=sy/2;
      for (i=0;i<sx;i+=2) {
	INVPIX(pimage, ((j*sx+i)<<1));
	INVPIX(pimage, (((j-1)*sx+i)<<1));
      }
      i=sx/2; i=i-i%2;
      for (j=0;j<sy;j++) {
	INVPIX(pimage, ((j*sx+i)<<1));
      }
    }
    else {
      j=sy/2;
      for (i=0;i<sx;i+=2) {
	REPLPIX(pimage, block, ((j*sx+i)<<1));
	REPLPIX(pimage, block, (((j-1)*sx+i)<<1));
      }
      i=sx/2; i=i-i%2;
      for (j=0;j<sy;j++) {
	REPLPIX(pimage, block, ((j*sx+i)<<1));
      }
    }
    break;
  case OVERLAY_PATTERN_GOLDEN_MEAN:
    if (display_service->camera->prefs.overlay_type==OVERLAY_TYPE_INVERT) {
      j=sy/3;
      for (i=0;i<sx;i+=2) {
	INVPIX(pimage, ((j*sx+i)<<1));
	INVPIX(pimage, (((j-1)*sx+i)<<1));
      }
      j=(2*sy)/3;
      for (i=0;i<sx;i+=2) {
	INVPIX(pimage, ((j*sx+i)<<1));
	INVPIX(pimage, (((j-1)*sx+i)<<1));
      }
      i=sx/3;
      i=i-i%2;
      for (j=0;j<sy;j++) {
	INVPIX(pimage, ((j*sx+i)<<1));
      }
      i=(2*sx)/3;
      i=i-i%2;
      for (j=0;j<sy;j++) {
	INVPIX(pimage, ((j*sx+i)<<1));
      }
    }
    else {
      j=sy/3;
      for (i=0;i<sx;i+=2) {
	REPLPIX(pimage, block, ((j*sx+i)<<1));
	REPLPIX(pimage, block, (((j-1)*sx+i)<<1));
      }
      j=(2*sy)/3;
      for (i=0;i<sx;i+=2) {
	REPLPIX(pimage, block, ((j*sx+i)<<1));
	REPLPIX(pimage, block, (((j-1)*sx+i)<<1));
      }
      i=sx/3;
      i=i-i%2;
      for (j=0;j<sy;j++) {
	REPLPIX(pimage, block, ((j*sx+i)<<1));
      }
      i=(2*sx)/3;
      i=i-i%2;
      for (j=0;j<sy;j++) {
	REPLPIX(pimage, block, ((j*sx+i)<<1));
      }
    }
    break;
  case OVERLAY_PATTERN_IMAGE:
    break;
  case OVERLAY_PATTERN_OVER_UNDEREXPOSED:
    switch(preferences.overlay_byte_order) {
    case DC1394_BYTE_ORDER_YUYV:
      if (display_service->camera->prefs.overlay_type==OVERLAY_TYPE_INVERT) {
	for (i=0;i<sx;i+=2) {
	  for (j=0;j<sy;j++) {
	    if ((pimage[(j*sx+i)<<1]>254)||(pimage[(j*sx+i)<<1]<1)||
		(pimage[(j*sx+i+1)<<1]>254)||(pimage[(j*sx+i+1)<<1]<1)) {
	      INVPIX(pimage, ((j*sx+i)<<1));
	    }
	  }
	}
      }
      else {
	for (i=0;i<sx;i+=2) {
	  for (j=0;j<sy;j++) {
	    if ((pimage[(j*sx+i)<<1]>254)||(pimage[(j*sx+i)<<1]<1)||
		(pimage[(j*sx+i+1)<<1]>254)||(pimage[(j*sx+i+1)<<1]<1)) {
	      REPLPIX(pimage, block, ((j*sx+i)<<1));
	    }
	  }
	}
      }
      break;
    case DC1394_BYTE_ORDER_UYVY:
      if (display_service->camera->prefs.overlay_type==OVERLAY_TYPE_INVERT) {
	for (i=0;i<sx;i+=2) {
	  for (j=0;j<sy;j++) {
	    if ((pimage[((j*sx+i)<<1)+1]>254)||(pimage[((j*sx+i)<<1)+1]<1)||
		(pimage[((j*sx+i+1)<<1)+1]>254)||(pimage[((j*sx+i+1)<<1)+1]<1)) {
	      INVPIX(pimage, ((j*sx+i)<<1));
	    }
	  }
	}
      }
      else {
	for (i=0;i<sx;i+=2) {
	  for (j=0;j<sy;j++) {
	    if ((pimage[((j*sx+i)<<1)+1]>254)||(pimage[((j*sx+i)<<1)+1]<1)||
		(pimage[((j*sx+i+1)<<1)+1]>254)||(pimage[((j*sx+i+1)<<1)+1]<1)) {
	      REPLPIX(pimage, block, ((j*sx+i)<<1));
	    }
	  }
	}
      }
      break;
    default:
      fprintf(stderr,"Invalid overlay byte order\n");
    }
    break;
  default:
    fprintf(stderr,"Wrong overlay pattern ID\n");
    break;
  }
  pthread_mutex_unlock(&watchthread_info.mutex_area);
}
Exemple #14
0
int
main(int argc,char** argv){
  quality=atof(argv[1]);
  BMP fin2 (argv[2]);
  BMP fin ;fin.init(fin2.w,fin2.h);
  BMP fout2;fout2.init(fin2.w,fin2.h);
  BMP fout;fout.init(fin2.w,fin2.h);
  
  double in[8][8];
  double out[8][8];
  double out2[8][8];
  int i,j,idx;

  init_walsh();
  init_dwt();

  bmp_for(fin)
    RGB2YUV(fin2(x,y),fin(x,y));


  int    num_dat[14];
  double prob_dat[14];
  int    sum_dat[14];
  double bit_dat[14];
  
  memset(num_dat,0,sizeof(num_dat));


  int num_totallen=0;
  for(int c=0;c<3;c++){
    for(int by=0;by<fin.h/8;by++)
      for(int bx=0;bx<fin.w/8;bx++){
	int num_codelen=0;
	for(int dy=0;dy<8;dy++)
	  for(int dx=0;dx<8;dx++){
	    int x=bx*8+dx;
	    int y=by*8+dy;
	    in[   dy][   dx]=fin(x,y)[c];
	    // in[   dy][   dx]=255;
	  }

	//dct(in,out);
	//walsh(in,out);

	// mprint(in);
	//dwt(in,out);
	haar(in,out);
	// mprint(out);
	// idwt(out,in);
	// mprint(in);
	// return 0;
	// ihaar(out,in);
	// mprint(in);
	// return 0;
	
	
	// if(c!=0)
	mmap(out,(1.0/(qt[c][y][x]*quality))*);
	mmap(out,round);


	//	mprint(out);
	vector<RunBit> rvec;
	vector<Code>   cvec;
	mkRunBit(out,rvec);
	mkCode(rvec,cvec);
	
	for(int dy=0;dy<8;dy++)
	  for(int dx=0;dx<8;dx++){
	    num_dat[(int)(log(fabs(out[dy][dx])+1.0)/log(2))]++;
	  }
		
	// for(int i=0;i<rvec.size();i++)
	//   printf("%d %d\n",rvec[i].zero,rvec[i].code);

	// printf("\n");
	
	// for(int i=0;i<cvec.size();i++)
	//   printf("%d %x\n",cvec[i].len,cvec[i].code);
	// return 0;

	for(int i=0;i<cvec.size();i++)
	  num_codelen+=cvec[i].len;
	double comprate=(double)(8*8*8)/(double)(num_codelen);

	// if(comprate<3){
	//   mprint(out);

		
	//   for(int i=0;i<rvec.size();i++)
	//     printf("%d %d\n",rvec[i].zero,rvec[i].code);
	//   printf("\n");
	
	//   for(int i=0;i<cvec.size();i++)
	//     printf("%d %x\n",cvec[i].len,cvec[i].code);
	//   printf("\n");

	//   printf("comprate %f",comprate);


	//   return 0;
	// }

	num_totallen+=num_codelen;
    
	
	//	if(c!=0)
	mmap(out,(qt[c][y][x]*quality)*);
	//idct(out,out2);
	//walsh(out,out2);
	//idwt(out,out2);
	ihaar(out,out2);

	for(int dy=0;dy<8;dy++)
	  for(int dx=0;dx<8;dx++){
	    int x=bx*8+dx;
	    int y=by*8+dy;
	    fout(x,y)[c]=lmt3[c](out2[   dy][   dx]);
	  }



      }
  }
  bmp_for(fin)
    YUV2RGB(fout(x,y),fout2(x,y));

  for(int y=0;y<14;y++)
    prob_dat[y]=(double)(num_dat[y])/(double)(fin.w*fin.h*3);

  for(int y=0;y<14;y++)
    sum_dat[y]=1<<y;
  
  for(int y=0;y<14;y++)
    if(sum_dat[y]!=0&&prob_dat[y]!=0.0)
      bit_dat[y]=-log(prob_dat[y]/sum_dat[y])/log(2);

  double ave_bits=0;
  
  for(int y=0;y<14;y++)
    ave_bits+=prob_dat[y]*bit_dat[y];
  

  
  for(int y=0;y<14;y++){
    printf("%2d,%5d,%9d,%8.3f,%8.3f,%8.3f\n",
	   y,
	   sum_dat[y],
	   num_dat[y],
	   prob_dat[y],
	   bit_dat[y],
	   prob_dat[y]*bit_dat[y]
	   );
  }
  printf("ideal comprate:%f\n",8.0/ave_bits);


  
  double tcomprate=(double)(fin.w*fin.h*24)/(double)(num_totallen);
  printf("tcomprate %f\n",tcomprate);


  fout2.write(argv[3]);
 
  return true;
}
Exemple #15
0
void Libvlc_Video_Display_Callback(void *opaque, void *picture)
{
	CVlcRtspSDK *pDlg = (CVlcRtspSDK *)opaque;
	if (pDlg == NULL)
		return ;

	if(pDlg->Width ==0)
		return ;

	if( ! pDlg->CapturePath.IsEmpty())
	{
		ZOGDramBMP(pDlg->CapturePath.GetBuffer(0),(unsigned char *)picture,pDlg->Width,pDlg->Height);
		pDlg->CapturePath="";
	}

	memcpy(pDlg->m_DC_Cache.GetCacheBuffer(), picture, pDlg->Width*pDlg->Height*pDlg->m_nBitCount/8);

	CRect rect;
	::GetWindowRect(pDlg->hWnd,&rect);
	pDlg->pDc->StretchBlt(0, 0,rect.Width(), rect.Height(), 
		pDlg->m_DC_Cache.GetCacheDC(), 0, 0,pDlg->Width,pDlg->Height ,SRCCOPY);


	//车牌识别
#if OPEN_LC_CARDETECT_CODE 	

	//启用识别
	if(DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].enableCarDetect)
	{
		DlgMain->DlgTabVideo.DlgScreen.CarAdd[pDlg->screenNo]++;
		if(0==DlgMain->DlgTabVideo.DlgScreen.CarAdd[pDlg->screenNo]%CAR_JUMP_NUM)
		{
			DlgMain->DlgTabVideo.DlgScreen.CarAdd[pDlg->screenNo]=0;

			//拷贝数值
			DlgMain->DlgTabVideo.DlgScreen.CarDetect[pDlg->screenNo].m_playhandle=pDlg->screenNo;

			DlgMain->DlgTabVideo.DlgScreen.CarDetect[pDlg->screenNo].camid=
				DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].camID;

			strcpy(DlgMain->DlgTabVideo.DlgScreen.CarDetect[pDlg->screenNo].cam_name,
				DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].name.GetBuffer(0));

			if(DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].ip.GetLength() >0)
			{
				strcpy(DlgMain->DlgTabVideo.DlgScreen.CarDetect[pDlg->screenNo].l_ipaddr,
					DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].ip.GetBuffer(0));
			}
			else
				strcpy(DlgMain->DlgTabVideo.DlgScreen.CarDetect[pDlg->screenNo].l_ipaddr,"0.0.0.0");

			DlgMain->DlgTabVideo.DlgScreen.CarDetect[pDlg->screenNo].cam_Direction=
				DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].Direction;

			//颜色LC_VIDEO_FORMAT_YV12 与颜色LC_VIDEO_FORMAT_I420 相反
			DlgMain->DlgTabVideo.DlgScreen.CarDetect[pDlg->screenNo].Start(LC_VIDEO_FORMAT_BGR24,
				(unsigned char *)picture,pDlg->Width,pDlg->Height,pDlg->Width*pDlg->Height*3);

			DlgMain->DlgTabVideo.DlgScreen.CarDetect[pDlg->screenNo].Result();
		}
	}

#endif
	//车牌识别
#if OPEN_HYZJ_CARDETECT_CODE 	

	//启用识别
	if(DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].enableCarDetect)
	{
		DlgMain->DlgTabVideo.DlgScreen.CarAdd[pDlg->screenNo]++;
		if(0==DlgMain->DlgTabVideo.DlgScreen.CarAdd[pDlg->screenNo]%CAR_JUMP_NUM)
		{
			DlgMain->DlgTabVideo.DlgScreen.CarAdd[pDlg->screenNo]=0;

			//拷贝数值
			DlgMain->DlgTabVideo.DlgScreen.HYZJCarDetect[pDlg->screenNo].m_playhandle=pDlg->screenNo;

			DlgMain->DlgTabVideo.DlgScreen.HYZJCarDetect[pDlg->screenNo].camid=
				DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].camID;

			strcpy(DlgMain->DlgTabVideo.DlgScreen.HYZJCarDetect[pDlg->screenNo].cam_name,
				DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].name.GetBuffer(0));

			if(DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].ip.GetLength() >0)
			{
				strcpy(DlgMain->DlgTabVideo.DlgScreen.HYZJCarDetect[pDlg->screenNo].l_ipaddr,
					DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].ip.GetBuffer(0));
			}
			else
				strcpy(DlgMain->DlgTabVideo.DlgScreen.HYZJCarDetect[pDlg->screenNo].l_ipaddr,"0.0.0.0");

			DlgMain->DlgTabVideo.DlgScreen.HYZJCarDetect[pDlg->screenNo].cam_Direction=
				DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].Direction;

			//颜色LC_VIDEO_FORMAT_YV12 与颜色LC_VIDEO_FORMAT_I420 相反
			//ImageFormatBGR
#if 0
			unsigned long yuvlen=pDlg->Width*pDlg->Height*3;
			RGB2YUV((unsigned char *)picture,pDlg->Width,pDlg->Height,pDlg->YUVdata,&yuvlen) ;

			DlgMain->DlgTabVideo.DlgScreen.HYZJCarDetect[pDlg->screenNo].Start(ImageFormatYUV420,
				pDlg->YUVdata,pDlg->Width,pDlg->Height,yuvlen);
#else

			DlgMain->DlgTabVideo.DlgScreen.HYZJCarDetect[pDlg->screenNo].Start(ImageFormatBGR,
				(unsigned char *)picture,pDlg->Width,pDlg->Height,pDlg->Width*pDlg->Height*3);
#endif

			DlgMain->DlgTabVideo.DlgScreen.HYZJCarDetect[pDlg->screenNo].Result();
		}
	}

#endif

#if OPEN_FACEDETECT_CODE
	//启用识别
	if(DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].enableFaceDetect)
	{
		DlgMain->DlgTabVideo.DlgScreen.FaceAdd[pDlg->screenNo]++;
		if(0==DlgMain->DlgTabVideo.DlgScreen.FaceAdd[pDlg->screenNo]%FACE_JUMP_NUM)
		{
			DlgMain->DlgTabVideo.DlgScreen.FaceAdd[pDlg->screenNo]=0;

			//	YUV2RGB((unsigned char *)pBuf, 	DlgMain->DlgTabVideo.DlgScreen.RGBdata[screenNo], 	nWidth,nHeight);

			//拷贝数值
			DlgMain->DlgTabVideo.DlgScreen.FaceDetect[pDlg->screenNo].m_playhandle=pDlg->screenNo;

			DlgMain->DlgTabVideo.DlgScreen.FaceDetect[pDlg->screenNo].camid=
				DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].camID;

			strcpy(DlgMain->DlgTabVideo.DlgScreen.FaceDetect[pDlg->screenNo].cam_name,
				DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].name.GetBuffer(0));

			strcpy(DlgMain->DlgTabVideo.DlgScreen.FaceDetect[pDlg->screenNo].l_ipaddr,
				DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].ip.GetBuffer(0));

			DlgMain->DlgTabVideo.DlgScreen.FaceDetect[pDlg->screenNo].cam_Direction=
				DlgMain->DlgTabVideo.DlgScreen.m_videoInfo[pDlg->screenNo].Direction;

			DlgMain->DlgTabVideo.DlgScreen.FaceDetect[pDlg->screenNo].Start(VIDEO_FORMAT_RGB888,
				(unsigned char *)picture,pDlg->Width,pDlg->Height,pDlg->Width*3,pDlg->Width*pDlg->Height*3);

			//ZOGDramBMP("d:\\112212121.bmp",DlgMain->DlgTabVideo.DlgScreen.RGBdata[screenNo], nWidth,nHeight);
		}
	}

#endif

#if (TEST_DEBUG && DEAD_WHILE)

	libvlc_time_t end=libvlc_media_player_get_length( pDlg->m_pLibvlc_Mp);
	libvlc_time_t cur=	libvlc_media_player_get_time( pDlg->m_pLibvlc_Mp);

	if(( end-cur)<=100)
	{
		libvlc_media_player_set_time(pDlg->m_pLibvlc_Mp,0);
	}
#endif

}