2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.Diagnostics;
20 namespace Tizen.Multimedia
23 /// Represents a video plane for the <see cref="MediaPacket"/>.
24 /// This class is used if and only if the format of the packet is the raw video.
26 public class MediaPacketVideoPlane
28 private readonly MediaPacket _packet;
29 private readonly int _strideWidth;
30 private readonly int _strideHeight;
31 private readonly IMediaBuffer _buffer;
33 internal MediaPacketVideoPlane(MediaPacket packet, int index)
35 Debug.Assert(packet != null, "The packet is null!");
36 Debug.Assert(!packet.IsDisposed, "Packet is already disposed!");
37 Debug.Assert(index >= 0, "Video plane index must not be negative!");
41 int ret = Interop.MediaPacket.GetVideoStrideWidth(packet.GetHandle(), index, out _strideWidth);
42 MultimediaDebug.AssertNoError(ret);
44 ret = Interop.MediaPacket.GetVideoStrideHeight(packet.GetHandle(), index, out _strideHeight);
45 MultimediaDebug.AssertNoError(ret);
47 Debug.Assert(_strideWidth >= 0 && _strideHeight >= 0, "size must not be negative!");
50 ret = Interop.MediaPacket.GetVideoPlaneData(packet.GetHandle(), index, out dataHandle);
51 MultimediaDebug.AssertNoError(ret);
53 Debug.Assert(dataHandle != IntPtr.Zero, "Data handle is invalid!");
55 _buffer = new DependentMediaBuffer(packet, dataHandle, _strideWidth * _strideHeight);
59 /// Gets the buffer of the current video plane.
61 /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer has already been disposed of.</exception>
62 public IMediaBuffer Buffer
66 _packet.EnsureReadableState();
72 /// Gets the stride width of the current video plane.
74 /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer has already been disposed of.</exception>
75 public int StrideWidth
79 _packet.EnsureReadableState();
85 /// Gets the stride height of the current video plane.
87 /// <exception cref="ObjectDisposedException">The MediaPacket that owns the current buffer has already been disposed of.</exception>
88 public int StrideHeight
92 _packet.EnsureReadableState();