<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
  <title></title>
</head>
<body>
 
<div class="moz-text-flowed"
 style="font-family: -moz-fixed; font-size: 13px;" lang="x-western">Hi, <br>
 <br>
we have an Apollo MPEG-2 encoder that only has windows driver. <br>
So we implemented a windows named pipe into vls code. <br>
 <br>
Apollo writes in the pipe (e.g. \\.\pipe\vls) and <br>
vls (compiled for windows using msys+mingw) reads it and streams to network. 
<br>
 <br>
We had success !!! <img src="chrome://editor/content/images/smile_n.gif"
 alt=":-)" class="moz-txt-smily" height="19" width="19" align="middle">
&nbsp; <img src="chrome://editor/content/images/smile_n.gif" alt=":-)"
 class="moz-txt-smily" height="19" width="19" align="middle">
 <img src="chrome://editor/content/images/smile_n.gif" alt=":-)"
 class="moz-txt-smily" height="19" width="19" align="middle">
 <br>
 <br>
It is enough to configure the input.cfg <br>
 <br>
BEGIN "1"&nbsp;&nbsp;  &nbsp;Name&nbsp;&nbsp;&nbsp;&nbsp; = "mytest" <br>
&nbsp;FileName = "\\.\pipe\vls" <br>
&nbsp;Type&nbsp;&nbsp;&nbsp;&nbsp; = "Mpeg1-PS" <br>
END <br>
 <br>
 <br>
In file.h we added: <br>
 <br>
private: <br>
&nbsp;HANDLE m_hHd;&nbsp;&nbsp;&nbsp;&nbsp; // &lt;----- new !!! <br>
 <br>
The main changes in vls source code were made in file.cpp: <br>
 <br>
#ifdef _WIN32 <br>
#include &lt;windows.h&gt; <br>
#endif <br>
 <br>
... <br>
... <br>
... <br>
 <br>
void C_File::Open(const C_String&amp; strMode, int iPermissions) <br>
{ <br>
#ifdef _WIN32 <br>
&nbsp;char *strPipeName; <br>
 <br>
&nbsp;if((strPipeName = strstr(m_strPath.GetString(),"\\\\.\\pipe\\")) != NULL) 
<br>
&nbsp;{ <br>
&nbsp;&nbsp; #define BUFFER_IN_LEN&nbsp;&nbsp;&nbsp; 1000 <br>
&nbsp;&nbsp; #define BUFFER_OUT_LEN 1000 <br>
 <br>
&nbsp;&nbsp; if ( (m_hHd = CreateNamedPipe( <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strPipeName;, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PIPE_ACCESS_INBOUND, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BUFFER_OUT_LEN, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BUFFER_IN_LEN, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // time-out <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )) == INVALID_HANDLE_VALUE ) <br>
&nbsp;&nbsp; { <br>
&nbsp;&nbsp;&nbsp;&nbsp; printf("Error creating pipe\n" ); <br>
&nbsp;&nbsp; } <br>
 <br>
&nbsp;&nbsp; printf("Waiting client to connect with %s (buffer in=%d out=%d\n", <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strPipeName;, BUFFER_IN_LEN, BUFFER_OUT_LEN ); <br>
 <br>
&nbsp;&nbsp; if( ConnectNamedPipe( m_hHd, NULL ) == FALSE ) <br>
&nbsp;&nbsp;&nbsp;&nbsp; printf("Error connecting pipe\n" ); <br>
&nbsp;&nbsp; return; <br>
&nbsp;} <br>
&nbsp;else <br>
#endif <br>
&nbsp;&nbsp;&nbsp; m_hFd = fopen(m_strPath.GetString(), strMode.GetString()); <br>
 <br>
... <br>
... <br>
... <br>
 <br>
int C_File::Read(byte* pBuff, int iSize) <br>
{ <br>
&nbsp;ASSERT(pBuff); <br>
&nbsp;ASSERT(iSize &gt; 0); <br>
 <br>
&nbsp;int iRc = 0; <br>
 <br>
#ifdef _WIN32 <br>
&nbsp;if(m_hHd) // pipe? <br>
&nbsp;{ <br>
&nbsp;&nbsp; DWORD cbRead; <br>
 <br>
&nbsp;&nbsp; do <br>
&nbsp;&nbsp; { <br>
&nbsp;&nbsp;&nbsp;&nbsp; if( !ReadFile( m_hHd, pBuff + iRc, iSize - iRc, &amp;cbRead, NULL) ) 
<br>
&nbsp;&nbsp;&nbsp;&nbsp; { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Error reading pipe\n"); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FILE_EOF; <br>
&nbsp;&nbsp;&nbsp;&nbsp; } <br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp; iRc += cbRead; <br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp; if(iRc &lt; iSize) <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sleep(0); <br>
 <br>
&nbsp;&nbsp; } while(iRc &lt; iSize); <br>
&nbsp;} <br>
&nbsp;else <br>
#endif <br>
&nbsp;{ <br>
&nbsp;&nbsp; ASSERT(m_hFd );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Make sure that the file has been opened <br>
&nbsp;&nbsp; iRc = fread(pBuff, sizeof(byte), iSize, m_hFd); <br>
&nbsp;} <br>
 <br>
... <br>
... <br>
... <br>
 <br>
int C_File::Seek(s64 iOffset, int iStartPos) <br>
{ <br>
&nbsp;int iRc; <br>
 <br>
#ifdef _WIN32 <br>
&nbsp;if(m_hHd) // pipe? <br>
&nbsp;&nbsp; iRc = 0; <br>
&nbsp;else <br>
#endif <br>
&nbsp;{ <br>
&nbsp;&nbsp; ASSERT(m_hFd); <br>
&nbsp;&nbsp; iRc = fseek(m_hFd, iOffset, iStartPos); <br>
&nbsp;} <br>
 <br>
... <br>
... <br>
... <br>
 <br>
I hope the report of our experience helps somebody. <br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Carlos Montez <br>
 <br>
 <br>
 <br>
</div>
</body>
</html>