1 /*
    2 $VER: multimedia.h 55.1 (07.10.2012)
    3 */
    4 
    5 #ifndef CLASSES_MULTIMEDIA_MULTIMEDIA_H
    6 #define CLASSES_MULTIMEDIA_MULTIMEDIA_H
    7 
    8 #include <exec/libraries.h>
    9 #include <intuition/classusr.h>
   10 #include <devices/timer.h>
   11 #include <clib/alib_protos.h>
   12 
   13 #ifndef MAKE_ID
   14 #define MAKE_ID(a,b,c,d)  ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
   15 #endif
   16 
   17 /* data object attributes */
   18 
   19 #define MMA_Dummy              0x8EDA0000
   20 
   21 #define MMA_MediaType          (MMA_Dummy + 1)    /* [I..] ULONG MediaNewObject() */
   22 #define MMA_Priority           (MMA_Dummy + 2)    /* [...] subclasses only! */
   23 #define MMA_Stream             (MMA_Dummy + 3)    /* [I.G] MediaNewObject() */
   24 #define MMA_Recognition        (MMA_Dummy + 4)    /* [I..] MediaNewObject() */
   25 #define MMA_TaskPriority       (MMA_Dummy + 5)    /* [I..] for classes creating subtasks */
   26 #define MMA_ClassName          (MMA_Dummy + 6)    /* [..G] */
   27 #define MMA_ClassDesc          (MMA_Dummy + 7)    /* [..G] */
   28 #define MMA_StreamType         (MMA_Dummy + 8)    /* [I..] MediaNewObject() */
   29 #define MMA_StreamName         (MMA_Dummy + 9)    /* [I..] STRPTR MediaNewObject() */
   30 #define MMA_MimeType           (MMA_Dummy + 10)   /* [..G] STRPTR decoders */
   31 #define MMA_DataFormat         (MMA_Dummy + 11)   /* [I.G] STRPTR general */
   32 #define MMA_ErrorCode          (MMA_Dummy + 12)   /* [I.G] ULONG/ULONG* general */
   33 #define MMA_StreamHandle       (MMA_Dummy + 13)   /* [I..] MediaNewObject() */
   34 #define MMA_UseVectorUnit      (MMA_Dummy + 14)   /* [I..] BOOL for test purposes */
   35 #define MMA_SupportedFormats   (MMA_Dummy + 15)   /* [..G] general */
   36 #define MMA_Ports              (MMA_Dummy + 16)   /* [..G] ULONG general */
   37 #define MMA_StreamSeekable     (MMA_Dummy + 17)   /* [..G] general */
   38 #define MMA_StreamPosBytes     (MMA_Dummy + 18)   /* [..G] */
   39 #define MMA_Mark               (MMA_Dummy + 19)   /* [.SG] processblocks */
   40 #define MMA_StreamPosFrames    (MMA_Dummy + 20)   /* [..G.Q] general */
   41 #define MMA_RecognizeCode      (MMA_Dummy + 21)   /* for subclasses */
   42 #define MMA_ClassType          (MMA_Dummy + 22)   /* for subclasses */
   43 #define MMA_StreamPosTime      (MMA_Dummy + 23)   /* [..G.Q] general */
   44 #define MMA_StreamLength       (MMA_Dummy + 24)   /* [..G.Q] general */
   45 #define MMA_ObjectName         (MMA_Dummy + 25)   /* [I.G.Q] STRPTR general */
   46 #define MMA_BlockAlign         (MMA_Dummy + 26)   /* [..G.Q] internal */
   47 #define MMA_AutoDestruction    (MMA_Dummy + 27)   /* [I....] BOOL internal */
   48 #define MMA_ExtraData          (MMA_Dummy + 28)   /* [..G.Q] demuxer->decoder communication */
   49 #define MMA_TaskName           (MMA_Dummy + 29)   /* for subclasses creating processes */
   50 #define MMA_AudioFormat        (MMA_Dummy + 30)   /* [I....] MediaNewObject() */
   51 #define MMA_VideoFormat        (MMA_Dummy + 31)   /* [I....] MediaNewObject() */
   52 #define MMA_MetaData           (MMA_Dummy + 32)   /* [....Q] struct MetaItem* demuxers usually */
   53 #define MMA_OutputState        (MMA_Dummy + 33)   /* [..G.Q] outputs */
   54 #define MMA_Decode             (MMA_Dummy + 34)   /* [I....] MediaNewObject() */
   55 #define MMA_OutputBytes        (MMA_Dummy + 35)   /* [..G.Q] outputs */
   56 #define MMA_OutputPosition     (MMA_Dummy + 36)   /* [..G.Q] outputs */
   57 #define MMA_MUIGenerator       (MMA_Dummy + 37)   /* subclasses providing GUI */
   58 #define MMA_ArgTemplate        (MMA_Dummy + 38)   /* subclasses providing GUI */
   59 #define MMA_RegGenerator       (MMA_Dummy + 39)   /* subclasses providing GUI */
   60 #define MMA_Arguments          (MMA_Dummy + 40)   /* [I.G.Q] filters, encoders, muxers */
   61 #define MMA_NameSuffixes       (MMA_Dummy + 41)   /* [..G.Q] STRPTR*, muxers */
   62 #define MMA_FormatPriority     (MMA_Dummy + 42)   /* MediaConnectTagList() */
   63 #define MMA_QualityDegradation (MMA_Dummy + 43)   /* MediaConnectTagList() */
   64 #define MMA_DefaultExtension   (MMA_Dummy + 44)   /* STRPTR, muxers */
   65 #define MMA_StrGenerator       (MMA_Dummy + 45)   /* subclasses providing GUI */
   66 #define MMA_AutoConvDepth      (MMA_Dummy + 46)   /* MediaConnectTagList() */
   67 #define MMA_UseBestFormat      (MMA_Dummy + 47)   /* [I....] MediaNewObject() */
   68 #define MMA_URIStreamName      (MMA_Dummy + 48)   /* [I..] STRPTR MediaNewObject() */
   69 
   70 #define MMA_MAX_ATTR           MMA_URIStreamName
   71 
   72 #define MMV_OutputState_Playing              1
   73 #define MMV_OutputState_Paused               2
   74 #define MMV_OutputState_Stopped              3
   75 
   76 #define MMV_FormatPriority_Speed             1
   77 #define MMV_FormatPriority_Quality           2
   78 #define MMV_FormatPriority_ForcedQuality     3
   79 
   80 /*#### OBSOLETE ####*/
   81 
   82 #define MMA_StreamMode_Read        0x0001  /* read only */
   83 #define MMA_StreamMode_Write       0x0002  /* write only, creates new stream */
   84 
   85 /*##################*/
   86 
   87 
   88 /* Special values for MediaFindFilter() tags. */
   89 
   90 #define MMV_Find_Any                    0x7FFFFFFF  /* any format will go */
   91 #define MMV_Find_AnyCommon              0x7FFFFFFE  /* any common format */
   92 #define MMV_Find_AnyCommonAudio         0x7FFFFFFD  /* any common audio format */
   93 #define MMV_Find_AnyAudio               0x7FFFFFFC  /* any non-common audio format */
   94 
   95 /* methods */
   96 
   97 #define MMM_GetPort            (MMA_Dummy + 73)
   98 #define MMM_SignalAtEnd        (MMA_Dummy + 74)  /* outputs */
   99 #define MMM_Pull               (MMA_Dummy + 75)
  100 #define MMM_SetPort            (MMA_Dummy + 76)
  101 #define MMM_AddPort            (MMA_Dummy + 77)
  102 #define MMM_LockObject         (MMA_Dummy + 78)
  103 #define MMM_UnlockObject       (MMA_Dummy + 79)
  104 #define MMM_Setup              (MMA_Dummy + 80)  /* subclasses only */
  105 #define MMM_AddForward         (MMA_Dummy + 81)  /* private */
  106 #define MMM_Play               (MMA_Dummy + 82)  /* output control */
  107 #define MMM_Pause              (MMA_Dummy + 83)  /* output control */
  108 #define MMM_Stop               (MMA_Dummy + 84)  /* output control */
  109 #define MMM_Seek               (MMA_Dummy + 85)
  110 #define MMM_IsMember           (MMA_Dummy + 86)
  111 #define MMM_GetPortFwd         (MMA_Dummy + 87)
  112 #define MMM_SetPortFwd         (MMA_Dummy + 88)
  113 #define MMM_MessageAtEnd       (MMA_Dummy + 89)
  114 #define MMM_Peek               (MMA_Dummy + 92)
  115 #define MMM_Restore            (MMA_Dummy + 93)
  116 #define MMM_ConnectPort        (MMA_Dummy + 94)
  117 #define MMM_DisconnectPort     (MMA_Dummy + 95)
  118 #define MMM_PrePull            (MMA_Dummy + 96)  /* subclasses only */
  119 #define MMM_PostPull           (MMA_Dummy + 97)  /* subclasses only */
  120 #define MMM_PreSeek            (MMA_Dummy + 98)  /* subclasses only */
  121 #define MMM_PostSeek           (MMA_Dummy + 99)  /* subclasses only */
  122 #define MMM_AddMetaItem        (MMA_Dummy + 100) 
  123 #define MMM_Cleanup            (MMA_Dummy + 101) /* subclasses only */
  124 
  125 /* obsolete */
  126 #define MMM_GetMetaItem        (MMA_Dummy + 102)
  127 
  128 /* v 55.11 */
  129 #define MMM_QueryMetaData      (MMA_Dummy + 103)
  130 #define MMM_DisposeMetaData    (MMA_Dummy + 104)
  131 
  132 struct mmopGetPort { ULONG MethodID; ULONG Port; ULONG Attribute; ULONG* Storage; };
  133 struct mmopPull { ULONG MethodID; ULONG Port; APTR Buffer; LONG Length; };
  134 struct mmopSetPort { ULONG MethodID; ULONG Port; ULONG Attribute; ULONG Value; };
  135 struct mmopAddPort { ULONG MethodID; ULONG Port; };
  136 struct mmopSetup { ULONG MethodID; ULONG Port; };
  137 struct mmopAddForward { ULONG MethodID; Boopsiobject *FwdObject; ULONG FwdPort; };
  138 struct mmopPlay { ULONG MethodID; ULONG Port; };
  139 struct mmopPause { ULONG MethodID; ULONG Port; };
  140 struct mmopStop { ULONG MethodID; ULONG Port; };
  141 struct mmopSeek { ULONG MethodID; ULONG Port; ULONG Type; QUAD *Position; };
  142 struct mmopGetPortFwd { ULONG MethodID; ULONG Port; ULONG Attribute; ULONG *Storage; };
  143 struct mmopSetPortFwd { ULONG MethodID; ULONG Port; ULONG Attribute; ULONG Value; };
  144 struct mmopRestore { ULONG MethodID; ULONG Port; };
  145 struct mmopConnectPort { ULONG MethodID; ULONG Port; Boopsiobject *DestObj; ULONG DestPort; };
  146 struct mmopDisconnectPort { ULONG MethodID; ULONG Port; };
  147 struct mmopPrePull { ULONG MethodID; ULONG Port; APTR Buffer; LONG Length; };
  148 struct mmopPostPull { ULONG MethodID; ULONG Port; APTR Buffer; LONG Length; };
  149 struct mmopPreSeek { ULONG MethodID; ULONG Port; ULONG Type; QUAD *Position; ULONG TypeMask; };
  150 struct mmopPostSeek { ULONG MethodID; ULONG Port; ULONG Type; QUAD *Position; ULONG Result; };
  151 struct mmopAddMetaItem { ULONG MethodID; ULONG Port; ULONG MetaID; ULONG Importance; APTR Data; ULONG Encoding; };
  152 struct mmopSignalAtEnd { ULONG MethodID; struct Process *SigTask; LONG SigBit; };
  153 struct mmopMessageAtEnd { ULONG MethodID; struct Message *MsgToSend; };
  154 struct mmopCleanup { ULONG MethodID; ULONG Port; };
  155 struct mmopGetMetaItem { ULONG MethodID; ULONG MetaID; ULONG *Importance; APTR Data; ULONG Encoding; ULONG Depth; };
  156 struct mmopQueryMetaData { ULONG MethodID; ULONG Port; ULONG *Items; struct TagItem *Parameters; };
  157 struct mmopDisposeMetaData { ULONG MethodID; struct TagItem *Query; };
  158 
  159 
  160 /* special values for methods */
  161 
  162 #define MMV_SignalAtEnd_Remove  -1
  163 
  164 /* MMM_GetPort/SetPort tags */
  165 
  166 #define MMA_Port_Object        (MMA_Dummy + 200)  /* [G.] Object* */
  167 #define MMA_Port_Number        (MMA_Dummy + 201)  /* [G.] ULONG */
  168 #define MMA_Port_FormatsTable  (MMA_Dummy + 202)  /* [G.] ULONG* */
  169 #define MMA_Port_Format        (MMA_Dummy + 203)  /* [GS] ULONG */
  170 #define MMA_Port_ConnObject    (MMA_Dummy + 204)  /* [GS] Object* */
  171 #define MMA_Port_ConnNumber    (MMA_Dummy + 205)  /* [GS] ULONG */
  172 #define MMA_Port_Type          (MMA_Dummy + 206)  /* [G.] ULONG */
  173 #define MMA_Port_Forwarding    (MMA_Dummy + 207)  /* [GS] BOOL */
  174 
  175 /* media types */
  176 
  177 #define MMT_SOUND     0x00000001
  178 #define MMT_PICTURE   0x00000002
  179 #define MMT_VIDEO     0x00000004
  180 #define MMT_DOCUMENT  0x00000008        /* text only or compound */
  181 #define MMT_ANY       0xFFFFFFFF        /* matches any media type (32 media types possible) */
  182 
  183 /* recognition type */
  184 
  185 #define MMREC_LIGHT  0       /* use fast (but maybe inaccurate) recognition routines */
  186 #define MMREC_HEAVY  1       /* use accurate (but maybe slow) recognition routines */
  187 
  188 /* class types */
  189 
  190 #define MMCLASS_BASIC           0       /* multimedia.class, processblock.class, multiread.buffer */
  191 #define MMCLASS_DEMUXER         1
  192 #define MMCLASS_DECODER         2
  193 #define MMCLASS_ENCODER         3
  194 #define MMCLASS_MULTIPLEXER     4
  195 #define MMCLASS_OUTPUT          5
  196 #define MMCLASS_FILTER          6
  197 #define MMCLASS_STREAM          7
  198 
  199 /* structure describing block port */
  200 
  201 struct MediaPort
  202 {
  203 	struct Node     mdp_Node;
  204 	Boopsiobject   *mdp_Object;
  205 	LONG            mdp_Port;
  206 	LONG            mdp_Number;
  207 	ULONG           mdp_Type;
  208 	ULONG           mdp_DataFormat;
  209 	ULONG          *mdp_AvailFormats;
  210 	BOOL            mdp_Forwarding;
  211 	BOOL            mdp_Autoconnect;
  212 	struct MinList  mdp_MetaData;
  213 };
  214 
  215 struct MediaPortDesc
  216 {
  217 	ULONG   mdd_Type;
  218 	ULONG  *mdd_FormatTable;
  219 };
  220 
  221 /* for mdp_Type */
  222 
  223 #define MDP_TYPE_INPUT          1
  224 #define MDP_TYPE_OUTPUT         2
  225 
  226 /* invalid port number */
  227 
  228 #define MM_NO_PORT              -1
  229 
  230 /* enumerated data formats */
  231 
  232 /* general */
  233 
  234 #define MMF_UNKNOWN              0x00000000
  235 #define MMF_STREAM               0x00000001    /* port interfaces to stream object */
  236 #define MMF_ANY_FORMAT           0xFFFFFFFF    /* wildchar used e.g. by generic buffers */
  237 
  238 
  239 /* audio */
  240 
  241 #define MMF_AUDIOMASK            0x00001000
  242 #define MMF_AUDIOBIT             12
  243 
  244 #define IS_AUDIO(x) ((x) & MMF_AUDIOMASK)
  245 
  246 
  247 /* video */
  248 
  249 #define MMF_VIDEOMASK            0x00002000
  250 #define MMF_VIDEOBIT             13
  251 
  252 #define IS_VIDEO(x) ((x) & MMF_VIDEOMASK)
  253 
  254 
  255 /* document */
  256 
  257 #define MMF_DOCUMENTMASK         0x00004000
  258 #define MMF_DOCUMENTBIT          14
  259 
  260 #define IS_DOCUMENT(x) ((x) & MMF_DOCUMENTMASK)
  261 
  262 
  263 /* common formats */
  264 
  265 #define MMF_COMMONMASK           0x00010000
  266 #define MMF_COMMONBIT            16
  267 
  268 #define MMFC_UNKNOWN             (MMF_COMMONMASK | 0)
  269 #define MMFC_AUDIO_INT16         (MMF_COMMONMASK | 1)
  270 #define MMFC_AUDIO_INT32         (MMF_COMMONMASK | 2)
  271 #define MMFC_AUDIO_FLOAT32       (MMF_COMMONMASK | 3)
  272 #define MMFC_VIDEO_ARGB32        (MMF_COMMONMASK | 4)
  273 #define MMFC_VIDEO_ARGB32_MF     (MMF_COMMONMASK | 5)
  274 #define MMFC_VIDEO_GRAY8         (MMF_COMMONMASK | 6)
  275 #define MMFC_VIDEO_CMYK32        (MMF_COMMONMASK | 7)
  276 /* space for more video common formats like 16 bits per component, or YUV */
  277 #define MMFC_DOCUMENT_PLAINTEXT  (MMF_COMMONMASK | 32)  // UCS-4 encoded
  278 
  279 //#define MMFC_MAXFORMAT           (MMF_COMMONMASK | 7)
  280 
  281 #define IS_COMMON(x) ((x) & MMF_COMMONMASK)
  282 #define IS_COMMON_AUDIO(x) (((x) >= MMFC_AUDIO_INT16) && ((x) <= MMFC_AUDIO_FLOAT32))
  283 #define IS_COMMON_VIDEO(x) (((x) >= MMFC_VIDEO_ARGB32) && ((x) <= MMFC_VIDEO_CMYK32))
  284 #define IS_COMMON_DOCUMENT(x) ((x) == MMFC_DOCUMENT_PLAINTEXT)
  285 
  286 /* error values */
  287 
  288 #define MMERR_BASE                  1101
  289 
  290 #define MMERR_END_OF_DATA           1101    /* data stream has ended [unexpectedly] */
  291 #define MMERR_OUT_OF_MEMORY         1102    /* memory internal allocation failed */
  292 #define MMERR_NOT_SEEKABLE          1103    /* operation requires seekable stream */
  293 #define MMERR_WRONG_ARGUMENTS       1104    /* wrong arguments to a method */
  294 #define MMERR_NO_STREAM             1105    /* missing src/dest stream for operation */
  295 #define MMERR_WRONG_DATA            1106    /* malformed data in stream [header] */
  296 #define MMERR_NO_STREAM_CLASS       1107    /* wrong stream type specified */
  297 #define MMERR_NO_DECODER            1108    /* no decoder for an encoded format */
  298 #define MMERR_NOT_RECOGNIZED        1109    /* no demultiplexer recognized the format */
  299 #define MMERR_IO_ERROR              1110    /* I/O error in source or destination stream */
  300 #define MMERR_FORMAT_NOT_SUPPORTED  1111    /* unsupported format of raw data */
  301 #define MMERR_BROKEN_PIPE           1112    /* pipe of objects is not continuous */
  302 #define MMERR_NOT_IMPLEMENTED       1113    /* functionality not implemented or not supported*/
  303 #define MMERR_RESOURCE_MISSING      1114    /* missing system resource (library or class usually) */
  304 #define MMERR_END_OF_FRAME          1115    /* end of video frame (used internally) */
  305 #define MMERR_BUFFER_UNDERRUN       1116    /* data buffer in object chain is empty */
  306 
  307 #define MMERR_MAX                   1116
  308 
  309 
  310 /* seek types */
  311 
  312 #define MMM_SEEK_BYTES    0     /* Position in bytes.        */
  313 #define MMM_SEEK_FRAMES   1     /* Position in frames.       */
  314 #define MMM_SEEK_TIME     2     /* Position in microseconds. */
  315 
  316 
  317 /* seek masks */
  318 
  319 #define MMM_SEEKMASK_BYTES              1     /* Byte seek only.           */
  320 #define MMM_SEEKMASK_FRAMES_AND_TIME    2     /* Frame seek and time seek. */
  321 
  322 
  323 /* MMM_PreSeek() return values */   
  324 
  325 #define MMM_PRESEEK_DONE                6     /* MMM_PreSeek have done all the job already.  */
  326 #define MMM_PRESEEK_NOT_DONE            7     /* Verification OK, do the seek job.           */
  327 #define MMM_PRESEEK_FAILED              8     /* Fail. Do nothing, just call MMM_PostSeek(). */
  328 
  329 /* MMM_PrePull() return values */
  330 
  331 #define MMM_PREPULL_FAILED             -1     /* Fail. Do nothing, just call MMM_PostPull(). */
  332 #define MMM_PREPULL_NOT_DONE           -2     /* Verification OK, do processing.             */
  333                                               /* 0 or positive value means MMM_PrePull() did the job. */
  334 
  335 /* MMM_Get/SetPort wrappers */
  336 
  337 #define MediaGetPort(obj, port, attr) ({ ULONG _val = 0; DoMethod(obj, MMM_GetPort, port, attr, (IPTR)&_val); _val; })
  338 #define MediaGetPort64(obj, port, attr) ({ UQUAD _val = 0; DoMethod(obj, MMM_GetPort, port, attr, (IPTR)&_val); _val; })
  339 #define MediaSetPort(obj, port, attr, val) DoMethod(obj, MMM_SetPort, port, attr, val)
  340 #define MediaSetPort64(obj, port, attr, val) ({ UQUAD _val = val; DoMethod(obj, MMM_SetPort, port, attr, (IPTR)&_val); })
  341 
  342 /* MMM_Get/SetPortFwd wrappers */
  343 
  344 #define MediaGetPortFwd(obj, port, attr) ({ ULONG _val = 0; DoMethod(obj, MMM_GetPortFwd, port, attr, (IPTR)&_val); _val; })
  345 #define MediaGetPortFwd64(obj, port, attr) ({ UQUAD _val = 0; DoMethod(obj, MMM_GetPortFwd, port, attr, (IPTR)&_val); _val; })
  346 #define MediaSetPortFwd(obj, port, attr, val) DoMethod(obj, MMM_SetPortFwd, port, attr, val)
  347 #define MediaSetPortFwd64(obj, port, attr, val) ({ UQUAD _val = val; DoMethod(obj, MMM_SetPortFwd, port, attr, (IPTR)&_val); })
  348 
  349 
  350 struct DtCodeContext
  351 {
  352 	struct Library  *dcc_SysBase;
  353 	struct Library  *dcc_IntuitionBase;
  354 	struct Library  *dcc_DOSBase;
  355 	struct Library  *dcc_MultimediaBase;
  356 	Boopsiobject    *dcc_Source;
  357 	ULONG            dcc_Port;
  358 };
  359 
  360 
  361 /* Log levels. */
  362 
  363 #define LOG_NONE        0
  364 #define LOG_ERRORS      1
  365 #define LOG_INFO        2
  366 #define LOG_VERBOSE     3
  367 
  368 
  369 /* Log message with no parameter. */
  370 
  371 #define MLOG(level, msg) MediaLog(level, (STRPTR)CLASSNAME, (STRPTR)__FUNCTION__, (STRPTR)msg, NULL)
  372 
  373 /* Log message with variable args. */
  374 
  375 #if !defined(__STRICT_ANSI__)
  376 #define MLOGV(level, msg, ...) MediaLog(level, (STRPTR)CLASSNAME, (STRPTR)__FUNCTION__, (STRPTR)msg, __VA_ARGS__)
  377 #endif
  378 
  379 /* Message structure sent to MediaLogger */
  380 
  381 struct MediaError
  382 {
  383 	struct Message Msg;
  384 	ULONG  Level;
  385 	STRPTR AppName;
  386 	STRPTR ClassName;
  387 	STRPTR FunctionName;
  388 	STRPTR EventDescription;
  389 };
  390 
  391 #define SETERR(x) SetAttrs(obj, MMA_ErrorCode, x, TAG_END)
  392 
  393 
  394 /*############################################################################*/
  395 /*### Class specific attributes and methods. #################################*/
  396 /*############################################################################*/
  397 
  398 #define MMA_FileOutput_Path         (MMA_Dummy + 1500)  /* [I.G.Q]  STRPTR    */
  399 #define MMA_FileOutput_DosError     (MMA_Dummy + 1501)  /* [I....]  LONG*     */
  400 #define MMA_StreamBuffer_Level      (MMA_Dummy + 1502)  /* [..G.Q]  LONG    bytes buffered    */
  401 #define MMA_StreamBuffer_Blocks     (MMA_Dummy + 1503)  /* [I.G.Q]  LONG    number of blocks in FIFO  */
  402 #define MMA_Shoutcast_DataGap       (MMA_Dummy + 1504)  /* [ISPGQ]  LONG    bytes of stream between metadata */
  403 #define MMA_StreamBuffer_BlockSize  (MMA_Dummy + 1505)  /* [I.G.Q]  LONG    length of FIFO block in bytes */
  404 
  405 
  406 /*#### OBSOLETE ####*/
  407 
  408 #define seterr(x) SETERR(x)
  409 
  410 struct mmopData
  411 {
  412 	ULONG   MethodID;
  413 	ULONG   Port;
  414 	APTR    Buffer;
  415 	LONG    Length;
  416 };
  417 
  418 struct mmopConnect
  419 {
  420 	ULONG         MethodID;
  421 	ULONG         Port;
  422 	Boopsiobject* DestObj;
  423 	ULONG         DestPort;
  424 };
  425 
  426 struct mmopPort
  427 {
  428 	ULONG   MethodID;
  429 	ULONG   Port;
  430 };
  431 
  432 /* End of obsolete defines. */
  433 
  434 
  435 /* GUI generation, tags and values for MediaGetGuiTagList() */
  436 
  437 #define MGG_Type                       (MMA_Dummy + 3000)   // also takes class name string
  438 #define MGG_Type_Muxers                1
  439 #define MGG_Type_Filters               2
  440 
  441 #define MGG_Media                      (MMA_Dummy + 3001)   // MMT_ flags
  442 
  443 #define MGG_Selector                   (MMA_Dummy + 3002)
  444 #define MGG_Selector_List              1
  445 #define MGG_Selector_Cycle             2
  446 #define MGG_Selector_None              3
  447 
  448 #define MGG_Selected                   (MMA_Dummy + 3003)   // selected class name
  449 #define MGG_DOSPattern                 (MMA_Dummy + 3004)   // filtering out classes using DOS pattern
  450 #define MGG_Args                       (MMA_Dummy + 3005)   // args list 
  451 
  452 /*------------------------------------------------------*/
  453 /* FOR IMPLEMENTORS OF CLASSES PROVIDING GUI GENERATORS */
  454 /*------------------------------------------------------*/
  455 
  456 /* structure sent to MUI generators in classes */
  457 
  458 struct MUIContext
  459 {
  460 	struct Library*              muc_SysBase;
  461 	struct Library*              muc_IntuitionBase;
  462 	struct Library*              muc_DOSBase;
  463 	struct Library*              muc_MultimediaBase;
  464 	struct Library*              muc_MUIMasterBase;
  465 	struct Library*              muc_LocaleBase;
  466 	struct MUI_CustomClass*      muc_MasterClass;     // returned object must be an instance of this class
  467 	struct MUI_CustomClass*      muc_StorageClass;    // optional storage for localized strings and other stuff
  468 	struct TagItem*              muc_TagList;
  469 };
  470 
  471 /* structure sent to argument string generators in classes */
  472 
  473 struct StrContext
  474 {
  475 	struct Library*              stc_SysBase;
  476 	struct Library*              stc_IntuitionBase;
  477 	struct Library*              stc_MultimediaBase;
  478 	struct TagItem*              stc_TagList;
  479 	Boopsiobject*                stc_Gui;             // GUI object to extract arguments from
  480 };
  481 
  482 /* structure sent to Reggae chain generators in classes */
  483 
  484 struct RegContext
  485 {
  486 	struct Library*              rgc_SysBase;
  487 	struct Library*              rgc_IntuitionBase;
  488 	struct Library*              rgc_MultimediaBase;
  489 	struct TagItem*              rgc_TagList;
  490 	STRPTR                       rgc_Arguments;       // Argument string specifying encoder/muxer parameters
  491 	Boopsiobject*                rgc_SourceObject;    // Reggae object used as data source
  492 	LONG                         rgc_SourcePort;      // Port of the data source
  493 };
  494 
  495 /* storage methods provided by muc_StorageClass, may be used in GUI generators to store localized strings or other stuff */
  496 
  497 #define GGRM_SetString           0x6EDA0001        /* stores a NULL-terminated string */
  498 #define GGRM_SetLocaleString     0x6EDA0002        /* stores a localized version of a NULL-terminated string */
  499 
  500 struct GGRP_SetString
  501 {
  502 	ULONG MethodID;
  503 	char* Data;
  504 	IPTR  Id;
  505 };
  506 
  507 #define GGRM_GetString           0x6EDA0003
  508 
  509 struct GGRP_GetString
  510 {
  511 	ULONG MethodID;
  512 	IPTR  Id;
  513 };
  514 
  515 #define GGRA_Catalog             0x6EDA2000      /* [I..], STRPTR, name of locale catalog for the class, for muc_StorageClass */
  516 #define GGRA_Storage             0x6EDA2001      /* [I..], Object*, pointer to instance of muc_StorageClass, passed to constructor of GUI object */
  517 #define GGRA_SelectorName        0x6EDA2002      /* [I.G], defined by class GUI generator, read by MediaGetGuiTagList() */
  518 #define GGRA_FullName            0x6EDA2003      /* [I.G], defined by class GUI generator, read by MediaGetGuiTagList() */
  519 #define GGRA_PageClassName       0x6EDA2004      /* [..G], for object returned by MediaGetGui(), notifable */
  520 #define GGRA_PageShortName       0x6EDA2005      /* [..G], for object returned by MediaGetGui(), notifable */
  521 #define GGRA_PageFullName        0x6EDA2006      /* [..G], for object returned by MediaGetGui(), notifable */
  522 #define GGRA_PageDefExtension    0x6EDA2007      /* [..G], for object returned by MediaGetGui(), notifable */
  523 
  524 
  525 #endif /* CLASSES_MULTIMEDIA_MULTIMEDIA_H */