Bug Hunting Session
Bug 45081 - SLIDESHOW CRASH on slide with embedded / linked video
Summary: SLIDESHOW CRASH on slide with embedded / linked video
Status: RESOLVED FIXED
Alias: None
Product: LibreOffice
Classification: Unclassified
Component: Impress (show other bugs)
Version:
(earliest affected)
3.5.0 release
Hardware: x86 (IA32) Windows (All)
: high critical
Assignee: Not Assigned
URL:
Whiteboard: target:3.6.0 target:3.5.4
Keywords: regression
: 44011 46091 47372 47550 48126 48929 48963 49545 49585 50157 (view as bug list)
Depends on:
Blocks: mab3.5
  Show dependency treegraph
 
Reported: 2012-01-22 06:25 UTC by Mateusz
Modified: 2016-03-10 14:00 UTC (History)
17 users (show)

See Also:
Crash report or crash signature:


Attachments
strace logs (1.61 MB, application/x-bzip)
2012-01-22 06:25 UTC, Mateusz
Details
example odg just containing a linked mpg (12.32 KB, application/vnd.oasis.opendocument.presentation)
2012-03-15 03:57 UTC, Peter Schmitt
Details
little example mpg (406.00 KB, video/mpeg)
2012-03-15 03:59 UTC, Peter Schmitt
Details
Test Kit (709.76 KB, application/zip)
2012-03-18 08:11 UTC, Rainer Bielefeld Retired
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Mateusz 2012-01-22 06:25:22 UTC
Created attachment 55957 [details]
strace logs

Insert *.avi file (or any other) and push F5 button. 

Log from console:
quest@quest-desktop:/opt/libreoffice3.5/program$ strace -o /tmp/strace.log -f -tt -s 512 /opt/libreoffice3.5/program/soffice
The program 'soffice' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadAlloc (insufficient resources for operation)'.
  (Details: serial 88 error_code 11 request_code 132 minor_code 19)
  (Note to programmers: normally, X errors are reported asynchronously;
   that is, you will receive the error a while after causing it.
   To debug your program, run it with the --sync command line
   option to change this behavior. You can then get a meaningful
   backtrace from your debugger if you break on the gdk_x_error() function.)

I also attached log from strace.
I work with Ubuntu 10.04.3 LTS.
Comment 1 Jean-Baptiste Faure 2012-01-22 06:36:05 UTC
I do not reproduce the crash. What is the size of your video? Did you tried with a smaller video file?
Tested with LO 3.5.0 rc1+ under Ubuntu 11.10 x86_64

Best regards. JBF
Comment 2 Mateusz 2012-01-22 08:38:10 UTC
Weight this file is 126 MB. I tried with smaller files but that what was letter was so weird. After embedded first file, Impress show dark-gray field  with question mark and I can play this video inside Impress (but not as slideshow). If I insert other, smaller file (or bigger file, also avi)*, Impress show field with audio icons and only audio plays. And it's work well also in slideshow mode, but where is video?

Maybe this will give a clue if I said that first avi file is rough file straight from video camera.

*mostly riped from YouTube or movies, I have mkv files yet, but Impress doesn't recognize it
Comment 3 Peter Schmitt 2012-03-15 03:57:27 UTC
Created attachment 58489 [details]
example odg just containing a linked mpg
Comment 4 Peter Schmitt 2012-03-15 03:58:19 UTC
I can confirm permanent crashes with linked videos/mpg in  IMPRESS 
LibO 3.5.0RC3, LOdev3.5.2RC-nightlyBuild20120312 on WindowsXpSP3 
AND LibO 3.5.0RC3 on Windows7Pro-64bit 

Just open a new odg and insert any mpg-file via "Insert / Movie and sound".

or download "example_presentation.odg" together with  "impress_crashes_with_linked_videos.mpg" and give it the correct file-link.
Comment 5 Peter Schmitt 2012-03-15 03:59:08 UTC
Created attachment 58490 [details]
little example mpg
Comment 6 Rainer Bielefeld Retired 2012-03-18 08:06:35 UTC
*** Bug 44011 has been marked as a duplicate of this bug. ***
Comment 7 Rainer Bielefeld Retired 2012-03-18 08:10:16 UTC
[Reproducible] with "LibreOffice 3.5.1.2 German UI/Locale [Build-ID: dc9775d-05ecbee-0851ad3-1586698-727bf66] on German WIN7 Home Premium (64bit) 

