rendered paste body#include <stdio.h>#include <alp/errormgr_base.h>#include <alp/traces.h>#include <alp/media_session.h>#include <glib.h>#include <memory.h>#include <malloc.h>#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; i<sizeof(propTable)/sizeof(propTable[0]); i++) { get_property(propTable[i]); } ALP_MTL("Has Audio: %d", bHasAudio); ALP_MTL("Has Video: %d", bHasVideo); ALP_MTL("File Format: %d", iFormat); ALP_MTL("Rect Height: %d", rRect.height); ALP_MTL("Rect Width: %d", rRect.width); ALP_MTL("Rect X: %d", rRect.x); ALP_MTL("Rect Y: %d", rRect.y); ALP_MTL("End Time: %lli", iEndTime); ALP_MTL("Source URL: %s", sURL); ALP_MTL("Source URL Length: %d", iLenURL); //The Lenght is same as allocated before?? free(sURL); ALP_MTL("Audio Enabled: %d", bAudioEnable); ALP_MTL("Video Enabled: %d", bVideoEnable); ALP_MTL("File Size: %d", iFileSize); ALP_MTL("Session Class: %d", iClass); ALP_MTL("Rotate: %d", iRotate); ALP_MTL("Video Codec: %d", iVideoCodec); //ALP_MTL("Volume: %d", iVolume);}void get_property(Property prop){ alp_status_t ret; ret = alp_media_property_get(prop.obj_id, prop.type, prop.key, prop.code, prop.value, prop.size ); CHECK_RETURN(ret);}static void mycallback(const AlpMMSessionEvent *event, void *userdata){ ALP_MTL("eventcause:%d, position:%lli, duration:%lli\n", event->event_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<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<sys/mman.h>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;}*///QUESTION1. 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 :135538520root: outSession : 135538520root: **** Memory Address 1: 0x40EE3000~ # root: ********** Audio Manager Test Begin ***********root: -----------begin init gstreamer library------root: pSessionID :135538520root: outSession : 135538520root: **** Memory Address 1: 0x40EE3000root: **** Memory Address: 0x40EE3000root: ALP_DEBUG: successed make element type:memsrc, name:memory_srcroot: ALP_DEBUG: successed make element type:fbsink, name:videosinkroot: MM_INFO:begin autoplugroot: ALP_DEBUG: successed make element type:pipeline, name:pipelineroot: ALP_DEBUG: successed make element type:typefind, name:typefindroot: MM_INFO:Setting pipeline to PAUSED ...root: MM_INFO:statechange:0root: ERROR: err in file /home/buildslave/builds/src/platform/libraries/media_session/media_playback.c line 2302, err:0x45030000root: #######set the pipeline's state to nullroot: #######set the element:memsrc's state to nullroot: #######set the element:typefind's state to nullroot: #######free the pipelineroot: trace: file /home/buildslave/builds/src/platform/libraries/media_session/media_playbackbase.c line 651, error num:0x45030000root: trace: file /home/buildslave/builds/src/platform/libraries/media_session/media_session.c line 386, error num:0x45030000root: **** Error: Unknown error (0x45030000), file src/main.c line 84root: **** 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 :135538520root: outSession : 135538520root: **** Memory Address 1: 0x40EE3000root: **** Memory Address: 0x40EE3000root: ALP_DEBUG: successed make element type:filesrc, name:file_srcroot: ALP_DEBUG: successed make element type:fbsink, name:videosinkroot: MM_INFO:begin autoplugroot: ALP_DEBUG: successed make element type:pipeline, name:pipelineroot: ALP_DEBUG: successed make element type:typefind, name:typefindroot: MM_INFO:Setting pipeline to PAUSED ...root: INFO:try to link element :typefind 's padroot: try to find compatible element for type:application/x-3gproot: find compatible elememt:qtdemuxroot: INFO:trying to process qtdemuxroot: ALP_DEBUG: successed make element type:qtdemux, name:qtdemux0root: INFO:linked element qtdemux0 on pad typefind:srcroot: INFO:successed add element:qtdemux0root: MM_INFO:statechange:1root: MM_INFO:pipeline is PREROLLED...root: INFO:try to link element :qtdemux0 's padroot: try to find compatible element for type:video/x-h263root: find compatible elememt:oki_h263_decroot: demux video src caps:video/x-h263, width=(int)176, height=(int)144, framerate=(fraction)10/1root: get rect:width:176, height :144root: INFO:element qtdemux0 is a demuxr, inserting a queueroot: ALP_DEBUG: successed make element type:queue, name:queue0root: INFO:trying to process oki_h263_decroot: ALP_DEBUG: successed make element type:oki_h263_dec, name:oki_h263_dec0root: INFO:linked element oki_h263_dec0 on pad queue0:srcroot: INFO:successed add element:oki_h263_dec0root: INFO:try to link element :oki_h263_dec0 's padroot: INFO:find a raw src, type:video/x-raw-yuvroot: MEDIA_ENGINE:find dest, try to linkroot: MEDIA_ENGINE:begin link sinkroot: MEDIA_ENGINE:link padroot: MEDIA_ENGINE:set stateroot: MEDIA_ENGINE:End link sinkroot: INFO:try to link element :qtdemux0 's padroot: try to find compatible element for type:audio/AMRroot: find compatible elememt:oki_amrnb_decroot: INFO:element qtdemux0 is a demuxr, inserting a queueroot: ALP_DEBUG: successed make element type:queue, name:queue1root: INFO:trying to process oki_amrnb_decroot: ALP_DEBUG: successed make element type:oki_amrnb_dec, name:oki_amrnb_dec0root: INFO:linked element oki_amrnb_dec0 on pad queue1:srcroot: INFO:successed add element:oki_amrnb_dec0root: INFO:try to link element :oki_amrnb_dec0 's padroot: INFO:find a raw src, type:audio/x-raw-introot: caps: video/x-h263, width=(int)176, height=(int)144, framerate=(fraction)10/1root: oki_amrnb_dec handling tag eventroot: oki_amrnb_dec handling newsegment eventroot: (<unknown>:1312): GStreamer-CRITICAL **: gst_pad_get_parent_element: assertion `GST_IS_PAD (pad)' failedroot: (<unknown>:1312): GStreamer-CRITICAL **: gst_object_unref: assertion `object != NULL' failedroot: filesrc-->typefind-->qtdemux-->queue-->oki_amrnb_decroot: |->queue-->oki_h263_dec-->fbsinkroot: MM_INFO:auto plug successedroot: MEDIA_ENGINE:pipeline state is pause, begin playing ...root: fbopen:open errorroot: Cannot open fb device.root: 8root: ERROR: error occur in file /home/buildslave/builds/src/platform/libraries/media_session/media_playback.c line 2386, error num:0x45050000root: trace: file /home/buildslave/builds/src/platform/libraries/media_session/media_playbackbase.c line 744, error num:0x45050000root: **** Error: Unknown error (0x45050000), file src/main.c line 164root: ERROR: error occur in file /home/buildslave/builds/src/platform/libraries/media_session/media_playbackbase.c line 778, error num:0x45050000root: **** Error: Unknown error (0x45050000), file src/main.c line 164root: Has Audio: 1root: Has Video: 1root: File Format: 0root: Rect Height: 144root: Rect Width: 176root: Rect X: 0root: Rect Y: 0root: End Time: 0root: Source URL: /var/opt/alp/bundles/com.access.apps.mmtest/rsc/crazyfrog.3gproot: Source URL Length: 64root: Audio Enabled: 0root: Video Enabled: 0root: File Size: 0root: Session Class: 0root: Rotate: 0root: Video Codec: 0root: ********** Audio Manager Test End ***********root: wy:176, wuv:88, hy:144, huv:72, root: ystride:176, uvstride:88, ysize:25344, uvsize:6336root: downroot: downroot: downroot: downroot: downroot: downroot: Media session property get plugin, value: 0root: down