1

OMX は、次の定義を持つ構造体を提供します

/* Parameter specifying the content URI to use. */
typedef struct OMX_PARAM_CONTENTURITYPE
{
OMX_U32 nSize;
/**< size of the structure in bytes */
OMX_VERSIONTYPE nVersion; /**< OMX specification version information */
OMX_U8 contentURI[1];     /**< The URI name*/
}OMX_PARAM_CONTENTURITYPE;
OMX_IndexParamContentURI,
/**< The URI that identifies the target content. Data type is OMX_PARAM_CONTENTURITYPE. */

設定する定数文字配列があります。

char* filename = "/test.bmp";

私が理解している限り、memcopy ファイル名を struct.contentURI に設定し、それに応じて struct.size を更新する必要があります。どうすればいいですか?

よろしくお願いします

4

1 に答える 1

1

最初に、固定サイズのパーツとファイル名を格納するのに十分なメモリを割り当てる必要があります。

size_t uri_size = strlen(filename) + 1;
size_t param_size = sizeof(OMX_PARAM_CONTENTURITYPE) + uri_size - 1;
OMX_PARAM_CONTENTURITYPE * param = malloc(param_size);

終端文字を含めるために 1 を加算し、構造体に 1 バイトの配列が既に含まれているため 1 を減算します。

C++ ではキャストが必要で、例外の安全性のためにスマート ポインターまたはベクターを使用する必要があります。

std::vector<char> memory(param_size);
OMX_PARAM_CONTENTURITYPE * param = 
    reinterpret_cast<OMX_PARAM_CONTENTURITYPE *>(&memory[0]);

次に、フィールドに入力できます。

param->nSize = param_size;
param->nVersion = whatever;
memcpy(param->contentURI, filename, uri_size);

free(param)終わったら忘れずに。

于 2012-12-21T15:49:18.567 に答える