예제 #1
0
    def run(self, element, context):
        alias = element.get('comp')
        name = context.cnames[alias]
        evtstr = element.get('evt')
        log_api ("%s '%s' '%s'" \
            % (element.tag, name, evtstr ))
        handle = context.handles[alias]
        evt = get_il_enum_from_string(evtstr)

        if (handle != None):
            if (evt == OMX_EventCmdComplete):
                context.cmdevents[handle.value].clear()

            elif (evt == OMX_EventBufferFlag):
                context.eosevents[handle.value].clear()

            elif (evt == OMX_EventPortSettingsChanged):
                context.settings_changed_events[handle.value].clear()

            else:
                log_line ()
                log_line ("Unhandled event %s" % (evtstr))
                return get_il_enum_from_string("OMX_ErrorNotImplemented")
        else:
            log_line ()
            log_line ("Unknown handle")
            return get_il_enum_from_string("OMX_ErrorUndefined")

        return 0
예제 #2
0
    def run(self, element, context):
        alias = element.get('comp')
        name = context.cnames[alias]
        cmdstr = element.get('cmd')
        nparam1str = element.get('nparam1')
        cmddatastr = element.get('cmddata')
        log_api ("%s '%s' '%s' '%s' '%s'" \
                       % (element.tag, name, cmdstr, nparam1str, cmddatastr))
        handle = context.handles[alias]
        cmd = get_il_enum_from_string(cmdstr)
	if (cmd == OMX_CommandPortEnable or cmd == OMX_CommandPortDisable):
            # nParam1 is the port index to be enabled/disabled, not an enum
            nparam1 = int(nparam1str)
	else:
            nparam1 = get_il_enum_from_string(nparam1str)

        if (handle != None):
            context.cmdevents[handle.value].clear()
            omxerror = OMX_SendCommand(handle, cmd, nparam1, None)
            interror = int(omxerror & 0xffffffff)
            err = get_string_from_il_enum(interror, "OMX_Error")

        log_result (element.tag + " '" + name + "'", err)

        if (err == "OMX_ErrorNone"):
            return 0
        else:
            return interror
예제 #3
0
    def run(self, element, context):
        alias = element.get('comp')
        name = context.cnames[alias]
        evtstr = element.get('evt')
        log_api ("%s '%s' '%s'" \
            % (element.tag, name, evtstr ))
        handle = context.handles[alias]
        evt = get_il_enum_from_string(evtstr)

        if (handle != None):
            if (evt == OMX_EventCmdComplete):
                context.cmdevents[handle.value].clear()

            elif (evt == OMX_EventBufferFlag):
                context.eosevents[handle.value].clear()

            elif (evt == OMX_EventPortSettingsChanged):
                context.settings_changed_events[handle.value].clear()

            elif (evt == OMX_EventPortFormatDetected):
                context.format_detected_events[handle.value].clear()

            else:
                log_line()
                log_line("Unhandled event %s" % (evtstr))
                return get_il_enum_from_string("OMX_ErrorNotImplemented")
        else:
            log_line()
            log_line("Unknown handle")
            return get_il_enum_from_string("OMX_ErrorUndefined")

        return 0
예제 #4
0
def encode_video_portdef (param_struct, param2_type, element):
    for name, _ in param2_type._fields_:
        for name2, val2 in element.items():
            if (name2 == name):
                if (name == "eColorFormat"):
                    val2 = get_il_enum_from_string(val2)
                if (name == "eCompressionFormat"):
                    val2 = get_il_enum_from_string(val2)

                setattr(param_struct.format.video, name, int(val2))
