JuliaPy / JuliaPy/PyCall.jl

Working with stdout

Open
#566 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Julia
Stars
1.5k
Forks
186
PR merge metrics
No merged PRs in 30d

Description

I am trying to convert the following piece of code:
```python
from vapoursynth import core
import sys
video = core.ffms2.Source(source='test.mkv')
video = core.std.Transpose(video)
video.output(sys.stdout, True)
```

The following code (passing Julia's stdout):
```julia
using PyCall
#ENV["PYTHON"] = "/usr/bin/python"
@pyimport vapoursynth as vs
@pyimport sys
core = vs.get_core()

video = core[:ffms2][:Source](source="test.mkv")
video = core[:std][:Transpose](video)
video[:output](stdout, true)
```
gives me a segfault.

Passing python's stdout:
```julia
using PyCall
@pyimport vapoursynth as vs
@pyimport sys
core = vs.get_core()

video = core[:ffms2][:Source](source="test.mkv")
video = core[:std][:Transpose](video)
video[:output](sys.stdout, true)
```
Fails when I run:
```
$ julia ex03.jl | x264 --demuxer y4m -o out.mkv -
y4m [info]: 768x1280p 0:0 @ 30/1 fps (cfr)
x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x264 [info]: profile High, level 3.2
y4m [error]: bad frame header length
y4m [error]: bad frame header length
x264 [info]: frame I:1 Avg QP:28.50 size: 53237
x264 [info]: mb I I16..4: 42.0% 29.0% 29.0%
x264 [info]: 8x8 transform intra:29.0%
x264 [info]: coded y,uvDC,uvAC intra: 38.0% 53.4% 29.0%
x264 [info]: i16 v,h,dc,p: 37% 29% 3% 31%
x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 38% 19% 15% 6% 5% 6% 4% 5% 3%
x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 39% 25% 13% 3% 3% 4% 4% 4% 4%
x264 [info]: i8c dc,h,v,p: 48% 26% 24% 2%
x264 [info]: kb/s:12776.88

encoded 1 frames, 21.80 fps, 12950.16 kb/s
ERROR: LoadError: PyError ($(Expr(:escape, :(ccall(#= /home/jose/.julia/packages/PyCall/rUul9/src/pyfncall.jl:44 =# @pysym(:PyObject_Call), PyPtr, (PyPtr, PyPtr, PyPtr), o, pyargsptr, kw)))))
'File write call returned an error'
File "src/cython/vapoursynth.pyx", line 1338, in vapoursynth.VideoNode.output

Stacktrace:
[1] pyerr_check at /home/jose/.julia/packages/PyCall/rUul9/src/exception.jl:60 [inlined]
[2] pyerr_check at /home/jose/.julia/packages/PyCall/rUul9/src/exception.jl:64 [inlined]
[3] macro expansion at /home/jose/.julia/packages/PyCall/rUul9/src/exception.jl:84 [inlined]
[4] __pycall!(::PyObject, ::Ptr{PyCall.PyObject_struct}, ::PyObject, ::Ptr{Nothing}) at /home/jose/.julia/packages/PyCall/rUul9/src/pyfncall.jl:44
[5] _pycall!(::PyObject, ::PyObject, ::Tuple{PyObject,Bool}, ::Int64, ::Ptr{Nothing}) at /home/jose/.julia/packages/PyCall/rUul9/src/pyfncall.jl:22
[6] _pycall!(::PyObject, ::PyObject, ::Tuple{PyObject,Bool}, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at /home/jose/.julia/packages/PyCall/rUul9/src/pyfncall.jl:11
[7] #call#89(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::PyObject, ::PyObject, ::Vararg{Any,N} where N) at /home/jose/.julia/packages/PyCall/rUul9/src/pyfncall.jl:89
[8] (::PyObject)(::PyObject, ::Vararg{Any,N} where N) at /home/jose/.julia/packages/PyCall/rUul9/src/pyfncall.jl:89
[9] top-level scope at none:0
in expression starting at /home/jose/src/julia/vapoursynth/python_based/ex03.jl:8
```

But if I do:
```
$ julia ex03.jl > out.y4m
$ mplayer out.y4m
```
I am able to play the video.

Any clue about what is going on?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.