9 Replies Latest reply on Mar 30, 2010 9:24 PM by Andy75165

    Avivo /Unified Video Decoder application programming interface

    patch1
      Across multiple operating systems

      I'm looking for programming information to enable graphics card hardware acceleration of video decoding. I'm aware it can be done via directX 10 but that is limited to vista, so not useful.


      This thread suggest the information is not publicly available http://forum.videolan.org/viewtopic.php?f=2&t=42328&start=15

      Looking on the AMD site I could find only information on the normal graphics processor. Perhaps I'm just looking in the wrong places.

        • Avivo /Unified Video Decoder application programming interface
          patch1

          Given the lack of response, I assume that means there is no publically available interface to the Unified Video Decoder application programming interface unless you go via Vista.

          Pitty AMD restricts their market that much.

          BTW, incase anyone else is also looking for how to actually use the Avivo hardware on a non Vista machine, a good place to start is http://en.wikipedia.org/wiki/AVIVO & http://www.expreview.com/

            • Avivo /Unified Video Decoder application programming interface
              donpellegrino

              I would also like to be able to use the hardware video decoder from Linux.  Has any additional information been released on this?

                • Avivo /Unified Video Decoder application programming interface
                  patch1

                   

                  Originally posted by: donpellegrino I would also like to be able to use the hardware video decoder from Linux.


                  What are you hoping to use the video decoder for?

                  If it is for independent data processing it maybe worth having a look at openCL.

                  If it is for video card acceleration of local movie display you probably want openMax rather than openGL but unfortunately my understanding was AMD don't have drivers for openMax.

                  BTW, There are several useful references in this thread http://forum.videolan.org/viewtopic.php?f=2&t=9647

                    • Avivo /Unified Video Decoder application programming interface
                      donpellegrino

                      I was hoping specifically for video card acceleration of local movie display.  I guess it doesn't matter if the call is though OpenMAX, OpenCL or OpenGL although OpenMAX does seems to be the most appropriate API for this functionality.

                      I am currently using ATI's OpenGL library and kernel module for Linux but with the MESA headers (I couldn't find any headers or man pages from ATI to go along with their library).  It seems like the path of least resistance might have been for ATI to expose the Avivo functionality as a custom OpenGL extension in their library and provide a header and man page for it.  Alternatively an ATI library (aka driver) for OpenMAX with a set of headers and man pages for it would be good too.

                      For all I know Avivo is already exposed in ATI's Linux libGL as an extension but I am just lacking the header with calling signature to take advantage of it.  Did they provide a special separate lib and headers for Avivo on Windows or was it implemented as an extension to OpenGL?

                        • Avivo /Unified Video Decoder application programming interface
                          patch1

                           

                          Originally posted by: donpellegrino I was hoping specifically for video card acceleration of local movie display.  I guess it doesn't matter if the call is though OpenMAX, OpenCL or OpenGL although OpenMAX does seems to be the most appropriate API for this functionality.


                          Agree

                           

                          I am currently using ATI's OpenGL library and kernel module for Linux but with the MESA headers (I couldn't find any headers or man pages from ATI to go along with their library).


                          Maybe my understanding is incorrect but I  thought openMax provided a level of abstraction beyond ATI (hypothetical) driver interface to it http://www.celinux.org/elc08_presentations/gst-openmax.pdf

                          So I suspect you want acces to an openMax library as well as ATI interfacing to the library. I could be wrong though.

                           

                          It seems like the path of least resistance might have been for ATI to expose the Avivo functionality as a custom OpenGL extension in their library and provide a header and man page for it.


                          I suspect protection of trade secrets and possibly limitation of public access to Digital rights management decription algorithmns, are the reason ATI & NIVIDA don't do that.

                           

                          Alternatively an ATI library (aka driver) for OpenMAX with a set of headers and man pages for it would be good too.


                          Or XvMC via their XvBA API may help http://www.phoronix.com/scan.php?page=article&item=amd_xvmc_xvba&num=1

                           

                          For all I know Avivo is already exposed in ATI's Linux libGL as an extension but I am just lacking the header with calling signature to take advantage of it.  Did they provide a special separate lib and headers for Avivo on Windows or was it implemented as an extension to OpenGL?


                          I believe it is done via DirectX 10 in Vista or software developers signing non-disclosure agreements. There is a list of examples here http://en.wikipedia.org/wiki/AVIVO

                            • Avivo /Unified Video Decoder application programming interface
                              donpellegrino

                              Thanks for the detailed reply patch1.  Your knowledge of Avivo on Linux is impressive.  Based on XvMC/XvBA article referenced it seems like those APIs are the target for exposing the Avivo functionality, specifically via libAMDXvBA.so.1.o and libXvBAW.so.1.o.  I wonder how difficult it would be to put some sample code together that makes use of CreateUVDCommand, CreateUVDBufferPool, CreateUVDConfig, RegisterUVDClient, UVDSession, etc.

                              For ATI to get the most out of this great effort it might be good for them to put an example program on the developer site which can read a video file and pass it to UVD for playback.  This would be really helpful for the Mplayer, VLC, Gstreamer, etc coders to work the right modules into the players.  If you agree that I have interpreted this correctly maybe we could put an email into ATI for such a request.

                                • Avivo /Unified Video Decoder application programming interface
                                  patch1

                                  Don't think I agree with your assessment of my abilities but the rest of your logic appears sound to me.

                                  I was hoping AMD was monitoring their forum and would respond, but perhaps that is not how they work.

                                    • Avivo /Unified Video Decoder application programming interface
                                      donpellegrino

                                      As I learn more about AVIVO on Linux I have some encouraging notes.  The X-Video Extension does appear to recognize AVIVO with the ATI driver installed:

                                      $ xvinfo
                                      X-Video Extension version 2.2
                                      screen #0
                                        Adaptor #0: "ATI Radeon AVIVO Video"
                                          number of ports: 4
                                          port base: 131
                                          operations supported: PutImage
                                          supported visuals:
                                      ...

                                      I compared "mplayer -vo xv" to other video output drivers and X-Video does have much lower CPU utilization that the alternatives.  Based on this it seems that I am getting a nice performance benefit from the GPU.

                                      The next level of optimization might be to use X-Video Motion Compensation ("mplayer -vo xvmc").  The X log reports that xvmc is loaded:

                                      $ cat /var/log/Xorg.0.log | grep Motion
                                      (II) Loading extension XVideo-MotionCompensation

                                      Although X reports XVideo-MotionCompensation is available mplayer reports that it is not:

                                      $ mplayer -vo xvmc ...
                                      vo_xvmc: X-Video extension 2.2
                                      vo_xvmc: No X-Video MotionCompensation Extension on :0.0
                                      Error opening/initializing the selected video_out (-vo) device.

                                      This is a curious contradiction.