예제 #5
0
    def run(self, element, context):
        indexstr = element.get('index')
        alias = element.get('alias')
        name = context.cnames[alias]
        portstr = element.get('port')

        log_api ("%s '%s' '%s:Port-%d'" \
                        % (element.tag, indexstr, name, int(portstr)))

        handle = context.handles[alias]
        index = get_il_enum_from_string(indexstr)

        param_type         = omxil12_indexes[indexstr]
        param_struct       = param_type()
        param_struct.nSize = sizeof(param_type)

        if (portstr != None):
            param_struct.nPortIndex = int(portstr)

        if (handle != None):
            omxerror = OMX_GetConfig(handle, index, byref(param_struct))
            interror = int(omxerror & 0xffffffff)
            err = get_string_from_il_enum(interror, "OMX_Error")

            for name, val in param_type._fields_:
                for name2, val2 in element.items():
                    if (name2 == name):
                        getattr(param_struct, name, int(val2))


            omxerror = OMX_GetConfig(handle, index, byref(param_struct))
            interror = int(omxerror & 0xffffffff)
            domstr = ""
            err = get_string_from_il_enum(interror, "OMX_Error")
            log_line ()
            log_line ("%s" % param_struct.__class__.__name__, 1)
            for name, val in param_type._fields_:
                if (name == "nVersion"):
                    log_line ("%s -> '%08x'" \
                                    % (name, param_struct.nVersion.nVersion), 1)
                else:
                    log_line ("%s -> '%s'" \
                        % (name, getattr(param_struct, name)), 1)

            log_result(element.tag, err)

            if (err == "OMX_ErrorNone"):
                return 0
            else:
                return interror
        else:
            log_line ("%s -> '%s %s'" \
                          % (element.tag, \
                                 "Could not find handle for", context.cnames[alias]))
            return get_il_enum_from_string("OMX_ErrorUndefined")
예제 #6
0
    def run(self, element, context):
        indexstr = "OMX_IndexParamContentURI"
        alias = element.get('alias')
        name = context.cnames[alias]
#        This param struct does not have a port index.
#        portstr = element.get('port')
        log_api ("%s '%s' '%s'" \
                       % (element.tag, indexstr, name))
        handle = context.handles[alias]
        index = get_il_enum_from_string(indexstr)
        param_type = OMX_PARAM_CONTENTURITYPE
        param_struct = param_type()
        param_struct.nSize = sizeof(param_type)

#        This param struct does not have a port index.
#        if (portstr != None):
#            param_struct.nPortIndex = int(portstr)

        if (handle != None):
            omxerror = OMX_GetParameter(handle, index, byref(param_struct))
            interror = int(omxerror & 0xffffffff)
            err = get_string_from_il_enum(interror, "OMX_Error")

            uristr = c_char_p()
            uristr = cast(param_struct.contentURI, c_char_p)

            log_line ()
            log_line ("%s" % param_struct.__class__.__name__, 1)
            for name, _ in param_type._fields_:
                if (name == "nVersion"):
                    log_line ("%s -> '%08x'" \
                                    % (name, param_struct.nVersion.nVersion), 1)
                elif (name == "contentURI"):
                    log_param (name, uristr.value, 1)
                else:
                    log_param (name, str(getattr(param_struct, name)), 1)

            log_result (element.tag, err)
            if (err == "OMX_ErrorNone"):
                return 0
            else:
                return interror

        else:
            log_line ("%s -> '%s %s'" \
                % (element.tag, \
                       "Could not find handle for", context.cnames[alias]))
            return get_il_enum_from_string("OMX_ErrorUndefined")
예제 #7
0
    def run(self, element, context):
        indexstr = "OMX_IndexParamContentURI"
        alias = element.get('alias')
        name = context.cnames[alias]
        log_api ("%s '%s' '%s'" \
                       % (element.tag, indexstr, name))
        handle = context.handles[alias]
        index = get_il_enum_from_string(indexstr)
        param_type = OMX_PARAM_CONTENTURITYPE
        param_struct = param_type()
        param_struct.nSize = sizeof(param_type)

        if (handle != None):
            omxerror = OMX_GetParameter(handle, index, byref(param_struct))
            interror = int(omxerror & 0xffffffff)
            err = get_string_from_il_enum(interror, "OMX_Error")

            uristr = c_char_p()
            uristr = cast(param_struct.contentURI, c_char_p)

            log_line ()
            log_line ("%s" % param_struct.__class__.__name__, 1)
            for name, _ in param_type._fields_:
                if (name == "nVersion"):
                    log_line ("%s -> '%08x'" \
                                    % (name, param_struct.nVersion.nVersion), 1)
                elif (name == "URI"):
                    log_param (name, uristr.value, 1)
                else:
                    log_param (name, str(getattr(param_struct, name)), 1)

            log_result (element.tag, err)
            if (err == "OMX_ErrorNone"):
                return 0
            else:
                return interror

        else:
            log_line ("%s -> '%s %s'" \
                % (element.tag, \
                       "Could not find handle for", context.cnames[alias]))
            return get_il_enum_from_string("OMX_ErrorUndefined")
