none
Crash in Video Renderer(VMR) RRS feed

  • Question

  • Hello friends,

    I have ported a arm11 processor device from CE 6.0 to CE 7. I am
    trying to run a wmv file using Microsoft video player. When I run the
    file video renderer gives a crash in VMR. From the log it seems that
    it is trying to create a YV12 surface and the surface is successfully
    created by the display driver. After creating the surface, VMR
    allocator is trying to call a BlackPaintProc function, which is
    causing the crash(access violation). I am trying to run the video on 16bpp 800x600 display settings.

    Please help if anyone else is facing the same
    problem.

    Thanks!!!!!!!!!!!
    Sunday, February 6, 2011 5:07 AM

All replies

  • Check is DDrawSurface is trully created and the pointer is valid.

    Check if "lpddSurfaceDesc->ddpfPixelFormat.dwFlags & DDPF_FOURCC" is not zero

    Also check if " lpddSurfaceDesc->ddpfPixelFormat.dwFourCC" is mmioFOURCC( 'Y' , 'V' , '1' , '2' )

     

    if all this conditions are satisfied then it shall call " YV12PaintSurfaceBlack(pDDrawSurface)" and return

     

    Validate DDrawSurface first with some other DDraw functions then validate " YV12PaintSurfaceBlack(pDDrawSurface)"

     

    hope this will help you !

    ---Misbah

    Monday, February 7, 2011 7:29 AM
  • Dear Misbah,

    Thanks for your reply.

    I debuged this problem at the assembly level and all these parameters are correct. VMR is trying to memset on the surface line by line with zero and incrementing the surface pointer from stride. It is doing this till the end of the surface buffer i.e. height*stride. After this its again trying to memset the surface line by line by 0x80. But at this time it is using the same surface pointer (which is pointing to the last surface location). This is the reason, it is trying to access the unallocated memory. Now I dont understand that is there any logical mistake in my driver while allocating the YV12 surface memory. This driver works fine with CE 6 OS for the YV12 surfaces.

    Thanks!!!!!

    ~~Kapil

    Tuesday, February 8, 2011 12:05 AM
  • Kapil,

    You are trying to run video on resolution of 16bpp 800*600 so the format shall be YUYV or UYVY correct ?

     

    The total memory shall be allocated for 16bpp 800*600 is (800*600*2) bytes.

     

    looks like memory allocation is less that what is required (surface is created with less size)

     

    Regards,

    Misbah

    Tuesday, February 8, 2011 7:45 AM