NeroBurn() not returning when media fills or is full - NeroSDK C++

vbimport

#1

Hello Everyone,

I’ve discovered a problem in which NeroBurn() does not return if it is in the midst of writing files to media and the media fills up or does not have space available. The DVD burner (a Sony) ejects the disc when this occurs. I can insert other media with sufficient space - I then see some activity, but that media is then ejected shortly afterward. I have set a breakpoint at my IdleCallback() function and the function is being called regularly during this time. If I break the application in the VC++ debugger, I see the following stack trace:

   7ffe0304()
   KERNEL32! 77e7ab74()
   NEWTRF! 220191c0()
   NEWTRF! 22018031()
   NEROERR! 2000c7b9()
   KERNEL32! 77e7d28e()

Based on the “NEROERR!” entry, I suspect that NeroBurn() detected the out-of-space condition.

Several questions:

 - Should NeroBurn() return an error if the media fills?  Why isn't it returning?

 - Is there a specific call-back I should be using to handle this situation?  Can I call something to terminate the burn in the IdleCallback() function?

I could try to use the NeroEstimateTrackSize() function to determine if sufficient space exists prior to the burn, but I’d like to know what is exactly happening.

I’m using the latest NeroSDK API with Visual C++ 6.0.

Thanks in advance.

  • Anthony

#2

Hallo,

I have sometimes a similar problem. In my case NeroBurn() seems to burn all data but not finish. The CD-Writer LED blinks forever and NeroBurn does not return. I am looking for a solution for this problem but have not found it jet.

To your last question:
You can abort the burn process in the IdleCallback() function by return TRUE instead of FALSE (see also NeroAPI6.3.1.4.pdf chapter 6.8.1 page 33)

Bye,

Michael


#3

Hi Michael,

Yes - I could return TRUE in the idleCallback() - the problem is knowing if I have to return it. I’d have to query the API to determine if it’s in the frozen state.

For your situation, are you seeing the problem for those burn operations that fill the media?

  • Anthony

#4

Yes - I could return TRUE in the idleCallback() - the problem is knowing if I have to return it. I’d have to query the API to determine if it’s in the frozen state.

I don’t know how to determine this. Maybe it is possible with the progresscallback. If 100% reached then abort by callback return value. But I don’t try it jet. Please report if you try this and it works.

Maybe Nero introduce a NeroGetFrozenState() in the next NeroSDK release :wink:

For your situation, are you seeing the problem for those burn operations that fill the media?

The problem occurs only sometimes but not very often and I don’t determine in which cases it occur. But normally I calculate the size of data to be written before burn start. And I start only if I think it would be enough space. Maybe this calculation is wrong in the cases which raise the problem. I will check it the next time the problem occurs. It could also have a totaly other reason. I don’t know. (As far as I remember the cd was succesful written and readable after reboot (which was the only way to access cd drive again))

Michael


#5

In the absence of a reply from someone at Ahead Software, I suspect that I’ll have to follow your lead, Michael, in determining the amount of free space available through the NeroEstimateTrackSize() call, so as to never allow a situation where the user will attempt to burn more data on the media than is possible. Are you using the NETS_EXACT_SIZE flag in the dwFlags parameter to the call?

  • Anthony

#6

I don’t use NeroEstimateTrackSize() because this part of code was written as Nero 5.5 was actual and there was no such function (NeroEstimateTrackSize() was introduce by Nero 6.0.0.14) and I did not update this part of my code. I calculate the size manually by going through the NERO_ISO_ITEM tree and sum up the size element of the structure. But today I would use NeroEstimateTrackSize() of course. I think with NETS_EXACT_SIZE flag you should the most accurate size.

Michael