예제 #8
0
    def run(self, element, context):
        alias = element.get('comp')
        name = context.cnames[alias]
        errstr = element.get('err')
        ndata2str = element.get('ndata2')
        log_api ("%s '%s' '%s' '%s'" \
            % (element.tag, name, errstr, ndata2str))
        handle = context.handles[alias]
        err = get_il_enum_from_string(errstr)
        # TODO: Check we are receiving an error code
        #err = get_string_from_il_enum(interror, "OMX_Error")

        if (handle != None):
            context.ignored_error_events[handle.value].append(err)
        else:
            log_line ()
            log_line ("Unknown handle")
            return get_il_enum_from_string("OMX_ErrorUndefined")

        return 0
예제 #9
0
    def run(self, element, context):
        alias = element.get('comp')
        name = context.cnames[alias]
        errstr = element.get('err')
        ndata2str = element.get('ndata2')
        log_api ("%s '%s' '%s' '%s'" \
            % (element.tag, name, errstr, ndata2str))
        handle = context.handles[alias]
        err = get_il_enum_from_string(errstr)
        # TODO: Check we are receiving an error code
        #err = get_string_from_il_enum(interror, "OMX_Error")

        if (handle != None):
            context.ignored_error_events[handle.value].append(err)
        else:
            log_line()
            log_line("Unknown handle")
            return get_il_enum_from_string("OMX_ErrorUndefined")

        return 0
예제 #10
0
    def run(self, element, context):
        indexstr = "OMX_IndexParamStandardComponentRole"
        alias = element.get('alias')
        name = context.cnames[alias]
        rolestr = element.get('role')

        log_api ("%s '%s' '%s'" \
                        % (element.tag, name, rolestr))

        handle = context.handles[alias]
        index = get_il_enum_from_string(indexstr)
        param_type = OMX_PARAM_COMPONENTROLETYPE
        param_struct = param_type()
        param_struct.nVersion.nVersion = OMX_VERSION
        param_struct.nSize = sizeof(param_type)

        if (handle != None):
            omxerror = OMX_GetParameter(handle, index, byref(param_struct))
            interror = int(omxerror & 0xffffffff)
            err = get_string_from_il_enum(interror, "OMX_Error")

            for name, _ in param_type._fields_:
                for name2, val2 in element.items():
                    if (name != "cRole"):
                        if (name2 == name):
                            setattr(param_struct, name, int(val2))
                    else:
                        libc = CDLL('libc.so.6')
                        libc.strcpy(cast(param_struct.cRole, c_char_p),
                                    rolestr)

            omxerror = OMX_SetParameter(handle, index, byref(param_struct))
            interror = int(omxerror & 0xffffffff)
            err = get_string_from_il_enum(interror, "OMX_Error")

            rolefield = c_char_p()
            rolefield = cast(param_struct.cRole, c_char_p)

            log_line ()
            log_line ("%s" % param_struct.__class__.__name__, 1)
            for name, _ in param_type._fields_:
                if (name == "nVersion"):
                    log_line ("%s -> '%08x'" \
                                    % (name, param_struct.nVersion.nVersion), 1)
                elif (name == "cRole"):
                    log_param (name, rolefield.value, 1)
                else:
                    log_param (name, str(getattr(param_struct, name)), 1)

            log_result(element.tag, err)

            if (err == "OMX_ErrorNone"):
                return 0
            else:
                return interror

        else:
            log_line ("%s -> '%s %s'" \
                % (element.tag, \
                       "Could not find handle for", context.cnames[alias]))
            return get_il_enum_from_string("OMX_ErrorUndefined")
