[vlc-devel] [PATCH] access module for BlackMagic SDI cards
Jean-Baptiste Kempf
jb at videolan.org
Mon Sep 27 14:32:02 CEST 2010
On Mon, Sep 27, 2010 at 01:56:01PM +0200, Steinar H. Gunderson wrote :
> In any case, I guess this would break the Windows build currently (if the
> user has the SDK installed), so I don't think it's an unreasonable default.
Very unlikely case.
> >> +#ifndef INT64_C
> >> +#define INT64_C(c) c ## LL
> >> +#endif
> > Is this necessary ?
> Yes, it is, given that the module is C++ and the INT64_C stuff is C99.
OK.
> >> + /* Note: AddRef() and Release() here are not thread safe. */
> > This is an issue, no?
>
> Actually I don't think so. The only point where they are AddRef()-ed is from
> Open(), and the only point where they are Release()-ed is in Close() (after
> we've shut down the SDI worker threads). Granted, you could say that the SDK
> might AddRef() and Release() the delegate, but BlackMagic's own example code
> actually just has "return 1;" everywhere here, so I don't think it's a big
> problem in practice.
>
> Does VLC have incremental inc and dec functions I could use?
vlc_gc_incref and such? Not sure if that applied here.
> >> + int i_card_index = var_CreateGetInteger( p_demux, "sdi-card-index" );
> > Shouldn't you use inherit here?
>
> Please explain (or point to an example). I have no idea how this stuff works :-)
var_inheritInteger.
Ivoire will comment more.
> strncpy() will add a null byte, which is not what we want. I could always use
> memcpy?
No, discard my comment.
> >> + p_display_mode->Release();
> >> + p_display_iterator->Release();
> >> + Close( p_this );
> >> + return VLC_EGENERIC;
> > Can't you factor a bit thise code? like a goto error ?
>
> I wondered what to do about this one, and it's really easy to miss one or two
> releases in some path. I wonder if the cleanest thing is to put _everything_
> in Close(), even though, say, p_display_iterator is never used outside of
> Open(). What would you prefer -- a goto or putting stuff in Close()?
I don't care. Choose what is better, but don't copy-paste error pathes
in code.
> >> + msg_Err( p_demux, "Failed to start streams" );
> > What does this mean?
>
> It means the card refused to start streaming for some reason.
> The documentation lists the following return codes:
>
> E_FAIL Failure
> S_OK Success
> E_INVALIDARG Is returned on invalid mode or video flags
> E_ACCESSDENIED Unable to access the hardware or input stream currently
> active
> E_OUTOFMEMORY Unable to create a new frame
>
> Do you want me to reword the message?
Yep.
> Updated patch below.
Formatted git patch, please.
Best Regards,
--
Jean-Baptiste Kempf
http://www.jbkempf.com/
+33 672 704 734
More information about the vlc-devel
mailing list