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 */