예제 #11
0
    def run(self, element, context):
        indexstr = "OMX_IndexParamContentURI"
        uristr = element.get('uri')
        alias = element.get('alias')
        name = context.cnames[alias]

        # Replace '$USER' and '$HOME' strings wih the actual representations
        uristr = re.sub("\$USER", pwd.getpwuid(os.getuid())[0], uristr, 1)
        uristr = re.sub("\$HOME", pwd.getpwuid(os.getuid())[5], uristr, 1)

        log_api ("%s '%s' '%s' '%s'" \
                       % (element.tag, indexstr, name, uristr))

        handle = context.handles[alias]
        index = get_il_enum_from_string(indexstr)
        param_type = OMX_PARAM_CONTENTURITYPE
        param_struct = param_type()
        param_struct.nSize = sizeof(param_type)

        if (handle != None):
            omxerror = OMX_GetParameter(handle, index, byref(param_struct))
            interror = int(omxerror & 0xffffffff)
            err = get_string_from_il_enum(interror, "OMX_Error")

            for name, _ in param_type._fields_:
                for name2, val2 in element.items():
                    if (name != "contentURI"):
                        if (name2 == name):
                            setattr(param_struct, name, int(val2))
                    else:
                        libc = CDLL('libc.so.6')
                        libc.strcpy(cast(param_struct.contentURI, c_char_p),
                                    uristr)

            omxerror = OMX_SetParameter(handle, index, byref(param_struct))
            interror = int(omxerror & 0xffffffff)
            err = get_string_from_il_enum(interror, "OMX_Error")

            urifield = c_char_p()
            urifield = cast(param_struct.contentURI, c_char_p)

            log_line ()
            log_line ("%s" % param_struct.__class__.__name__, 1)
            for name, _ in param_type._fields_:
                if (name == "nVersion"):
                    log_line ("%s -> '%08x'" \
                                    % (name, param_struct.nVersion.nVersion), 1)
                elif (name == "contentURI"):
                    log_param (name, urifield.value, 1)
                else:
                    log_param (name, str(getattr(param_struct, name)), 1)

            log_result(element.tag, err)

            if (err == "OMX_ErrorNone"):
                return 0
            else:
                return interror

        else:
            log_line ("%s -> '%s %s'" \
                          % (element.tag, \
                                 "Could not find handle for", \
                                 context.cnames[alias]))
            return get_il_enum_from_string("OMX_ErrorUndefined")
예제 #12
0
    def run(self, element, context):
        indexstr = element.get('index')
        alias = element.get('alias')
        name = context.cnames[alias]
        portstr = element.get('port')
        log_api ("%s '%s' '%s:Port-%d'" \
                       "" % (element.tag, indexstr, name, int(portstr)))
        handle = context.handles[alias]
        index = get_il_enum_from_string(indexstr)

        param_type         = omxil12_indexes[indexstr]
        param_struct       = param_type()
        param_struct.nSize = sizeof(param_type)

        if (portstr != None):
            param_struct.nPortIndex = int(portstr)

        if (handle != None):
            omxerror = OMX_GetParameter(handle, index, byref(param_struct))
            interror = int(omxerror & 0xffffffff)
            err = get_string_from_il_enum(interror, "OMX_Error")
            log_line ()
            log_line ("%s" % param_struct.__class__.__name__, 1)
            for name, _ in param_type._fields_:
                if (name == "nVersion"):
                    log_line ("%s -> '%08x'" \
                        % (name, param_struct.nVersion.nVersion),1)
                elif (name == "eDir"):
                    dirstr = get_string_from_il_enum (\
                            getattr(param_struct, name), "OMX_Dir")
                    log_param (name, dirstr, 1)
                elif (name == "eDomain"):
                    domstr = get_string_from_il_enum (\
                                getattr(param_struct, name), "OMX_PortDomain")
                    log_line ("%s -> '%s'" % (name, domstr),1)
                elif (name == "format"):

                    if (domstr == "OMX_PortDomainAudio"):
                        param2_type = OMX_AUDIO_PORTDEFINITIONTYPE
                        decode_audio_portdef (param_struct, param2_type)
                    elif (domstr == "OMX_PortDomainVideo"):
                        param2_type = OMX_VIDEO_PORTDEFINITIONTYPE
                        decode_video_portdef (param_struct, param2_type)
                    elif (domstr == "OMX_PortDomainImage"):
                        param2_type = OMX_IMAGE_PORTDEFINITIONTYPE
                        decode_image_portdef (param_struct, param2_type)
                    elif (domstr == "OMX_PortDomainOther"):
                        param2_type = OMX_OTHER_PORTDEFINITIONTYPE
                        decode_other_portdef (param_struct, param2_type)

                else:
                    log_line ("%s -> '%s'" \
                        % (name, getattr(param_struct, name)),1)

            log_result(element.tag, err)

            if (err == "OMX_ErrorNone"):
                return 0
            else:
                return interror

        else:
            log_line ("%s -> '%s %s'" \
                % (element.tag, \
                       "Could not find handle for", context.cnames[alias]),1)
            return get_il_enum_from_string("OMX_ErrorUndefined")
