#include #include #include #include #include #include #include #define ALP_MTL(str, ...) ALP_TM(TL(0, str, ## __VA_ARGS__)) #define CHECK_RETURN(ret) \ if (ret != ALP_STATUS_OK) \ { \ ALP_MTL("**** Error: %s, file %s line %d", alp_err_get_string(ret, TRUE), __FILE__, __LINE__);\ return;\ } typedef struct{ int32_t obj_id; AlpMMPropertyType type; int32_t key; AlpMMPropertyCode code; void *value; int32_t *size; gchar *desc; }Property; gchar *map_file(gchar *url); void play_back(AlpMMSourceType type, const void* src_url); void get_property(Property prop); static void mycallback(const AlpMMSessionEvent *event, void *userdata); //gboolean has_audio(); //gboolean has_video(); //void get_format(AlpMMSourceID hSource, AlpMediaFileFomatType Format); AlpMMSessionID hSession; void alp_main(int argc, char *argv[]){ ALP_MTL("********** Audio Manager Test Begin ***********"); alp_status_t ret; ret = alp_media_session_create(ALP_MM_SESSION_CLASS_PLAYBACK, &hSession); CHECK_RETURN(ret); gchar *pMemStream = map_file("/var/opt/alp/bundles/com.access.apps.mmtest/rsc/crazyfrog.3gp"); ALP_MTL("**** Memory Address: 0x%X", pMemStream); play_back(ALP_MM_TYPE_MEMSTREAM, pMemStream); //play_back(ALP_MM_TYPE_FILE, "/var/opt/alp/bundles/com.access.apps.mmtest/rsc/crazyfrog.3gp"); //alp_media_session_destroy(hSession); ALP_MTL("********** Audio Manager Test End ***********"); } void play_back(AlpMMSourceType type, const void* url){ AlpMMSourceID hSource; AlpMMDestID hDest_Audio; AlpMMDestID hDest_Video; alp_status_t ret; ret = alp_media_session_register_callback(hSession, mycallback, NULL); CHECK_RETURN(ret); //alp_media_session_add_source doesn't support ALP_MM_TYPE_FILELIST, ALP_MM_TYPE_NETSTREAM ??? ret = alp_media_session_add_source(hSession, type, url, &hSource); CHECK_RETURN(ret); ret = alp_media_session_add_dest(hSession, LCDDEV, &hDest_Video); CHECK_RETURN(ret); //ret = alp_media_session_add_dest(hSession, DSPDEV, &hDest_Audio); //CHECK_RETURN(ret); ret = alp_media_session_finalize(hSession); CHECK_RETURN(ret); ret = alp_media_session_control(hSession, ALP_MM_SESSION_CTL_RUN); CHECK_RETURN(ret); gboolean bHasAudio = 0; gboolean bHasVideo = 0; AlpMediaFileFomatType iFormat = 000; int32_t iLenFormat = sizeof(iFormat); AlpMMRectangle rRect = {0, 0, 0, 0}; int32_t iSize = 0; int64_t iEndTime = 0; int32_t iLenEndTime = sizeof(iEndTime); ALP_MTL("%d", iLenEndTime); int32_t iVolume = 0; gchar *sURL = (gchar*)malloc(64*sizeof(gchar)); int32_t iLenURL = 64*sizeof(gchar); gboolean bAudioEnable = 0; gboolean bVideoEnable = 0; int32_t iFileSize = 0; int32_t iRotate = 0; int32_t iClass = 0; AlpVideoCodecs iVideoCodec = 0; Property propTable[] = { //has_audio property is not for MP3 file? {hSession, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SOURCE_FILE_HAS_AUDIO, ALP_MM_PROPERTY_CODE_BOOL, (void*)&bHasAudio, &iSize, "has audio?"}, {hSession, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SOURCE_FILE_HAS_VIDEO, ALP_MM_PROPERTY_CODE_BOOL, (void*)&bHasVideo, &iSize, "has video?"}, {hSource, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SOURCE_FILE_FORMAT, ALP_MM_PROPERTY_CODE_INT32, (void*)&iFormat, &iLenFormat, "file format?"}, //faild!!?? {hDest_Video, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SESSION_DEST_RECT, ALP_MM_PROPERTY_CODE_STRING, (void*)&rRect, &iSize, "rect?"}, {hSession, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SESSION_END_TIME, ALP_MM_PROPERTY_CODE_INT64, (void*)&iEndTime, &iLenEndTime, "endtime?"}, //faild!!?? {hSource, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SOURCE_URL, ALP_MM_PROPERTY_CODE_STRING, (void*)sURL, &iLenURL, "source url?"}, //RAW or STRING?? //{hSession, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SESSION_AUDIO_ENABLE, ALP_MM_PROPERTY_CODE_BOOL, (void*)&bAudioEnable, NULL, "Audio Enabled?"},//not completed?? {hSession, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SESSION_VIDEO_ENABLE, ALP_MM_PROPERTY_CODE_BOOL, (void*)&bVideoEnable, &iSize, "Video Enabled?"},//not completed?? //{hSource, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SOURCE_SIZE, ALP_MM_PROPERTY_CODE_INT32, (void*)&iFileSize, &iSize, "Fize Size?"},//not completed?? //{hSession, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SESSION_SESSION_CLASS, ALP_MM_PROPERTY_CODE_INT32, (void*)&iClass, &iSize, "Session Class?"},//No sessioin class property?? {hDest_Video, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SESSION_DEST_ROTATE, ALP_MM_PROPERTY_CODE_INT32, (void*)&iRotate, NULL, "Rotate?"}, //No ROTATE property!?? {hSession, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_VIDEO_CODEC_TYPE, ALP_MM_PROPERTY_CODE_INT32, (void*)&iVideoCodec, NULL, "Video Codec?"} //No ROTATE property!?? //{hDest_Audio, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SESSION_AUDIO_VOLUME, ALP_MM_PROPERTY_CODE_INT32, (void*)&iVolume, &iSize, "Volume?"} //failed?? }; unsigned int i = 0; for (i=0; ievent_cause, event->position, event->duration); switch (event->event_code) { case ALP_MM_SESSION_EVENT_STATE_CHANGED:{ ALP_MTL("state changed"); break; } case ALP_MM_SESSION_EVENT_WARNING:{ ALP_MTL("warning"); break; } case ALP_MM_SESSION_EVENT_ERROR:{ ALP_MTL("error"); break; } case ALP_MM_SESSION_EVENT_CURRENT_TIME:{ ALP_MTL("current time"); break; } case ALP_MM_SESSION_EVENT_DELETING:{ ALP_MTL("deleting"); break; } case ALP_MM_SESSION_EVENT_CUSTOM_BASE:{ ALP_MTL("custom base"); break; } } } #include #include #include #include #include gchar *map_file(gchar *url) { int fd; struct stat sb; fd=open(url,O_RDONLY); fstat(fd,&sb); gchar *start = malloc(sb.st_size); if (!start) { ALP_MTL("no enough memory"); return NULL; } start=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIVATE,fd,0); if (start == MAP_FAILED) { ALP_MTL("**** Can not map file into memory"); return NULL; } else{ ALP_MTL("**** Memory Address 1: 0x%X", start); return start; } //munma(start,sb.st_size); //closed(fd); } /* void get_format(const AlpMMSourceID hSource, AlpMediaFileFomatType Format){ int32_t iSize = sizeof(Format); alp_status_t ret = alp_media_property_get(hSource, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SOURCE_FILE_FORMAT, ALP_MM_PROPERTY_CODE_INT32, (void*)&Format, &iSize); CHECK_RETURN(ret); ALP_MTL("%d", Format); }*/ /*gboolean has_video(){ gboolean bVideo = FALSE; int32_t iSize = sizeof(bVideo); alp_status_t ret = alp_media_property_get(hSession, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SOURCE_FILE_HAS_VIDEO, ALP_MM_PROPERTY_CODE_BOOL, (void*)&bVideo, &iSize); CHECK_RETURN(ret); ALP_MTL("HAS_VIDEO == %d", bVideo); return bVideo; } gboolean has_audio(){ gboolean bAudio = FALSE; int32_t iSize = sizeof(bAudio); alp_status_t ret = alp_media_property_get(hSession, ALP_MM_PROPERTY_TYPE_DEFAULT, ALP_MM_SOURCE_FILE_HAS_AUDIO, ALP_MM_PROPERTY_CODE_BOOL, (void*)&bAudio, &iSize); CHECK_RETURN(ret); ALP_MTL("HAS_AUDIO == %d", bAudio); return bAudio; } */ //QUESTION 1. How to playback Memory Stream? 2. How many properties can be got by using alp_media_session_property_get()?? 3. ALP_MM_SOURCE_FILE_FORMAT property always be *0*... see code below please. 4. The Source code defines two properties: ALP_MM_SESSION_DEST_ROTATE and ALP_MM_SESSION_DESTINATION_ROTATE, are they same!? OUTPUT 1: PLAYING MEMORY STREAM ~ # root: ********** Audio Manager Test Begin *********** root: -----------begin init gstreamer library------ root: pSessionID :135538520 root: outSession : 135538520 root: **** Memory Address 1: 0x40EE3000 ~ # root: ********** Audio Manager Test Begin *********** root: -----------begin init gstreamer library------ root: pSessionID :135538520 root: outSession : 135538520 root: **** Memory Address 1: 0x40EE3000 root: **** Memory Address: 0x40EE3000 root: ALP_DEBUG: successed make element type:memsrc, name:memory_src root: ALP_DEBUG: successed make element type:fbsink, name:videosink root: MM_INFO:begin autoplug root: ALP_DEBUG: successed make element type:pipeline, name:pipeline root: ALP_DEBUG: successed make element type:typefind, name:typefind root: MM_INFO:Setting pipeline to PAUSED ... root: MM_INFO:statechange:0 root: ERROR: err in file /home/buildslave/builds/src/platform/libraries/media_session/media_playback.c line 2302, err:0x45030000 root: #######set the pipeline's state to null root: #######set the element:memsrc's state to null root: #######set the element:typefind's state to null root: #######free the pipeline root: trace: file /home/buildslave/builds/src/platform/libraries/media_session/media_playbackbase.c line 651, error num:0x45030000 root: trace: file /home/buildslave/builds/src/platform/libraries/media_session/media_session.c line 386, error num:0x45030000 root: **** Error: Unknown error (0x45030000), file src/main.c line 84 root: **** END OF PLAYING MEMORY STREAM! root: ********** Audio Manager Test End *********** ====================================================================================================================================== OUTPUT 2 PLAYTING FILE ~ # root: ********** Audio Manager Test Begin *********** root: -----------begin init gstreamer library------ root: pSessionID :135538520 root: outSession : 135538520 root: **** Memory Address 1: 0x40EE3000 root: **** Memory Address: 0x40EE3000 root: ALP_DEBUG: successed make element type:filesrc, name:file_src root: ALP_DEBUG: successed make element type:fbsink, name:videosink root: MM_INFO:begin autoplug root: ALP_DEBUG: successed make element type:pipeline, name:pipeline root: ALP_DEBUG: successed make element type:typefind, name:typefind root: MM_INFO:Setting pipeline to PAUSED ... root: INFO:try to link element :typefind 's pad root: try to find compatible element for type:application/x-3gp root: find compatible elememt:qtdemux root: INFO:trying to process qtdemux root: ALP_DEBUG: successed make element type:qtdemux, name:qtdemux0 root: INFO:linked element qtdemux0 on pad typefind:src root: INFO:successed add element:qtdemux0 root: MM_INFO:statechange:1 root: MM_INFO:pipeline is PREROLLED... root: INFO:try to link element :qtdemux0 's pad root: try to find compatible element for type:video/x-h263 root: find compatible elememt:oki_h263_dec root: demux video src caps:video/x-h263, width=(int)176, height=(int)144, framerate=(fraction)10/1 root: get rect:width:176, height :144 root: INFO:element qtdemux0 is a demuxr, inserting a queue root: ALP_DEBUG: successed make element type:queue, name:queue0 root: INFO:trying to process oki_h263_dec root: ALP_DEBUG: successed make element type:oki_h263_dec, name:oki_h263_dec0 root: INFO:linked element oki_h263_dec0 on pad queue0:src root: INFO:successed add element:oki_h263_dec0 root: INFO:try to link element :oki_h263_dec0 's pad root: INFO:find a raw src, type:video/x-raw-yuv root: MEDIA_ENGINE:find dest, try to link root: MEDIA_ENGINE:begin link sink root: MEDIA_ENGINE:link pad root: MEDIA_ENGINE:set state root: MEDIA_ENGINE:End link sink root: INFO:try to link element :qtdemux0 's pad root: try to find compatible element for type:audio/AMR root: find compatible elememt:oki_amrnb_dec root: INFO:element qtdemux0 is a demuxr, inserting a queue root: ALP_DEBUG: successed make element type:queue, name:queue1 root: INFO:trying to process oki_amrnb_dec root: ALP_DEBUG: successed make element type:oki_amrnb_dec, name:oki_amrnb_dec0 root: INFO:linked element oki_amrnb_dec0 on pad queue1:src root: INFO:successed add element:oki_amrnb_dec0 root: INFO:try to link element :oki_amrnb_dec0 's pad root: INFO:find a raw src, type:audio/x-raw-int root: caps: video/x-h263, width=(int)176, height=(int)144, framerate=(fraction)10/1 root: oki_amrnb_dec handling tag event root: oki_amrnb_dec handling newsegment event root: (:1312): GStreamer-CRITICAL **: gst_pad_get_parent_element: assertion `GST_IS_PAD (pad)' failed root: (:1312): GStreamer-CRITICAL **: gst_object_unref: assertion `object != NULL' failed root: filesrc-->typefind-->qtdemux-->queue-->oki_amrnb_dec root: |->queue-->oki_h263_dec-->fbsink root: MM_INFO:auto plug successed root: MEDIA_ENGINE:pipeline state is pause, begin playing ... root: fbopen:open error root: Cannot open fb device. root: 8 root: ERROR: error occur in file /home/buildslave/builds/src/platform/libraries/media_session/media_playback.c line 2386, error num:0x45050000 root: trace: file /home/buildslave/builds/src/platform/libraries/media_session/media_playbackbase.c line 744, error num:0x45050000 root: **** Error: Unknown error (0x45050000), file src/main.c line 164 root: ERROR: error occur in file /home/buildslave/builds/src/platform/libraries/media_session/media_playbackbase.c line 778, error num:0x45050000 root: **** Error: Unknown error (0x45050000), file src/main.c line 164 root: Has Audio: 1 root: Has Video: 1 root: File Format: 0 root: Rect Height: 144 root: Rect Width: 176 root: Rect X: 0 root: Rect Y: 0 root: End Time: 0 root: Source URL: /var/opt/alp/bundles/com.access.apps.mmtest/rsc/crazyfrog.3gp root: Source URL Length: 64 root: Audio Enabled: 0 root: Video Enabled: 0 root: File Size: 0 root: Session Class: 0 root: Rotate: 0 root: Video Codec: 0 root: ********** Audio Manager Test End *********** root: wy:176, wuv:88, hy:144, huv:72, root: ystride:176, uvstride:88, ysize:25344, uvsize:6336 root: down root: down root: down root: down root: down root: down root: Media session property get plugin, value: 0 root: down