Using Winelib
Kevin Atkinson
kevin at atkinson.dhs.org
Sat Sep 13 03:03:10 CDT 2003
On Fri, 12 Sep 2003, Kevin Atkinson wrote:
> Here is what I got:
> avs2yuv4mpeg.cpp - the main program
> avisynth_c.h - header for DLL I need to link with
> avisynth_c.lib - lib " " "
>
> And I want to compile this into an executable avs2yuv4mpeg
OK I figured out how to get it to compile. I manually created
libavisynth_c.def, it is attached. I know that wasn't the best thing to
do but it worked. Why is this necessary? Can't it use the .lib file?
Failing that is there a script to create the .def from the .lib?
However, I didn't seam to gain anything from making it a winelib
application. It still runs like a windows application and uses wine.
Furthermore it is still using windows I/O.
How can I use the native glibc I/O libraries? In particular I want to be
able for stdout and stderr to be handles like they would in a linux
application so I can send my output to stdout (with out any line
conversion) and messages to stderr. Right now when I redirect stdout
stderr gets redirected also.
Is it possible to run a winelib application as a native executable, or is
wine needed for the loading of windows dlls?
avs2yuv4mpeg.cpp is also attached.
---
http://kevin.atkinson.dhs.org
-------------- next part --------------
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <windef.h>
#include "avisynth_c.h"
typedef unsigned char byte;
int main(int argc, const char * argv[])
{
if (argc != 2) {puts("Need Source Video"); return 2;}
AVS_ScriptEnvironment * env =
avs_create_script_environment(AVISYNTH_INTERFACE_VERSION);
AVS_Value arg0 = avs_new_value_string(argv[1]);
AVS_Value args = avs_new_value_array(&arg0, 1);
AVS_Value res = avs_invoke(env, "avisource", args, 0);
if (avs_is_error(res)) {
fputs(avs_as_string(res),stderr);
fputc('\n', stderr);
return 1;}
arg0 = res;
res = avs_invoke(env, "ConvertToYV12", args, 0);
AVS_Clip * clip = avs_take_clip(res, env);
avs_release_value(res);
const AVS_VideoInfo * inf = avs_get_video_info(clip);
FILE * out = fopen("y:\\res.yuv", "wb");
int out_fn = fileno(out);
fputs("YUV4MPEG2 ", out);
fprintf(out, "W%d ", inf->width);
fprintf(out, "H%d ", inf->height);
fprintf(out, "F%d:%d ", inf->fps_numerator, inf->fps_denominator);
fputs("\n", out);
fflush(out);
for (int i = 0; i != inf->num_frames; ++i) {
fprintf(stderr, "FRAME %d\n", i);
fflush(stderr);
AVS_VideoFrame * f = avs_get_frame(clip, i);
write(out_fn, "FRAME \n", 7);
const byte * d = avs_get_read_ptr(f);
int pitch = avs_get_pitch(f);
for (int y = 0; y != inf->height; ++y, d += pitch)
write(out_fn, d, inf->width);
d = avs_get_read_ptr_p(f, AVS_PLANAR_U);
pitch = avs_get_pitch_p(f, AVS_PLANAR_U);
for (int y = 0; y != inf->height/2; ++y, d += pitch)
write(out_fn, d, inf->width/2);
d = avs_get_read_ptr_p(f, AVS_PLANAR_V);
pitch = avs_get_pitch_p(f, AVS_PLANAR_V);
for (int y = 0; y != inf->height/2; ++y, d += pitch)
write(out_fn, d, inf->width/2);
avs_release_frame(f);
}
fclose(out);
return 0;
}
-------------- next part --------------
LIBRARY avisynth_c.dll
EXPORTS
avs_invoke @0
avs_take_clip @0
avs_release_value @0
avs_get_video_info @0
avs_get_frame @0
avs_create_script_environment @0
avs_release_video_frame @0
More information about the wine-devel
mailing list