예제 #13
0
    def run (self, manager):

        if self.alias not in manager.aliases2ports:
            print "allocate_buffer: Wrong alias specified"
            sys.exit(1)

        if self.pid not in manager.aliases2ports[self.alias]:
            print "allocate_buffer: Wrong port index specified"
            sys.exit(1)

        port = manager.aliases2ports[self.alias][self.pid]

        config = get_config()
        handle = config.handles[self.alias]

        # Retrieve the port definition
        indexstr                = "OMX_IndexParamPortDefinition"
        index                   = get_il_enum_from_string(indexstr)
        param_type              = omxil12_indexes[indexstr]
        param_struct            = param_type()
        param_struct.nSize      = sizeof(param_type)
        param_struct.nPortIndex = int(self.pid)

        omxerror = OMX_GetParameter(handle, index, byref(param_struct))
        interror = int(omxerror & 0xffffffff)
        err = get_string_from_il_enum(interror, "OMX_Error")

        port.nBufferCountActual = param_struct.nBufferCountActual
        port.nBufferSize        = param_struct.nBufferSize

        dirstr = get_string_from_il_enum \
            (getattr(param_struct, "eDir"), "OMX_Dir")

        if "OMX_DirInput" == dirstr:
            port.is_input = True
        else:
            port.is_input       = False

        if self.howmany.lower() == "all":
            self.howmany = port.nBufferCountActual
        else:
            self.howmany = int(self.howmany)
            log_line ("Allocate %d total" % self.howmany)

        if self.howmany == 0:
            print "allocate_buffer: Need to allocate at least 1 buffer"
            sys.exit(1)

        if port.allocation_count + self.howmany > \
                port.nBufferCountActual:
            print "allocate_buffer: Need to allocate at most " \
                "nBufferCountActual buffers"
            sys.exit(1)

        libc = CDLL('libc.so.6')
        for i in range(port.allocation_count,
                       port.allocation_count + self.howmany):

            p_header = POINTER(OMX_BUFFERHEADERTYPE)()

            if port.allocator:
                buf = (c_ubyte * port.nBufferSize)()
                omxerror = OMX_UseBuffer(handle,
                                         byref(p_header),
                                         param_struct.nPortIndex,
                                         None,
                                         port.nBufferSize,
                                         buf)
            else:
                omxerror = OMX_AllocateBuffer(handle,
                                              byref(p_header),
                                              param_struct.nPortIndex,
                                              None,
                                              port.nBufferSize)

            port.headers.append(p_header)
            port.buffers.append(buf)

        port.allocation_count += self.howmany
