GStreamer: установка значения типа Enum

Модератор: Модераторы разделов

IMB
Сообщения: 2567
ОС: Debian

GStreamer: установка значения типа Enum

Сообщение IMB »

Доброго дня!
В описании плагина GStreamer следующее:

Код: Выделить всё

 codec-type          : selects the codec type for encoding
flags: readable, writable
Enum "MfwGstVpuEncCodecs" Default: 2, "std_avc" Current: 2, "std_avc"
(0): std_mpeg4        - STD_MPEG4
(1): std_h263         - STD_H263
(2): std_avc          - STD_AVC
(7): std_mjpg         - STD_MJPG

При запуске pipeline из консоли я указывал codec-type=std_avc и запускалось кодирование H264.
Сейчас я пишу программу кодирования на C в которой устанавливаю этот же параметр:

Код: Выделить всё

//g_object_set(G_OBJECT(enc), "codec-type", "std_avc", NULL);
g_object_set(G_OBJECT(enc), "codec-type", G_TYPE_ENUM, "std_avc", NULL);

Сборка проходит без предупреждений и ошибок, но при старте программы в консоль выдаётся предупреждение:

Код: Выделить всё

(camerad:2284): GLib-GObject-WARNING **: value "((MfwGstVpuEncCodecs) 48)" of type `MfwGstVpuEncCodecs' is invalid or out of range for property `codec-type' of type `MfwGstVpuEncCodecs'
(camerad:2284): GLib-GObject-WARNING **: IA__g_object_set_valist: object class `MfwGstVPU_Enc' has no property named `std_avc'

Кодирование начитается, так как устанвливается значение по-умолчанию.
Если я изменяю установку параметра на:

Код: Выделить всё

g_object_set(G_OBJECT(enc), "codec-type", 2, NULL);

То предупреждений в консоли нет.
Установить необходимый кодек в цифровом виде не сложно, но строка более наглядна.
Как правильно необходимо устанавливать параметр типа Enum в GStreamer?
Спасибо.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5427
ОС: Gentoo

Re: GStreamer: установка значения типа Enum

Сообщение /dev/random »

Код: Выделить всё

g_object_set(G_OBJECT(enc), "codec-type", STD_AVC, NULL);

Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: GStreamer: установка значения типа Enum

Сообщение IMB »

Спасибо, но что-то я не нашёл определения STD_AVC, странно это.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5427
ОС: Gentoo

Re: GStreamer: установка значения типа Enum

Сообщение /dev/random »

IMB писал(а):
24.08.2012 09:58
Спасибо, но что-то я не нашёл определения STD_AVC, странно это.

Вводите имя константы в гугл, и первая же ссылка говорит, что она определена в vpu_lib.h
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: GStreamer: установка значения типа Enum

Сообщение IMB »

В двойне странно, так как у меня так:

Код: Выделить всё

$ pwd
/opt/IMX53/ltib/rpm/BUILD/linux-2.6.35.3

$ find . -name vpu.h
./include/config/mxc/vpu.h

$ ls -l include/config/mxc/vpu.h
-rw-r--r-- 1 kirill kirill 0 Jul  2 09:47 include/config/mxc/vpu.h

$ grep STD_AVC -rnI .

И в директории плагинов:

Код: Выделить всё

$ pwd
/opt/IMX53/ltib/rpm/BUILD/gst-fsl-plugin-2.0.3