Steps to reproduce:
1. Open "sample.odp" from attached test kit
2. Start presentation with <f9>
   > slide show starts as expected and will reach third slide
   Epected: small movie will be shown
   Actual: Crash

Very old problem, already [Reproducible] with Server installation of Master "LibO-dev 3.4.5 – WIN7 Home Premium (64bit) English UI 
[(Build ID:d337f79-a24c961-2865670-9752b71-7f8fd43
	2fdd60d-fd28b6a-fd7bf20-aa369cb-28da3fb
	6a9633a-931d089-ecd263f-c9b55e9-b31b807
	82ff335-599f7e9-bc6a545-1926fdf)]" 

Works fine with 3.4.5, so REGRESSION

@Radek
Please set Status to ASSIGNED and add yourself to "Assigned To" if you accept this Bug
Comment 8 Rainer Bielefeld Retired 2012-03-18 08:11:18 UTC
Created attachment 58637 [details]
Test Kit

See Comment 7
Comment 9 Rainer Bielefeld Retired 2012-03-18 08:13:23 UTC
*** Bug 47372 has been marked as a duplicate of this bug. ***
Comment 10 Rainer Bielefeld Retired 2012-03-18 08:16:47 UTC
*** Bug 46091 has been marked as a duplicate of this bug. ***
Comment 11 Jean-Baptiste Faure 2012-03-18 08:25:32 UTC
Sorry, no crash for me under Ubuntu 11.10 x86_64 with LO 3.5.1, LO 3.5.2 rc0+ (Version ID : 5cffa17-a73d29c-73cb0b8-f269e46-686380c) and master (LibreOffice 3.6.0alpha0+ Build ID: 08ba87c-49d3d39-e67b1bf-879ce36-638d9c).

MS-Windows only problem ?

Best regards. JBF
Comment 12 Rainer Bielefeld Retired 2012-03-18 10:53:17 UTC
Modify OS for now.

DUPs also only WIN, Bug 44011 with comment "Not reproducible with Linux", so indeed seems WIN only.
Comment 13 Rainer Bielefeld Retired 2012-03-20 05:13:12 UTC
*** Bug 47550 has been marked as a duplicate of this bug. ***
Comment 14 Michael Meeks 2012-03-29 03:24:58 UTC
Can you re-run with symbols under gdb and get a stack trace ?

First you should export SAL_SYNCHRONIZE=1 which should do what it is saying in that trace :-)

