First, Thanks for all the help !
I've been trying for the last week to put some sort of rational around the problem. I wrote a minimal application that would allocate memory and temp space in 1 meg blocks and then try and play a video. These are the limits I came up with on the different platforms I have. These numbers are approximated because I can't really come up with an exact allocation. From this you can see why the 3100x has problems, it has a playback limit 20 meg less than a Roku or Roku 1.
I wish the memory and temp files were separate but they are allocated out of the same memory pool. So you allocate from one and the space is removed from the other. Also it appears that the video handler with buffers takes over 80 Meg. I did try the Roku 3 with a mix of 100 meg on tmp:/ and 100 meg of memory and that worked fine but you go much over on either one and the video falters and fails.
To find the max limits, I just kept allocating until the file write failed or in the case of memory, Roku crashed.
Tmp:/ and Memory Limits
* File Space
Max tmp:/ Video Plays but anything > and Video becomes unstable or Roku Crashes
N1000 100,000,000 57,000,000
2100x 100,000,000 52,000,000
3100x 86,000,000 33,000,000
4100x 193,000,000 193,000,000
* Memory
Max Allocate
N1000 142,000,000 53,000,000
2100x 139,000,000 52,000,000
3100x 125,000,000 33,000,000
4100x 334,000,000 220,000,000
To fix my problem, I had to optimize some code, change a lot of arrays that were allocated with a static size to dynamic and remove a couple of test elements to get the package size down.
But still, I don't think the video player needs 10 minutes worth of data.
Also why are we caching a memory only device ? Like moving data from your right hand to the left, what's the point ? That's also wasting a lot of data space for cache blocks.