$ grep STD_AVC -rnI .
./src/video/vpu_enc/src/mfw_gst_vpu_encoder.c:82:#define VPU_PIC_TYPE ((vpu_enc->codec == STD_AVC) ? ((vpu_enc->outputInfo->picType>>1)&0x3) : ((vpu_enc->outputInfo->picType)&0x3) )
./src/video/vpu_enc/src/mfw_gst_vpu_encoder.c:83:#define VPU_PIC_TYPE_IDR ( (vpu_enc->codec == STD_AVC) ? (!(vpu_enc->outputInfo->picType&0x1)) : (VPU_PIC_TYPE == 0))
./src/video/vpu_enc/src/mfw_gst_vpu_encoder.c:577:  if (vpu_enc->codec == STD_AVC) {
./src/video/vpu_enc/src/mfw_gst_vpu_encoder.c:823:  } else if (vpu_enc->codec != STD_AVC) {
./src/video/vpu_enc/src/mfw_gst_vpu_encoder.c:1510:  } else if (vpu_enc->codec == STD_AVC) {
./src/video/vpu_enc/src/mfw_gst_vpu_encoder.c:1649:          if (vpu_enc->codec == STD_AVC) {
./src/video/vpu_enc/src/mfw_gst_vpu_encoder.c:1811:  else if (vpu_enc->codec == STD_AVC)
./src/video/vpu_enc/src/mfw_gst_vpu_encoder.c:1830:  } else if (vpu_enc->codec == STD_AVC) {
./src/video/vpu_enc/src/mfw_gst_vpu_encoder.c:3264:      {STD_AVC, STR (STD_AVC), "std_avc"},
./src/video/vpu_enc/src/mfw_gst_vpu_encoder.c:3274:      {STD_AVC, STR (STD_AVC), "std_avc"},
./src/video/vpu_enc/src/mfw_gst_vpu_encoder.c:3362:          mfw_gst_vpuenc_codec_get_type (), STD_AVC, G_PARAM_READWRITE));
./src/video/vpu_enc/src/mfw_gst_vpu_encoder.c:3637:  vpu_enc->codec = STD_AVC;
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:866:  if (vpu_dec->codec == STD_AVC) {
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:912:  if ((vpu_dec->codec == STD_AVC) || (vpu_dec->codec == STD_RV)) {
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:1814:    if (vpu_dec->codec == STD_AVC) {
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:1846:  } else if (vpu_dec->codec == STD_AVC) {
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:1920:  if (vpu_dec->codec == STD_AVC) {
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:2283:            || (vpu_dec->codec == STD_AVC))) {
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:2297:    if (vpu_dec->codec == STD_AVC) {
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:2958:  } else if (vpu_dec->codec == STD_AVC) {
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:4410:    vpu_dec->codec = STD_AVC;
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:4557:  if (vpu_dec->codec == STD_AVC) {
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:4804:      {STD_AVC, STR (STD_AVC), "std_avc"},
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:4818:      {STD_AVC, STR (STD_AVC), "std_avc"},
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:4830:      {STD_AVC, STR (STD_AVC), "std_avc"},
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:4933:          MFW_GST_TYPE_VPU_DEC_CODEC, STD_AVC, G_PARAM_READWRITE));
./src/video/vpu_dec.full/src/mfw_gst_vpu_decoder.c:5064:  vpu_dec->codec = STD_AVC;
./src/video/vpu_dec.full/src/mfw_gst_vpu_thread.h:62:#define VPU_PIC_TYPE ((vpu_dec->codec == STD_AVC) ? \
./src/video/vpu_dec.full/src/mfw_gst_vpu_thread.h:67:#define VPU_PIC_TYPE_IDR ( (vpu_dec->codec == STD_AVC) ? (!(vpu_dec->outputInfo->picType&0x1)) : (VPU_PIC_TYPE == 0))
./src/video/vpu_dec.full/src/mfw_gst_vpu_thread.h:69:#define VPU_PIC_TYPE ((vpu_dec->codec == STD_AVC) ? \
./src/video/vpu_dec.full/src/mfw_gst_vpu_thread.h:74:#define VPU_PIC_TYPE_IDR ( (vpu_dec->codec == STD_AVC) ? (!(picType&0x1)) : (VPU_PIC_TYPE == 0))

Ну да не суть, может быть позже "свежим взглядом" найду. :)
Спасибо сказали: