source: svn/trunk/newcon3bcm2_21bu/magnum/commonutils/xdm/bxdm_picture.h @ 15

Last change on this file since 15 was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
  • Property svn:executable set to *
File size: 30.0 KB
Line 
1/***************************************************************************
2 *     Copyright (c) 2003-2012, Broadcom Corporation
3 *     All Rights Reserved
4 *     Confidential Property of Broadcom Corporation
5 *
6 *  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE
7 *  AGREEMENT  BETWEEN THE USER AND BROADCOM.  YOU HAVE NO RIGHT TO USE OR
8 *  EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9 *
10 * $brcm_Workfile: bxdm_picture.h $
11 * $brcm_Revision: Hydra_Software_Devel/14 $
12 * $brcm_Date: 3/16/12 11:56a $
13 *
14 * [File Description:]
15 *
16 * Revision History:
17 *
18 * $brcm_Log: /magnum/commonutils/xdm/bxdm_picture.h $
19 *
20 * Hydra_Software_Devel/14   3/16/12 11:56a btosi
21 * SW7425-2536: added support for displayInterruptStatus_isr
22 *
23 * Hydra_Software_Devel/13   2/10/12 11:17a btosi
24 * SW7425-2247: add support for bar data
25 *
26 * Hydra_Software_Devel/12   2/9/12 1:19p btosi
27 * SW7425-2180: added support for the MFD fields ePxlFmt and ulRowStride
28 *
29 * Hydra_Software_Devel/11   1/10/12 1:32p btosi
30 * SW7425-1001: added support for bLast flag
31 *
32 * Hydra_Software_Devel/10   2/17/11 2:01p btosi
33 * SW7405-5135: if the SEI arrangement_cancel flag is set, set  both the
34 * Unified and MFD picture orientations to 2D
35 *
36 * Hydra_Software_Devel/9   10/29/10 10:44a btosi
37 * SW7422-72: merging 3D changes to mainline
38 *
39 * Hydra_Software_Devel/SW7422-72/2   10/29/10 10:33a btosi
40 * SW7422-72: added uiFrameNum to BXDM_Picture_3D
41 *
42 * Hydra_Software_Devel/SW7422-72/1   10/19/10 9:08a btosi
43 * SW7422-72: expanded support for 3D
44 *
45 * Hydra_Software_Devel/7   10/1/10 2:49p btosi
46 * SWDEPRECATED-1003: added support for bTreatAsSingleElement
47 *
48 * Hydra_Software_Devel/6   7/29/10 11:22a btosi
49 * SW7405-4560: added support for the SEI "new message" flag.
50 *
51 * Hydra_Software_Devel/5   7/1/10 3:54p btosi
52 * SW7405-4573: changed bool's to uint32_t's in the unified picture
53 * structure
54 *
55 * Hydra_Software_Devel/4   5/7/10 3:48p btosi
56 * SW7405-3996: added BXDM_Picture_ExtensionType_eNone
57 *
58 * Hydra_Software_Devel/3   5/4/10 10:46a btosi
59 * SW7405-3996: added support for new SEI message format
60 *
61 * Hydra_Software_Devel/SW7405-3996/1   4/1/10 4:01p btosi
62 * SW7405-3996: first cut at generating picture extension callback from
63 * SEI data
64 *
65 * Hydra_Software_Devel/2   2/17/10 4:59p nilesh
66 * SW7405-2993: Initial Documentation
67 *
68 * Hydra_Software_Devel/1   2/16/10 10:50a nilesh
69 * SW7405-2993: Initial XDM version
70 *
71 ***************************************************************************/
72
73#ifndef BXDM_PICTURE_H_
74#define BXDM_PICTURE_H_
75
76#include "bavc.h"
77#include "bfmt.h"
78#include "bmem.h"
79
80#ifdef __cplusplus
81extern "C" {
82#endif
83#if 0
84}
85#endif
86
87/* BXDM_Picture_PullDown -
88 *
89 * BXDM_Picture_PullDown indicates how the picture is intended to be displayed.
90 *
91 * Interlaced pulldowns (TB, BT, BTB, TBT) explicitly indicate the expected display
92 * order of the fields.
93 *
94 * Dangling pulldown (T,B) indicate that there's only one valid field on the picture.
95 *
96 * Progressive pulldown (Fx1,Fx2,Fx3,Fx4) indicate that the content is progressive
97 * but is intended to be treated as 1,2,3 or 4 frames of video respectively.  I.e.
98 * An Fx2 picture is treated similar to having two Fx1 pictures in a row.
99 *
100 * The pulldown combined with the frame rate is used for PTS interpolation of pictures
101 * that do not have coded PTS values.  E.g. suppose the content is progressive and has
102 * a coded frame rate = 30 frames/sec.  This corresponds to a deltaPTS between *frames*
103 * of 1500 ticks (on a 45 Khz timebase).  The interpolated PTS values would be different
104 * if between pulldown=Fx1 and pulldown=Fx2
105 *
106 *          |           | Pulldown=Fx1 | Pulldown=Fx2 |
107 *          | Coded PTS |  Interp PTS  |  Interp PTS  |
108 *          +-----------+--------------+--------------+
109 *   UPB[0] |         0 |           -- |           -- |
110 *   UPB[1] |        -- |         1500 |         3000 |
111 *   UPB[2] |        -- |         3000 |         6000 |
112 *   UPB[3] |        -- |         4500 |         9000 |
113 *
114 */
115typedef enum BXDM_Picture_PullDown
116{
117   BXDM_Picture_PullDown_eTop = 1,
118   BXDM_Picture_PullDown_eBottom = 2,
119   BXDM_Picture_PullDown_eTopBottom = 3,
120   BXDM_Picture_PullDown_eBottomTop = 4,
121   BXDM_Picture_PullDown_eTopBottomTop = 5,
122   BXDM_Picture_PullDown_eBottomTopBottom = 6,
123   BXDM_Picture_PullDown_eFrameX2 = 7,
124   BXDM_Picture_PullDown_eFrameX3 = 8,
125   BXDM_Picture_PullDown_eFrameX1 = 9,
126   BXDM_Picture_PullDown_eFrameX4 = 10,
127
128   BXDM_Picture_PullDown_eMax
129} BXDM_Picture_PullDown;
130
131/* BXDM_Picture_SourceFormat -
132 *
133 * BXDM_Picture_SourceFormat indicates if the original source content was *captured*
134 * in an interlaced or progressive manner.  The SourceFormat matters when the content
135 * is interlaced coded and there is more than 1 field in the picture
136 * (e.g. pulldown = TB,BT,BTB,TBT).  If the SourceFormat=eProgressive, then XDM can
137 * handle picture repeats with better quality than if the SourceFormat=eInterlaced.
138 *
139 * Content with progressive pulldown (Fx1,Fx2,Fx3,Fx4) should always have SourceFormat=eProgressive
140 *
141 * Interlaced coded 3:2 film content should have SourceFormat=eProgressive
142 *
143 * SourceFormat=eUnknown should be used if the nature of the source content is unknown.
144 */
145typedef enum BXDM_Picture_SourceFormat
146{
147   BXDM_Picture_SourceFormat_eUnknown,
148   BXDM_Picture_SourceFormat_eInterlaced,
149   BXDM_Picture_SourceFormat_eProgressive,
150
151   BXDM_Picture_SourceFormat_eMax
152} BXDM_Picture_SourceFormat;
153
154typedef struct BXDM_Picture_Dimension
155{
156   uint32_t uiWidth;
157   uint32_t uiHeight;
158
159   uint32_t bValid;
160} BXDM_Picture_Dimension;
161
162typedef struct BXDM_Picture_ChromaLocation
163{
164   uint32_t bValid;
165   BAVC_ChromaLocation eMpegType;
166} BXDM_Picture_ChromaLocation;
167
168typedef struct BXDM_Picture_QualifiedInt32
169{
170      uint32_t bValid;
171      int32_t iValue;
172} BXDM_Picture_QualifiedInt32;
173
174/* For  SW7425-2181 */
175typedef struct BXDM_Pixture_PixelFormat
176{
177   uint32_t     bValid;
178   BPXL_Format  ePixelFormat;
179}  BXDM_Pixture_PixelFormat;
180
181typedef struct BXDM_Picture_BufferInfo
182{
183   BMEM_Handle hHeap;                  /* See BAVC_MFD_Picture.hHeap in bavc.h */
184   void *pLumaBufferVirtualAddress;    /* See BAVC_MFD_Picture.pLuminanceFrameBufferAddress in bavc.h */
185   void *pChromaBufferVirtualAddress;  /* See BAVC_MFD_Picture.pChrominanceFrameBufferAddress in bavc.h */
186
187   BXDM_Picture_Dimension stSource;    /* This contains the coded dimensions of the picture */
188
189   BXDM_Picture_Dimension stDisplay;   /* OPTIONAL: This contains the intended display dimensions of the picture
190                                        * If specified, XDM/Display will scale the source to the specified display
191                                        * dimensions before applying any other (e.g. aspect ratio) scaling.  This is
192                                        * used for content whose coded dimensions can change on-the-fly (e.g. to meet
193                                        * bandwidth constraints) but the original source dimensions are fixed.
194                                        */
195
196   BAVC_StripeWidth eStripeWidth;      /* See BAVC_MFD_Picture.eStripeWidth in bavc.h */
197   uint32_t uiLumaStripeHeight;        /* This is the stripe height of the luma buffer.
198                                        * The luma stripe height will be greater or equal to the
199                                        * source height
200                                        */
201   uint32_t uiChromaStripeHeight;      /* This is the stripe height of the chroma buffer.
202                                        * The chroma stripe height will be greater or equal to the
203                                        * source height/2
204                                        */
205
206   BXDM_Picture_ChromaLocation stChromaLocation[3]; /* See BAVC_MFD_Picture.eMpegType in bavc.h
207                                                     * The chroma location can be specified independently
208                                                     * for the field that is being displayed.  If the chroma
209                                                     * location is the same for all fields, then all 3 entries should be
210                                                     * set to the same value. Index is BAVC_Polarity enum.
211                                                     */
212
213   BAVC_YCbCrType eYCbCrType;                       /* See BAVC_MFD_Picture.eYCbCrType in bavc.h */
214
215   BXDM_Picture_PullDown ePulldown;                 /* See BXDM_Picture_PullDown documentation */
216   BXDM_Picture_SourceFormat eSourceFormat;         /* See BXDM_Picture_SourceFormat documentation */
217
218   BXDM_Pixture_PixelFormat   stPixelFormat;       /* SW7425-2181: see bpxl.h for defintions */
219   uint32_t                   uiRowStride;         /* SW7425-2181: stride of surface when ePixelFormat is a 422 format */
220
221   uint32_t bValid;                                 /* False for a picture that doesn't contain actual picture buffers
222                                                     * E.g. dummy picture used to forward a marker from the decoder
223                                                     */
224} BXDM_Picture_BufferInfo;
225
226typedef struct BXDM_Picture_PictureOrderCount
227{
228   uint32_t uiPictureId;
229   BXDM_Picture_QualifiedInt32 stPictureOrderCount[3]; /* BAVC_Polarity is used as index */
230
231   uint32_t bValid;
232} BXDM_Picture_PictureOrderCount;
233
234typedef struct BXDM_Picture_PTS
235{
236   uint32_t uiValue; /* For non-DirecTV protocols, in 45 Khz clock ticks.
237                      * For DirecTV protocols, in 27 Mhz clock ticks.
238                      */
239   uint32_t bValid;
240} BXDM_Picture_PTS;
241
242typedef struct BXDM_Picture_Tag
243{
244   uint32_t uiValue;      /* Flag that arrives in ITB associated with BTP command 0xD.
245                           * This flag is STICKY in subsequent pictures */
246   uint32_t bValid;
247   uint32_t bNewTagAvailable; /* True if the uiValue indicates a new picture tag ITB entry */
248} BXDM_Picture_Tag;
249
250typedef struct BXDM_Picture_Marker
251{
252   uint32_t uiValue;      /* Flag that arrives in ITB associated with BTP command 0xC.
253                           * A change in value indicates a new marker has arrived.
254                           * This flag is STICKY in subsequent pictures
255                           */
256   uint32_t bValid;
257} BXDM_Picture_Marker;
258
259/* BXDM_Picture_Coding -
260 *
261 * BXDM_Picture_Coding indicates the coding of the picture.
262 */
263typedef enum BXDM_Picture_Coding
264{
265   BXDM_Picture_Coding_eUnknown,
266   BXDM_Picture_Coding_eI,
267   BXDM_Picture_Coding_eP,
268   BXDM_Picture_Coding_eB,
269
270   BXDM_Picture_Coding_eMax
271} BXDM_Picture_Coding;
272
273/* BXDM_Picture_Sequence -
274 *
275 * BXDM_Picture_Sequence indicates the interlaced/progressive
276 * nature of a sequence of pictures.
277 */
278typedef enum BXDM_Picture_Sequence
279{
280      BXDM_Picture_Sequence_eUnknown,
281      BXDM_Picture_Sequence_eInterlaced,
282      BXDM_Picture_Sequence_eProgressive,
283
284      BXDM_Picture_Sequence_eMax
285} BXDM_Picture_Sequence;
286
287typedef struct BXDM_Picture_Type
288{
289   BXDM_Picture_Coding eCoding;
290   BXDM_Picture_Sequence eSequence;
291   uint32_t bReference;         /* True if this picture is a reference picture */
292   uint32_t bRandomAccessPoint; /* True if this picture is a Random Access Point */
293   uint32_t bLowDelay;          /* True if this picture is from a low delay stream (See MPEG-2 Sequence Extension) */
294
295   uint32_t bLastPicture;       /* SW7425-1001: effectively an EOS flag.  Currently defined to
296                                 * only be delivered with a "picture-less" PPB. */
297} BXDM_Picture_Type;
298
299typedef struct BXDM_Picture_Error
300{
301   uint32_t bThisPicture;    /* This picture contains an error */
302   uint32_t bPreviousRefPic; /* this picture was derived from a picture with an error
303                          * it may or may not contain an error
304                          */
305} BXDM_Picture_Error;
306
307typedef struct BXDM_Picture_Overscan
308{
309   uint32_t bOverscanAppropriate; /* True if horizontal overscan region should be
310                                   * cropped.  False if horizontal overscan should
311                                   * NOT be cropped
312                                   */
313                                   
314   uint32_t bValid;               /* True if PPB specified overscan appropriate flag */
315} BXDM_Picture_Overscan;
316
317typedef struct BXDM_Picture_PCROffset
318{
319   uint32_t uiValue;          /* Value of PCR offset.  Always relative to the current STC value. */
320   uint32_t bValid;           /* True if coded PCR offset exists */
321   uint32_t bDiscontinuity;   /* True if unmarked discontinuity was detected */
322} BXDM_Picture_PCROffset;
323
324typedef enum BXDM_Picture_Protocol_Level
325{
326   BXDM_Picture_Protocol_Level_eUnknown = 0,
327   BXDM_Picture_Protocol_Level_e00,
328   BXDM_Picture_Protocol_Level_e10,
329   BXDM_Picture_Protocol_Level_e1B,
330   BXDM_Picture_Protocol_Level_e11,
331   BXDM_Picture_Protocol_Level_e12,
332   BXDM_Picture_Protocol_Level_e13,
333   BXDM_Picture_Protocol_Level_e20,
334   BXDM_Picture_Protocol_Level_e21,
335   BXDM_Picture_Protocol_Level_e22,
336   BXDM_Picture_Protocol_Level_e30,
337   BXDM_Picture_Protocol_Level_e31,
338   BXDM_Picture_Protocol_Level_e32,
339   BXDM_Picture_Protocol_Level_e40,
340   BXDM_Picture_Protocol_Level_e41,
341   BXDM_Picture_Protocol_Level_e42,
342   BXDM_Picture_Protocol_Level_e50,
343   BXDM_Picture_Protocol_Level_e51,
344   BXDM_Picture_Protocol_Level_e60,
345   BXDM_Picture_Protocol_Level_e62,
346   BXDM_Picture_Protocol_Level_eLow,
347   BXDM_Picture_Protocol_Level_eMain,
348   BXDM_Picture_Protocol_Level_eHigh,
349   BXDM_Picture_Protocol_Level_eHigh1440,
350
351   BXDM_Picture_Protocol_Level_eMaxLevel
352} BXDM_Picture_Protocol_Level;
353
354typedef enum BXDM_Picture_Profile
355{
356   BXDM_Picture_Profile_eUnknown = 0,
357   BXDM_Picture_Profile_eSimple,
358   BXDM_Picture_Profile_eMain,
359   BXDM_Picture_Profile_eHigh,
360   BXDM_Picture_Profile_eAdavance,
361   BXDM_Picture_Profile_eJizhun,
362   BXDM_Picture_Profile_eSnrScalable,
363   BXDM_Picture_Profile_eSpatiallyScalable,
364   BXDM_Picture_Profile_eAdavanceSimple,
365   BXDM_Picture_Profile_eBaseline,
366
367   BXDM_Picture_Profile_eMaxProfile
368} BXDM_Picture_Profile;
369
370typedef struct BXDM_Picture_Protocol
371{
372   BAVC_VideoCompressionStd eProtocol; /* video protocol */
373   BXDM_Picture_Protocol_Level eLevel; /* video protocol level */
374   BXDM_Picture_Profile eProfile;      /* video protocol profile */
375} BXDM_Picture_Protocol;
376
377/* BXDM_Picture_VideoFormat -
378 *
379 * BXDM_Picture_VideoFormat is based on MPEG2 Sequence Display Extension video_format field
380 */
381typedef enum BXDM_Picture_VideoFormat
382{
383      BXDM_Picture_VideoFormat_eComponent,
384      BXDM_Picture_VideoFormat_ePAL,
385      BXDM_Picture_VideoFormat_eNTSC,
386      BXDM_Picture_VideoFormat_eSECAM,
387      BXDM_Picture_VideoFormat_eMAC,
388      BXDM_Picture_VideoFormat_eUnknown,
389      BXDM_Picture_VideoFormat_eReserved6,
390      BXDM_Picture_VideoFormat_eReserved7
391} BXDM_Picture_VideoFormat;
392
393/* BXDM_Picture_DisplayInfo -
394 *
395 * BXDM_Picture_DisplayInfo is based on the corresponding MPEG2 Sequence Display Extension fields
396 */
397typedef struct BXDM_Picture_DisplayInfo
398{
399   BAVC_MatrixCoefficients eMatrixCoefficients;
400   BAVC_ColorPrimaries eColorPrimaries;
401   BAVC_TransferCharacteristics eTransferCharacteristics;
402   BXDM_Picture_VideoFormat eVideoFormat;
403
404   uint32_t bValid;
405} BXDM_Picture_DisplayInfo;
406
407/* BXDM_Picture_AspectRatio -
408 *
409 * BXDM_Picture_AspectRatio specifies the Display Aspect Ratio (DAR) or
410 * the Sample Aspect Ratio (SAR).
411 */
412typedef struct BXDM_Picture_AspectRatio
413{
414   BFMT_AspectRatio eAspectRatio;
415   uint32_t uiSampleAspectRatioX; /* Valid only when eAspectRatio=eSar */
416   uint32_t uiSampleAspectRatioY; /* Valid only when eAspectRatio=eSar */
417
418   uint32_t bValid;
419} BXDM_Picture_AspectRatio;
420
421/* BXDM_Picture_PanScanVectorType -
422 *
423 * BXDM_Picture_PanScanVectorType indicates how the pan scan window is specified.
424 *
425 *    |----------- SW ------------|
426 *
427 *  - +---------------------------+
428 *  | |      -                    |
429 *  | |      |                    |
430 *  | |      V                    |
431 *    |      O                    |
432 *  S |      |                    |
433 *  H |      - |- W -|            |
434 *    ||- HO -|+-----+ -          |
435 *  | |        |xxxxx| |          |
436 *  | |        |xxxxx| H          |
437 *  | |        |xxxxx| |          |
438 *  | |        +-----+ -          |
439 *  - +---------------------------+
440 *
441 * **********************************************
442 *  BXDM_Picture_PanScanVectorType_eSourceWindow
443 * **********************************************
444 *
445 *  SW = Source Width (post-clip, post-overscan crop)
446 *  SH = Source Height (post-clip, post-overscan crop)
447 *  HO = BXDM_Picture_PanScanVector.iHertical >> 4
448 *  VO = BXDM_Picture_PanScanVector.iVertical >> 4
449 *  W  = BXDM_Picture_PanScanVector.uiWidth
450 *  H  = BXDM_Picture_PanScanVector.uiHeight
451 *  x  = Pan Scan Window
452 *
453 * ********************************************
454 *  BXDM_Picture_PanScanVectorType_eSourceCrop
455 * ********************************************
456 *
457 *  SW = Source Width (post-clip, post-overscan crop)
458 *  SH = Source Height (post-clip, post-overscan crop)
459 *  HO = BXDM_Picture_PanScanVector.iHertical >> 4
460 *  VO = BXDM_Picture_PanScanVector.iVertical >> 4
461 *  W  = (SW - BXDM_Picture_PanScanVector.uiWidth)
462 *  H  = (SH - BXDM_Picture_PanScanVector.uiHeight)
463 *  x  = Pan Scan Window
464 *
465 * ***********************************************
466 *  BXDM_Picture_PanScanVectorType_eDisplayWindow
467 * ***********************************************
468 *
469 *  SW = Source Width (post-clip, post-overscan crop)
470 *  SH = Source Height (post-clip, post-overscan crop)
471 *  DW = Display Width (See BXDM_Picture.BXDM_Picture_BufferInfo.stDisplay.uiWidth)
472 *  DH = Display Height (See BXDM_Picture.BXDM_Picture_BufferInfo.stDisplay.uiHeight)
473 *  HO = BXDM_Picture_PanScanVector.iHertical >> 4 * (SW/DW)
474 *  VO = BXDM_Picture_PanScanVector.iVertical >> 4 * (SH/DH)
475 *  W  = BXDM_Picture_PanScanVector.uiWidth * (SW/DW)
476 *  H  = BXDM_Picture_PanScanVector.uiHeight * (SH/DH)
477 *  x  = Pan Scan Window
478 *
479 */
480typedef enum BXDM_Picture_PanScanVectorType
481{
482      BXDM_Picture_PanScanVectorType_eSourceWindow,  /* Values indicate pan-scan window size/location relative to source size */
483      BXDM_Picture_PanScanVectorType_eSourceCrop,    /* Values indicate horizontal/vertical crop relative to source size */
484      BXDM_Picture_PanScanVectorType_eDisplayWindow, /* Values indicate pan-scan window size/location relative to display size */
485
486      BXDM_Picture_PanScanVectorType_eMax
487} BXDM_Picture_PanScanVectorType;
488
489typedef struct BXDM_Picture_PanScanVector
490{
491      int32_t iHorizontal; /* 1/16th pixel */
492      int32_t iVertical; /* 1/16th pixel */
493      uint32_t uiWidth;
494      uint32_t uiHeight;
495      BXDM_Picture_PanScanVectorType eType;
496} BXDM_Picture_PanScanVector;
497
498typedef struct BXDM_Picture_PanScan
499{
500   BXDM_Picture_PanScanVector stVector[3]; /* Indexed by displayed element based on pulldown.
501                                            *   | max vectors | pulldown |
502                                            *   |      1      |  T,B,F   |
503                                            *   |      2      |  TB,BT   |
504                                            *   |      3      |  TBT,BTB |
505                                            */
506   uint32_t uiCount;                       /* 0 indicates no pan-scan data present */
507} BXDM_Picture_PanScan;
508
509typedef struct BXDM_Picture_ActiveFormatDescription
510{
511   uint32_t uiValue;
512   uint32_t bValid;
513} BXDM_Picture_ActiveFormatDescription;
514
515/* SW7425-2247: support for bar data. */
516typedef struct BXDM_Picture_BarData
517{
518   BAVC_BarDataType  eBarDataType;        /* specify top/bottom or left/right data */
519   uint32_t          uiTopLeftBarValue;   /* either the top or left bar data value */
520   uint32_t          uiBotRightBarValue;  /* either the bottom or right bar data value */
521}  BXDM_Picture_BarData;
522
523typedef struct BXDM_Picture_GopTimeCode
524{
525     uint32_t uiHours;    /* The hours field */
526     uint32_t uiMinutes;  /* The minutes field */
527     uint32_t uiSeconds;  /* The seconds field */
528     uint32_t uiPictures; /* The pictures (frames) field */
529     uint32_t bValid;     /* Valid timecode in input stream */
530} BXDM_Picture_GopTimeCode;
531
532typedef struct BXDM_Picture_Rate
533{
534      uint16_t uiNumerator;   /* 0 indicates unknown rate */
535      uint16_t uiDenominator; /* 0 indicates unknown rate */
536} BXDM_Picture_Rate;
537
538typedef enum BXDM_Picture_FrameRateType
539{
540      BXDM_Picture_FrameRateType_eUnknown,
541      BXDM_Picture_FrameRateType_eFixed,
542      BXDM_Picture_FrameRateType_eVariable,
543
544      BXDM_Picture_FrameRateType_eMax
545} BXDM_Picture_FrameRateType;
546
547typedef struct BXDM_Picture_FrameRate
548{
549      BXDM_Picture_Rate stRate;         /* Coded frame rate. */
550      BXDM_Picture_FrameRateType eType;
551      BXDM_Picture_Rate stExtension;    /* Multiplier for coded frame rate. 0 indicates no multiplier. */
552
553      uint32_t bValid;
554} BXDM_Picture_FrameRate;
555
556/* SWDEPRECATED-1003: */
557typedef struct BXDM_Picture_FrameRateOverride
558{
559   uint32_t bValid;
560   BXDM_Picture_Rate stRate;         /* Coded frame rate. */
561   bool bTreatAsSingleElement;  /* assume FrameX1 for all pictures when calculating the predicted PTS
562                                   value of the next picture. */
563} BXDM_Picture_FrameRateOverride;
564
565typedef struct BXDM_Picture_DigitalNoiseReduction
566{
567   uint32_t uiAdjustedQuantizationParameter;
568   uint32_t bValid;
569} BXDM_Picture_DigitalNoiseReduction;
570
571typedef struct BXDM_Picture_RangeRemapping
572{
573   uint32_t uiLuma;
574   uint32_t uiChroma;
575   uint32_t bValid;
576} BXDM_Picture_RangeRemapping;
577
578/* BXDM_Picture_Clipping -
579 *
580 * BXDM_Picture_Clipping specifies the portion of the coded source buffer
581 * that needs to be cropped before displaying.
582 */
583typedef struct BXDM_Picture_Clipping
584{
585      uint32_t uiTop;
586      uint32_t uiBottom;
587      uint32_t uiLeft;
588      uint32_t uiRight;
589
590      uint32_t bValid;
591} BXDM_Picture_Clipping;
592
593/* Support for picture extension data;
594 * MVC graphics offset, SEI messages....
595 */
596
597
598/*
599 * MVC graphics offset.
600 */
601typedef struct BXDM_Picture_Extension_BluRay3DGraphicsOffset
602{
603   uint32_t uiCount;
604   uint8_t * puiOffsetData;
605
606} BXDM_Picture_Extension_BluRay3DGraphicsOffset;
607
608
609/*
610 * SEI Frame Packing.
611 */
612
613/*
614 * Bit definitions for the 'uiFlags' element in BXDM_Picture_Extension_SEIFramePacking structure.
615 *
616 * "arrangement_cancel":
617 * The H264 specification was not completely rigorous in the definition of this bit.  We are assuming
618 * that if this bit is set, none of the other fields in the message are valid.   This then implies
619 * that the picture is a 2D picture.  The orientation will be set to "2D" in both the Unified and
620 * MFD picture structures. (SW7405-5135)
621 */ 
622#define BXDM_PICTURE_SEI_FRAMEPACK_ARRANGEMENT_CANCEL_FLAG           (0x00000001)      /* if set, implies 2D */
623#define BXDM_PICTURE_SEI_FRAMEPACK_QUINCUNX_SAMPLING_FLAG            (0x00000002)
624#define BXDM_PICTURE_SEI_FRAMEPACK_SPATIAL_FLIPPING_FLAG             (0x00000004)
625#define BXDM_PICTURE_SEI_FRAMEPACK_FRAME0_FLIPPED_FLAG               (0x00000008)
626#define BXDM_PICTURE_SEI_FRAMEPACK_FIELD_VIEWS_FLAG                  (0x00000010)
627#define BXDM_PICTURE_SEI_FRAMEPACK_CURRENT_FRAME_IS_FRAME0_FLAG      (0x00000020)
628#define BXDM_PICTURE_SEI_FRAMEPACK_FRAME0_SELF_CONTAINED_FLAG        (0x00000040)
629#define BXDM_PICTURE_SEI_FRAMEPACK_FRAME1_SELF_CONTAINED_FLAG        (0x00000080)
630#define BXDM_PICTURE_SEI_FRAMEPACK_ARRANGEMENT_EXTENSION_FLAG        (0x00000100)
631
632/*
633 * The SEI message as delivered by AVD.
634 */
635typedef struct BXDM_Picture_Extension_SEIFramePacking
636{
637   uint32_t uiFlags;
638   uint32_t uiFramePackingArrangementId;
639   uint32_t uiFramePackingArrangementType;
640   uint32_t uiContentInterpretationType;
641   uint32_t uiFrame0GridPositionX;
642   uint32_t uiFrame0GridPositionY;
643   uint32_t uiFrame1GridPositionX;
644   uint32_t uiFrame1GridPositionY;
645   uint32_t uiFramePackingArrangementReservedByte;
646   uint32_t uiFramePackingArrangementRepetitionPeriod;
647
648} BXDM_Picture_Extension_SEIFramePacking;
649
650/* A wrapper around the preceding structure to allow additional information to be
651 * passed back to the application.
652 */
653typedef struct BXDM_Picture_Extension_SEIMsg_FramePacking
654{
655   uint32_t uiFlags;
656   BXDM_Picture_Extension_SEIFramePacking * pstSeiData;
657
658} BXDM_Picture_Extension_SEIMsg_FramePacking;
659
660/* Bit definitions for the 'uiFlags' element in the preceding
661 * BXDM_Picture_Extension_SEIMsg_FramePacking structure
662 */
663
664/* SW7405-4560: Set when the SEI data is delivered for the first time.
665 * Cleared when the message is repeated with the same data.
666 */
667#define BXDM_PICTURE_SEIMSG_FRAMEPACK_NEW_MESSAGE_FLAG    0x00000001
668
669/*
670 * Message types.
671 */
672typedef enum BXDM_Picture_ExtensionType
673{
674   BXDM_Picture_ExtensionType_eNone=0,
675   BXDM_Picture_ExtensionType_eBluRay3DGraphicsOffset,
676   BXDM_Picture_ExtensionType_eSEIFramePacking,          /* DEPRECATED: SW7405-4560: use BXDM_Picture_ExtensionType_eSEIMsg_FramePacking */
677   BXDM_Picture_ExtensionType_eSEIMsg_FramePacking,
678
679   /* New extension types should be added ABOVE this line */
680   BXDM_Picture_ExtensionType_eMax
681
682} BXDM_Picture_ExtensionType;
683
684/*
685 * Wrapper for data passed in the extension data callback.
686 */
687typedef struct BXDM_Picture_ExtensionData
688{
689   BXDM_Picture_ExtensionType eType;
690
691   union
692   {
693      BXDM_Picture_Extension_BluRay3DGraphicsOffset   stBluRay3DGraphicsOffset;
694      BXDM_Picture_Extension_SEIFramePacking *        pstSEIFramePacking; /* DEPRECATED: SW7405-4560: use stSEIFramePacking */
695      BXDM_Picture_Extension_SEIMsg_FramePacking      stSEIFramePacking;
696
697      /* Add new extension data structures here */
698   } data;
699
700} BXDM_Picture_ExtensionData;
701
702
703/*
704 * BXDM_Picture_ExtensionInfo, basically a per picture array of messages.
705 */
706#define BXDM_MAX_PICTURE_EXTENSION_INFO   4
707
708typedef struct BXDM_Picture_ExtensionInfo
709{
710   /* Number of entries in the following array. */
711   uint32_t uiCount;
712
713   BXDM_Picture_ExtensionData  astExtensionData[BXDM_MAX_PICTURE_EXTENSION_INFO];
714
715   /* When dealing with multi buffer content (MVC and other full frame 3D) will point
716    * to the extension data of the second buffer.
717    */
718   struct BXDM_Picture_ExtensionInfo *pNext;
719
720} BXDM_Picture_ExtensionInfo;
721
722
723/*
724 * Picture stats.
725 */
726typedef struct BXDM_Picture_Stats_MacroBlockCount
727{
728      uint32_t uiTotal;
729      uint32_t uiIntraCoded;
730      uint32_t uiInterCoded;
731
732      uint32_t bValid;
733} BXDM_Picture_Stats_MacroBlockCount;
734
735typedef struct BXDM_Picture_Stats
736{
737      BXDM_Picture_Stats_MacroBlockCount stMacroBlockCount;
738      uint32_t uiBitRate;           /* in units of 400 bits/second (Based on MPEG2 Sequence Header) */
739      uint32_t uiDeltaPicturesSeen; /* Indicates the total number of pictures seen by the decoder since the previous picture.  Usually this is 1.  Values larger than 1 indicate the decoder may have dropped pictures in the middle (e.g. I only mode).  0 indicates unknown. */
740} BXDM_Picture_Stats;
741
742/*
743 * 3D support
744 */
745
746#define BXDM_PICTURE_MAX_3D_BUFFERS 2
747
748/* BXDM_Picture_Orientation -
749 *
750 * indicates if this is a 2D or 3D picture.  In addition if 3D,
751 * the frame packing and orientation.
752 */
753typedef enum BXDM_Picture_Orientation
754{
755   BXDM_Picture_Orientation_e2D = 0,
756   BXDM_Picture_Orientation_e3D_Checker,
757   BXDM_Picture_Orientation_e3D_Column,
758   BXDM_Picture_Orientation_e3D_Row,
759   BXDM_Picture_Orientation_e3D_SideBySide,
760   BXDM_Picture_Orientation_e3D_TopBottom,
761   BXDM_Picture_Orientation_e3D_FullFrame,
762
763   BXDM_Picture_Orientation_eMax
764} BXDM_Picture_Orientation;
765
766/* BXDM_Picture_FrameRelationship -
767 *
768 * when 3D, indicates if frame 0 is the left or right image
769 */
770typedef enum BXDM_Picture_FrameRelationship
771{
772   BXDM_Picture_FrameRelationship_eUnknown = 0,
773   BXDM_Picture_FrameRelationship_eFrame0Left,
774   BXDM_Picture_FrameRelationship_eFrame0Right,
775   
776   BXDM_Picture_FrameRelationship_eMax
777} BXDM_Picture_FrameRelationship;
778
779
780
781typedef struct BXDM_Picture_3D
782{
783   BXDM_Picture_Orientation         eOrientation;
784   BXDM_Picture_FrameRelationship   eFrameRelationship;
785   uint32_t                         uiFrameNum;          /* 0 for frame 0, 1 for frame 1*/
786
787} BXDM_Picture_3D;
788
789
790
791/*
792 *  BXDM_Picture
793 */
794typedef struct BXDM_Picture
795{
796   /************/
797   /* Required */
798   /************/
799
800   /* Buffer Parameters */
801   BXDM_Picture_BufferInfo stBufferInfo;
802
803
804   /************/
805   /* Optional */
806   /************/
807
808   /* Source Parameters */
809   BXDM_Picture_Clipping stClipping;
810   BXDM_Picture_Protocol stProtocol;
811   BXDM_Picture_Type stPictureType;
812   BXDM_Picture_Error stError;
813
814   /* Timing Parameters */
815   BXDM_Picture_PictureOrderCount stPOC;
816   BXDM_Picture_FrameRate stFrameRate;
817   BXDM_Picture_PTS stPTS;
818   BXDM_Picture_PCROffset stPCROffset;
819   BXDM_Picture_GopTimeCode stGOPTimeCode;
820   BXDM_Picture_Tag stPictureTag;
821   BXDM_Picture_Marker stPictureMarker;
822
823   /* Display Parameters */
824   BXDM_Picture_Overscan stOverscan;
825   BXDM_Picture_DisplayInfo stDisplayInfo;
826   BXDM_Picture_PanScan stPanScan;
827   BXDM_Picture_AspectRatio stAspectRatio;
828   BXDM_Picture_DigitalNoiseReduction stDigitalNoiseReduction;
829   BXDM_Picture_RangeRemapping stRangeRemapping;
830   BXDM_Picture_ActiveFormatDescription stActiveFormatDescription;
831
832   BXDM_Picture_BarData stBarData;   /* SW7425-2247: support for bar data. */
833
834   /* Extension Data */
835   BXDM_Picture_ExtensionInfo stExtensionInfo;
836   BXDM_Picture_Stats stStats;
837
838   /* 3D */
839   BXDM_Picture_3D st3D;
840
841   uint32_t uiSerialNumber;
842
843   void *pPrivateContext; /* Private context for decoder use */
844
845   void *pNextPicture; /* Linked list of dependent unified pictures */
846} BXDM_Picture;
847
848/*
849 * SW7425-2536: added to support "drop at decode" for non-AVD decoders.
850 */
851typedef struct BXDM_PictureProvider_PictureInfo
852{
853   /* Indicates that the information is this structure is valid. That might
854    * not be the case if a picture has not been selected for display.
855    */
856   bool bValid;
857
858   /* STC on this vsync, includes the STC jitter correction and PCR offsets */
859   uint32_t uiEffectiveStc;
860
861   /* PTS of the selected element, includes the PTS jitter correction
862    * and PTS (display) offset.
863    */   
864   uint32_t uiEffectivePts;
865
866   /* Picture was selected in TSM mode (as opposed to vsync). For the purposes
867    * of calculating a drop count, uiEffectiveStc and uiEffectivePts are only
868    * meaningful when in TSM mode.
869    */   
870   uint32_t bSelectionModeTsm;
871
872   /* Frame rate used by XDM, could be coded, specified or calculated */
873   BXDM_Picture_FrameRate stFrameRate;
874
875   /* Serial number from the Unified Picture structure. */
876   uint32_t uiSerialNumber;   
877   
878} BXDM_PictureProvider_PictureInfo;
879
880
881#ifdef __cplusplus
882}
883#endif
884
885#endif /* BXDM_PICTURE_H_ */
Note: See TracBrowser for help on using the repository browser.