The hopefully we'll be able to get into it more quickly. And of course a nice self contained test with a tiny embedded file (you can do that in 3.5) would be even sexier; thanks ! :-)
Comment 15 Korrawit Pruegsanusak 2012-03-30 04:33:08 UTC
I think the Version field should be "LibO 3.5.0 Release", not the "LibO Master".
Rainer, are you intended to change it to "LibO Master" on 2012-03-18?
Comment 16 Julien Nabet 2012-04-03 13:41:27 UTC
*** Bug 48126 has been marked as a duplicate of this bug. ***
Comment 17 Roman Eisele 2012-04-04 11:44:14 UTC
(In reply to comment #12)
> Modify OS for now.
> 
> DUPs also only WIN, Bug 44011 with comment "Not reproducible with Linux", so
> indeed seems WIN only.

For the sake of completeness:
The bug is NOT reproducible on MacOS X 10.6.8 with LibreOffice 3.5.2.2 (Build-ID: 281b639-6baa1d3-ef66a77-d866f25-f36d45f) and the Test kit by Rainer Bielefeld (see comment #7). So this bug is really a Windows-only problem.
Comment 18 Jean-Baptiste Faure 2012-04-07 03:45:41 UTC
(In reply to comment #15)
> I think the Version field should be "LibO 3.5.0 Release", not the "LibO
> Master".
> Rainer, are you intended to change it to "LibO Master" on 2012-03-18?

I think you are right, has never been set fixed for 3.5.0. Version set back to 3.5.0 Release. 

Best regards. JBF
Comment 19 Rainer Bielefeld Retired 2012-04-07 04:32:22 UTC
(In reply to comment #15)
> I think the Version field should be "LibO 3.5.0 Release", 

What would mean it still worked in 3.5.0 RC2? No!
Please see Comment 7 and <http://wiki.documentfoundation.org/BugReport_Details#Version>

But may be we will have to think about a little more specified Master information, because for very old Bugs in future a simple "Master" information is rather valueless. I will start a thread on LibO-QA for that to find a solution how to improve information from Version picker

@Michael Meeks:
I would try to contribute requested information (Comment 14) if I would understand your hints. Can you help a simple user?
Comment 20 Jean-Baptiste Faure 2012-04-07 04:53:58 UTC
(In reply to comment #19)
> (In reply to comment #15)
> > I think the Version field should be "LibO 3.5.0 Release", 
> 
> What would mean it still worked in 3.5.0 RC2? No!

I do not think so, it means only that the problem has been detected first in LO 3.5.0, not that it worked before. If you change the version number to master it will be interpreted as "the bug has been fixed in branch 3.5 only but not in master", which is false.

Best regards. JBF
Comment 21 Ricard 2012-04-11 17:13:17 UTC
Hi,
I have win7 home premium edition (64bit)
with an Dell i7 and 8 GB of memory.
I have tested with installed 3.5.1 and 3.5.2 Version
Open a new impressfile
insert a video and klick F5
impress crashes.

With the installed version of 3.4.6 libreoffice shows the video.

Any solution out there?
Comment 22 ribotb 2012-04-12 03:03:24 UTC
Hi,

LO also crashes with sound files (tested with mp3 and wav files).

LO 3.5.1.2 under Win 7 SP1 32 bits.

Bernard Ribot
Comment 23 Cor Nouws 2012-04-15 07:28:53 UTC
(In reply to comment #20)
> I do not think so, it means only that the problem has been detected first in LO
> 3.5.0, not that it worked before.

Even more: the last I understood is, that the version field shows the first version in which the bug is known.
Pls correct me if I'm wrong, Rainer.
Comment 24 Ricard 2012-04-24 05:32:16 UTC
Hi,
On this bug was a lot discusion about how to handle the bug, but I am missing if there is anybodz really working to fix this bug.
For me it is hard to use impress if it is imposible to handle videos.

Thanks for helping.
Comment 25 Rainer Bielefeld Retired 2012-05-07 10:51:23 UTC
*** Bug 48963 has been marked as a duplicate of this bug. ***
Comment 26 Rainer Bielefeld Retired 2012-05-07 10:52:49 UTC
*** Bug 49585 has been marked as a duplicate of this bug. ***
Comment 27 ComputerHotline 2012-05-07 13:32:34 UTC
This bug always exists in version 3.5.3.2
Comment 28 Jean-Baptiste Faure 2012-05-07 13:47:32 UTC
Please, don't change version number. It indicates the oldest version in which the bug  has been found.
Comment 29 Michael Meeks 2012-05-09 12:15:48 UTC
Reproduces nicely under Windows XP, embarrassingly bad - for sure. Stack trace shows a NULL pointer de-reference in vcllo.dll - I guess I need to get a bug symbols build going under windows to get closer to it.

Incidentally - getting a stack trace on windows often makes it -insanely- easier to quickly fix these bugs by pure code reading, and requires little skill :-)
Comment 30 Don't use this account, use tml@iki.fi 2012-05-10 10:27:01 UTC
Stack trace from fresh master build:

  vcllo.dll!SystemChildWindow::GetParentWindowHandle(unsigned char bUseJava=0)  Line 245 + 0x8 bytes  C++
  slideshow.uno.dll!slideshow::internal::ViewMediaShape::implInitializeVCLBasedPlayerWindow(const basegfx::B2DRange & rBounds={...}, const com::sun::star::uno::Sequence<com::sun::star::uno::Any> & rVCLDeviceParams=0x00e3f424 {size=2})  Line 465 + 0x18 bytes C++
  slideshow.uno.dll!slideshow::internal::ViewMediaShape::implInitialize(const basegfx::B2DRange & rBounds={...})  Line 321  C++
  slideshow.uno.dll!slideshow::internal::ViewMediaShape::startMedia()  Line 134 C++
  slideshow.uno.dll!boost::_mfi::mf0<bool,slideshow::internal::ViewMediaShape>::call<boost::shared_ptr<slideshow::internal::ViewMediaShape> >(boost::shared_ptr<slideshow::internal::ViewMediaShape> & u={...}, const void * __formal=0x00000000)  Line 41  C++
  slideshow.uno.dll!boost::_mfi::mf0<bool,slideshow::internal::ViewMediaShape>::operator()<boost::shared_ptr<slideshow::internal::ViewMediaShape> >(boost::shared_ptr<slideshow::internal::ViewMediaShape> & u={...})  Line 56  C++
  slideshow.uno.dll!std::for_each<std::_Vector_iterator<boost::shared_ptr<slideshow::internal::ViewMediaShape>,std::allocator<boost::shared_ptr<slideshow::internal::ViewMediaShape> > >,boost::_mfi::mf0<bool,slideshow::internal::ViewMediaShape> >(std::_Vector_iterator<boost::shared_ptr<slideshow::internal::ViewMediaShape>,std::allocator<boost::shared_ptr<slideshow::internal::ViewMediaShape> > > _First={px=0x0ead9380 pn={...} }, std::_Vector_iterator<boost::shared_ptr<slideshow::internal::ViewMediaShape>,std::allocator<boost::shared_ptr<slideshow::internal::ViewMediaShape> > > _Last={px=0x0eae8e90 pn={...} }, boost::_mfi::mf0<bool,slideshow::internal::ViewMediaShape> _Func={...})  Line 29 + 0xc bytes C++
  slideshow.uno.dll!slideshow::internal::MediaShape::implStartIntrinsicAnimation()  Line 232 + 0x5e bytes C++
  slideshow.uno.dll!slideshow::internal::ExternalShapeBase::ExternalShapeBaseListener::enableAnimations()  Line 86  C++
  slideshow.uno.dll!boost::_mfi::mf0<bool,slideshow::internal::IntrinsicAnimationEventHandler>::call<boost::shared_ptr<slideshow::internal::IntrinsicAnimationEventHandler> const >(const boost::shared_ptr<slideshow::internal::IntrinsicAnimationEventHandler> & u={...}, const void * __formal=0x00000000)  Line 41  C++
  slideshow.uno.dll!boost::_mfi::mf0<bool,slideshow::internal::IntrinsicAnimationEventHandler>::operator()<boost::shared_ptr<slideshow::internal::IntrinsicAnimationEventHandler> >(const boost::shared_ptr<slideshow::internal::IntrinsicAnimationEventHandler> & u={...})  Line 64  C++
  slideshow.uno.dll!slideshow::internal::FunctionApply<bool,boost::shared_ptr<slideshow::internal::IntrinsicAnimationEventHandler> >::apply<boost::_mfi::mf0<bool,slideshow::internal::IntrinsicAnimationEventHandler> >(boost::_mfi::mf0<bool,slideshow::internal::IntrinsicAnimationEventHandler> func={...}, const boost::shared_ptr<slideshow::internal::IntrinsicAnimationEventHandler> & rArg={...})  Line 81 C++
  slideshow.uno.dll!slideshow::internal::ListenerOperations<boost::shared_ptr<slideshow::internal::IntrinsicAnimationEventHandler> >::notifyAllListeners<std::vector<boost::shared_ptr<slideshow::internal::IntrinsicAnimationEventHandler>,std::allocator<boost::shared_ptr<slideshow::internal::IntrinsicAnimationEventHandler> > > const ,boost::_mfi::mf0<bool,slideshow::internal::IntrinsicAnimationEventHandler> >(const std::vector<boost::shared_ptr<slideshow::internal::IntrinsicAnimationEventHandler>,std::allocator<boost::shared_ptr<slideshow::internal::IntrinsicAnimationEventHandler> > > & rContainer=[1]({px=0x0eaad884 pn={...} }), boost::_mfi::mf0<bool,slideshow::internal::IntrinsicAnimationEventHandler> func={...})  Line 128 + 0x12 bytes C++
  slideshow.uno.dll!slideshow::internal::ListenerContainerBase<boost::shared_ptr<slideshow::internal::IntrinsicAnimationEventHandler>,slideshow::internal::EmptyBase,std::vector<boost::shared_ptr<slideshow::internal::IntrinsicAnimationEventHandler>,std::allocator<boost::shared_ptr<slideshow::internal::IntrinsicAnimationEventHandler> > >,16>::applyAll<boost::_mfi::mf0<bool,slideshow::internal::IntrinsicAnimationEventHandler> >(boost::_mfi::mf0<bool,slideshow::internal::IntrinsicAnimationEventHandler> func={...})  Line 264 + 0xd bytes C++
  slideshow.uno.dll!slideshow::internal::ShapeManagerImpl::notifyIntrinsicAnimationsEnabled()  Line 451 C++
  slideshow.uno.dll!slideshow::internal::`anonymous namespace'::SlideImpl::startIntrinsicAnimations()  Line 962 C++
  slideshow.uno.dll!slideshow::internal::`anonymous namespace'::SlideImpl::show(bool bSlideBackgoundPainted=true)  Line 549 C++
  slideshow.uno.dll!`anonymous namespace'::SlideShowImpl::notifySlideTransitionEnded(bool bPaintSlide=false)  Line 2156 C++
  slideshow.uno.dll!boost::_mfi::mf1<void,`anonymous namespace'::SlideShowImpl,bool>::operator()(`anonymous-namespace'::SlideShowImpl * p=0x0f17dc08, bool a1=false)  Line 166  C++
  slideshow.uno.dll!boost::_bi::list2<boost::_bi::value<`anonymous namespace'::SlideShowImpl *>,boost::_bi::value<bool> >::operator()<boost::_mfi::mf1<void,`anonymous namespace'::SlideShowImpl,bool>,boost::_bi::list0>(boost::_bi::type<void> __formal={...}, boost::_mfi::mf1<void,`anonymous namespace'::SlideShowImpl,bool> & f={...}, boost::_bi::list0 & a={...}, boost::_bi::type<void> __formal={...})  Line 314  C++
  slideshow.uno.dll!boost::_bi::bind_t<void,boost::_mfi::mf1<void,`anonymous namespace'::SlideShowImpl,bool>,boost::_bi::list2<boost::_bi::value<`anonymous namespace'::SlideShowImpl *>,boost::_bi::value<bool> > >::operator()()  Line 21 C++
  slideshow.uno.dll!boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<void,boost::_mfi::mf1<void,`anonymous namespace'::SlideShowImpl,bool>,boost::_bi::list2<boost::_bi::value<`anonymous namespace'::SlideShowImpl *>,boost::_bi::value<bool> > >,void>::invoke(boost::detail::function::function_buffer & function_obj_ptr={...})  Line 154 C++
  slideshow.uno.dll!boost::function0<void>::operator()()  Line 1013 + 0x14 bytes  C++
  slideshow.uno.dll!slideshow::internal::Delay::fire()  Line 42 C++
  slideshow.uno.dll!slideshow::internal::EventQueue::process_(bool bFireAllEvents=false)  Line 250  C++
  slideshow.uno.dll!slideshow::internal::EventQueue::process()  Line 183  C++
  slideshow.uno.dll!`anonymous namespace'::SlideShowImpl::update(double & nNextTimeout=0.00000000000000000)  Line 2022  C++
  sdlo.dll!sd::SlideshowImpl::updateSlideShow()  Line 1889 + 0x21 bytes C++
  sdlo.dll!sd::SlideshowImpl::PostYieldListener(void * __formal=0x00000000)  Line 1864 + 0x8 bytes  C++
  sdlo.dll!sd::SlideshowImpl::LinkStubPostYieldListener(void * pThis=0x0fe91a88, void * pCaller=0x00000000)  Line 1852 + 0xf bytes  C++
  tllo.dll!Link::Call(void * pCaller=0x00000000)  Line 143 + 0x1b bytes C++
  vcllo.dll!VclEventListeners2::callListeners(VclSimpleEvent * i_pEvent=0x00000000)  Line 159 C++
  vcllo.dll!ImplYield(bool i_bWait=true, bool i_bAllEvents=false)  Line 472 C++
  vcllo.dll!Application::Yield(bool i_bAllEvents=false)  Line 485 + 0xc bytes C++
  vcllo.dll!Application::Execute()  Line 430 + 0x7 bytes  C++
  sofficeapp.dll!desktop::Desktop::Main()  Line 1809  C++
  vcllo.dll!ImplSVMain()  Line 183 + 0x15 bytes C++
  vcllo.dll!SVMain()  Line 221  C++
  sofficeapp.dll!soffice_main()  Line 79 + 0x5 bytes  C++
  soffice.bin!sal_main()  Line 35 C
  soffice.bin!main(int argc=2, char * * argv=0x049f5fa0)  Line 33 + 0x1a bytes  C
  soffice.bin!WinMain(void * _hinst=0x00400000, void * _dummy=0x00000000, char * _cmdline=0x0005233b, int _nshow=1)  Line 33 + 0x28 bytes C
  soffice.bin!__tmainCRTStartup()  Line 578 + 0x1d bytes  C
Comment 31 Don't use this account, use tml@iki.fi 2012-05-10 10:33:37 UTC
The immediate cause for the crash is pretty clear, GetSystemData() returns NULL and then the code in SystemChildWindow::GetParentWindowHandle() (vcl/source/window/syschild.cxx) tries to dereference that. But what causes it to return NULL, whether that is a legal situation that just needs to be handled in the caller, or whether it should never return NULL, no idea.
Comment 32 Don't use this account, use tml@iki.fi 2012-05-10 10:54:11 UTC
And the reason GetSystemData() returns NULL is that mpSysObj is NULL. mpSysObj is set in SystemChildWindow::ImplInitSysChild(), which calls ImplGetSVData()->mpDefInst->CreateObject() which eventually (through a SendMessage() tour into user32.dll and then callback to the window procedure) ends up in ImplSalCreateObject() in vcl/win/source/window/salobj.cxx.

There then the call to CreateWindowExA() on line 587 fails (returning NULL). This causes it to return NULL, which gets returned back through the call stack and assigned to mpSysObj.

Will add some debugging printout of the reason why the CreateWindowExA() fails.
Comment 33 Don't use this account, use tml@iki.fi 2012-05-10 11:20:59 UTC
The error code from the failed CreateWindowExA() corresponds to the "window class not found" message (translated from the Swedish message by Swedish XP shows, dunno what the exact message in English is).

The CreateWindowEx() call uses the window class name SAL_OBJECT_CHILDCLASSNAMEA, but that window class is not registered anywhere. That code was accidentally removed in commit cda4a293608514783d38d470799cfbf97b245cc6 in almost a year ago, it seems...
Comment 34 Not Assigned 2012-05-10 11:40:17 UTC
Tor Lillqvist committed a patch related to this issue.
It has been pushed to "master":

http://cgit.freedesktop.org/libreoffice/core/commit/?id=44e52d6698742edc8295bdcb7ad06ff370e5e6a6

fdo#45081: We never registered the SAL_OBJECT_CHILDCLASSNAMEA window class
Comment 35 Not Assigned 2012-05-10 11:51:40 UTC
Norbert Thiebaud committed a patch related to this issue.
It has been pushed to "libreoffice-3-5":

http://cgit.freedesktop.org/libreoffice/core/commit/?id=0a2f81a35d338c8e2d2da55df3fb221fa1de5bba&g=libreoffice-3-5

fdo#45081: We never registered the SAL_OBJECT_CHILDCLASSNAMEA window class


It will be available in LibreOffice 3.5.4.
Comment 36 Michael Meeks 2012-05-11 02:22:34 UTC
Thanks Tor ! :-) nice work.
Comment 37 Don't use this account, use tml@iki.fi 2012-05-11 02:51:44 UTC
*** Bug 49545 has been marked as a duplicate of this bug. ***
Comment 38 Caolán McNamara 2012-05-20 15:03:36 UTC
*** Bug 50157 has been marked as a duplicate of this bug. ***
Comment 39 Michael Meeks 2012-05-22 03:51:49 UTC
*** Bug 48929 has been marked as a duplicate of this bug. ***
Comment 40 ribotb 2012-05-27 00:51:32 UTC
Hi,

I proceeded some tests with Libo 3.5.4.1 under Win 7 SP1 32 bits and here are the results :
- insert a mpg or avi video file : ok;
- insert a mp4 video file : message "unsupported format", although this format appears in the list of file types supported (in Insert > Video or sound);
- insert a mp3 or wav audio file : ok.

But any of the files created in pps format is readable with the MS Powerpoint Viewer (2007).

Best regards,
Bernard