Monday, December 3, 2012

WP7 RGBA MediaStreamSource immediately closed - high resolution

WP7 RGBA MediaStreamSource immediately closed - high resolution

I am trying to get my MediaStreamSource to work on Windows Phone 7.1. For smaller resolutions like 256*256 or 512*512 it works but at some resolution it is Closed immediately after I called ReportOpenMediaCompleted. I don't get any Exceptions or such.

Here is my code:

public class BitmapStreamSource : MediaStreamSource {     MediaStreamDescription bitmapMediaStream;     const int width = 1024;     const int height = 1024;       protected override void OpenMediaAsync()     {         Dictionary<MediaSourceAttributesKeys, string> mediaStreamAttributes;          List<MediaStreamDescription> availableMediaStreams;         Dictionary<MediaStreamAttributeKeys, string> bitmapStreamAttributes;           mediaStreamAttributes = new Dictionary<MediaSourceAttributesKeys, string>(2);         mediaStreamAttributes[MediaSourceAttributesKeys.CanSeek] = false.ToString();         mediaStreamAttributes[MediaSourceAttributesKeys.Duration] = "-1";           bitmapStreamAttributes = new Dictionary<MediaStreamAttributeKeys,string>(3);         bitmapStreamAttributes[MediaStreamAttributeKeys.VideoFourCC]= "RGBA";         bitmapStreamAttributes[MediaStreamAttributeKeys.Width]= width.ToString();         bitmapStreamAttributes[MediaStreamAttributeKeys.Height] = height.ToString();          bitmapMediaStream = new MediaStreamDescription(MediaStreamType.Video, bitmapStreamAttributes);         availableMediaStreams = new List<MediaStreamDescription>(1);         availableMediaStreams.Add(bitmapMediaStream);           ReportOpenMediaCompleted(mediaStreamAttributes, availableMediaStreams);     }      protected override void SeekAsync(long seekToTime)     {         ReportSeekCompleted(seekToTime);     }      int sampleCount = 0;     protected override void GetSampleAsync(MediaStreamType mediaStreamType)     {             int pixel = width * height;             var buffer = new byte[pixel * 4];              for (int i = 0; i < pixel; i++)             {                 byte value = (byte)((i + sampleCount) % 256);                  var k = i * 4;                 //buffer[k] = 255; // B                 buffer[k + 1] = value; // G                 buffer[k + 2] = 255; // R                 //buffer[k + 3] = value; // A             }               var stream = new MemoryStream(buffer);              var keys = new Dictionary<MediaSampleAttributeKeys, string>();             var sample = new MediaStreamSample(bitmapMediaStream, stream, 0, buffer.Length, 0, keys);              sampleCount++;             ReportGetSampleCompleted(sample);     }      protected override void CloseMedia()     {         Debug.WriteLine("CloseMedia()");     }      protected override void GetDiagnosticAsync(MediaStreamSourceDiagnosticKind diagnosticKind)     {         throw new NotImplementedException();     }      protected override void SwitchMediaStreamAsync(MediaStreamDescription mediaStreamDescription)     {         throw new NotImplementedException();     } } 

Answers & Comments...




No comments:

Post a Comment

Send us your comment related to the topic mentioned on the blog