проблема при загрузке текстуры из AVFrame (андроид) - PullRequest
0 голосов
/ 09 апреля 2011

У меня проблема при загрузке данных из AVFrame в openGL:

 int target_width = 320;
                int target_height = 240;
                img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
                                           pCodecCtx->pix_fmt,
                                           target_width, target_height, PIX_FMT_RGBA, SWS_FAST_BILINEAR,
                                           NULL, NULL, NULL);
                if(img_convert_ctx == NULL) {
                    LOGE("could not initialize conversion context\n");
                    return;
                }
                sws_scale(img_convert_ctx, (const uint8_t* const*)pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize);
                //free(data);
                int line=target_width*target_height*4;
                data=(char*)malloc(line);
                if (!data)
                    LOGE("create data frame fail");
                LOGE("successful data");
                filldata(data,pFrameRGB,target_width,target_height);

с функцией filldata as:

    static void filldata(char *data,AVFrame *pFrame,int w,int h)
{uint8_t *frameLine;
    int  yy;
    int i=0;

for (yy = 0; yy < h; yy++) {

frameLine = (uint8_t *)pFrame->data[0] + (yy * pFrame->linesize[0]);

int xx;

for (xx = 0; xx < w; xx++) {
            int in_offset = xx * 4;

data[i++] = frameLine[in_offset];

data[i++] = frameLine[in_offset+1];

data[i++] = frameLine[in_offset+2];

data[i++] = frameLine[in_offset+3];
        }
    }
}

После этого я использую данные для передачи на

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, *wi, *he, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)data);

но он не может отображать текстуру, возможно, данные выше и данные в функции gltextimage2D отличаются. Пожалуйста, помогите мне выяснить, в каком формате находится gltextimage2D, чтобы я мог настроить данные для отображения текстуры. ИЛИ у кого-нибудь есть пример кода, чтобы показать мне.

Ответы [ 2 ]

0 голосов
/ 25 марта 2013

Слово гласит, что вы должны использовать измерения степени 2 при указании ширины и высоты для sws_getContext (). В случае, если это не решит вашу проблему, ссылка, указанная Android007, является хорошей, но вы также можете взглянуть на https://code.google.com/p/android-native-egl-example/.

0 голосов
/ 13 апреля 2011

Мне не понятно, но вы можете попробовать использовать richq's glbuffer , который я использую в своем приложении видеоплеера.Он работал для меня, а также имеет лучшую частоту кадров.

Попробуйте и удачи с ним.

...