[FFmpeg-devel] [PATCH] avdevice/decklink: Removed pthread dependency
wm4
nfxjfg at googlemail.com
Sun Apr 16 22:15:10 EEST 2017
On Sun, 16 Apr 2017 15:23:15 -0300
James Almer <jamrial at gmail.com> wrote:
> On 4/16/2017 2:17 PM, Aaron Levinson wrote:
> > On 4/15/2017 9:32 PM, James Almer wrote:
> >> On 4/15/2017 7:41 AM, Marton Balint wrote:
> >>>
> >>> On Thu, 13 Apr 2017, Aaron Levinson wrote:
> >>>
> >>>> On 4/13/2017 3:40 PM, Marton Balint wrote:
> >>>>>
> >>>>> On Thu, 13 Apr 2017, Aaron Levinson wrote:
> >>>>>
> >>>>>> On 4/13/2017 2:12 AM, Hendrik Leppkes wrote:
> >>>>>>> On Thu, Apr 13, 2017 at 10:36 AM, Aaron Levinson <alevinsn at aracnet.com>
> >>>>>> wrote:
> >>>>>>> Give it some time for the other changes to be reviewed by the people
> >>>>>>> that actually know decklink itself, you can include that in any new
> >>>>>>> versions of the patch then, no need to send one for that right now.
> >>>>>>>
> >>>>>>> - Hendrik
> >>>>>>
> >>>>>> Actually, the coding changes made to the decklink source files in this
> >>>>>> patch have pretty much nothing to do with decklink itself, and anyone
> >>>>>> with familiarity with semaphores and pthread could review those changes.
> >>>>>> In fact, all I really did was use already existing approaches for
> >>>>>> replacing a semaphore with the combination of a condition variable,
> >>>>>> mutex, and counter, and there are plenty of examples of how to do this
> >>>>>> on the Web.
> >>>>>>
> >>>>>
> >>>>> Yeah, the changes look fine, please send an updated patch, I will apply
> >>>>> it after some final testing.
> >>>>>
> >>>>> Thanks,
> >>>>> Marton
> >>>>
> >>>> Here's a new version of the patch with the pthreads dependency replaced with threads.
> >>>>
> >>>
> >>> Thanks, applied.
> >>
> >> Wouldn't it be simpler to add posix semaphore emulation to w32threads
> >> and os2threads?
> >> The former should be trivial, and probably even without the need to
> >> use mutexes or conditional variables given there's CreateSemaphore
> >> and ReleaseSemaphore for this purpose. Not sure about the latter.
> >
> > I addressed this in one of the commit log messages:
>
> Yes. I made the mistake of reading the commit message after
> reading the code and writing a reply, sorry about that :P
>
> >
> > -------------------------------------------------------------------------
> >
> > -- libavdevice/decklink_enc.cpp:
> > a) Eliminated include of pthread.h and semaphore.h.
> > b) Replaced use of semaphore with the equivalent using a combination
> > of a mutex, condition variable, and a counter
> > (frames_buffer_available_spots). In theory, libavutil/thread.h and
> > the associated code could have been modified instead to add
> > cross-platform implementations of the sem_ functions, but an
> > inspection of the ffmpeg source base indicates that there are only
> > two cases in which semaphores are used (including this one that was
> > replaced), so it was deemed to not be worth the effort.
> >
> > --------------------------------------------------------------------------
> >
> > I considered this approach, but the thought of having to do this in os2threads.h pretty much dissuaded me. I had thought that OS/2 was pretty much dead, but it appears that I was wrong. There is a yearly conference, and a new version of OS/2 will soon be released.
> >
> > However, the two places in ffmpeg that the sem_ functions were/are used are likely not relevant to OS/2 anyway:
> >
> > -- DeckLink: Blackmagic only provides drivers/kernel modules for Windows, Linux, and OS/X
> > -- avdevice/jack.c: This pertains to www.jackaudio.org, and at least based on what I can see at https://github.com/jackaudio/jack2, there doesn't appear to be any build configuration for OS/2. jack support also apparently needs sem_timedwait().
> >
> > As such, someone could likely get away with just implementing the sem_ functions in w32threads.h.
> >
> > Aaron
>
> We have a developer that keeps os2threads.h up to date, so he
> will probably add sem_t compat wrappers to it, if not now when
> a module that works on OS/2 needs it.
>
> IMO, if you can and want then add win32 wrappers to w32threads
> right now. The pthread_once wrapper was added for one use case
> then as soon as it became available it started to see more use
> elsewhere in the tree. The same might happen to Semaphores.
Beware that semaphores don't work on OSX.
More information about the ffmpeg-devel
mailing list