예제 #14
0
    def run(self, element, context):
        indexstr = element.get('index')
        alias = element.get('alias')
        name = context.cnames[alias]
        portstr = element.get('port')
        log_api ("%s '%s' '%s:Port-%d'" \
                       "" % (element.tag, indexstr, name, int(portstr)))
        handle = context.handles[alias]
        index = get_il_enum_from_string(indexstr)

        param_type = omxil12_indexes[indexstr]
        param_struct = param_type()
        param_struct.nSize = sizeof(param_type)

        if (portstr != None):
            param_struct.nPortIndex = int(portstr)

        if (handle != None):
            omxerror = OMX_GetParameter(handle, index, byref(param_struct))
            interror = int(omxerror & 0xffffffff)
            err = get_string_from_il_enum(interror, "OMX_Error")
            log_line()
            log_line("%s" % param_struct.__class__.__name__, 1)
            for name, _ in param_type._fields_:
                if (name == "nVersion"):
                    log_line ("%s -> '%08x'" \
                        % (name, param_struct.nVersion.nVersion),1)
                elif (name == "eDir"):
                    dirstr = get_string_from_il_enum (\
                            getattr(param_struct, name), "OMX_Dir")
                    log_param(name, dirstr, 1)
                elif (name == "eDomain"):
                    domstr = get_string_from_il_enum (\
                                getattr(param_struct, name), "OMX_PortDomain")
                    log_line("%s -> '%s'" % (name, domstr), 1)
                elif (name == "format"):

                    if (domstr == "OMX_PortDomainAudio"):
                        param2_type = OMX_AUDIO_PORTDEFINITIONTYPE
                        decode_audio_portdef(param_struct, param2_type)
                    elif (domstr == "OMX_PortDomainVideo"):
                        param2_type = OMX_VIDEO_PORTDEFINITIONTYPE
                        decode_video_portdef(param_struct, param2_type)
                    elif (domstr == "OMX_PortDomainImage"):
                        param2_type = OMX_IMAGE_PORTDEFINITIONTYPE
                        decode_image_portdef(param_struct, param2_type)
                    elif (domstr == "OMX_PortDomainOther"):
                        param2_type = OMX_OTHER_PORTDEFINITIONTYPE
                        decode_other_portdef(param_struct, param2_type)

                else:
                    log_line ("%s -> '%s'" \
                        % (name, getattr(param_struct, name)),1)

            log_result(element.tag, err)

            if (err == "OMX_ErrorNone"):
                return 0
            else:
                return interror

        else:
            log_line ("%s -> '%s %s'" \
                % (element.tag, \
                       "Could not find handle for", context.cnames[alias]),1)
            return get_il_enum_from_string("OMX_ErrorUndefined")
예제 #15
0
    def run (self, manager):

        if self.alias not in manager.aliases2ports:
            print "use_egl_images: Wrong alias specified"
            sys.exit(1)

        if self.pid not in manager.aliases2ports[self.alias]:
            print "use_egl_images: Wrong port index specified"
            sys.exit(1)

        port = manager.aliases2ports[self.alias][self.pid]

        config = get_config()
        handle = config.handles[self.alias]

        # Retrieve the port definition
        indexstr                = "OMX_IndexParamPortDefinition"
        index                   = get_il_enum_from_string(indexstr)
        param_type              = omxil12_indexes[indexstr]
        param_struct            = param_type()
        param_struct.nSize      = sizeof(param_type)
        param_struct.nPortIndex = int(self.pid)

        omxerror = OMX_GetParameter(handle, index, byref(param_struct))
        interror = int(omxerror & 0xffffffff)
        err = get_string_from_il_enum(interror, "OMX_Error")

        port.nBufferCountActual = param_struct.nBufferCountActual
        port.nBufferSize        = param_struct.nBufferSize

        dirstr = get_string_from_il_enum \
            (getattr(param_struct, "eDir"), "OMX_Dir")

        if "OMX_DirInput" == dirstr:
            port.is_input = True
        else:
            port.is_input = False

        if self.howmany.lower() == "all":
            self.howmany = port.nBufferCountActual
        else:
            self.howmany = int(self.howmany)
            log_line ("Allocate %d total" % self.howmany)

        if self.howmany == 0:
            print "use_egl_images: Need to allocate at least 1 buffer"
            sys.exit(1)

        if port.allocation_count + self.howmany > \
                port.nBufferCountActual:
            print "use_egl_images: Need to allocate at most " \
                "nBufferCountActual buffers"
            sys.exit(1)

        libc = CDLL('libc.so.6')
        for i in range(port.allocation_count,
                       port.allocation_count + self.howmany):

            p_header = POINTER(OMX_BUFFERHEADERTYPE)()

            if port.allocator:
                print "use_egl_images: Port can't be allocate buffers. " \
                    "Invalid test setup."
                sys.exit(1)

            eglimage = (c_ubyte * port.nBufferSize)()
            omxerror = OMX_UseEGLImage(handle,
                                       byref(p_header),
                                       param_struct.nPortIndex,
                                       None,
                                       eglimage)

            port.headers.append(p_header)
            port.buffers.append(eglimage)

        port.allocation_count += self.howmany