Russian Qt Forum
Ноябрь 24, 2024, 21:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Видео декодер NVidia CUDA  (Прочитано 3256 раз)
Ubuntu_linux
Гость
« : Апрель 23, 2013, 23:06 »

Вот пишу видео декодер с использованием ускорения на видео картах NVidia c CUDA  технологией.
Но возникла проблемка, в Visual Studio (я новичок в студии) прога вылетает с ошибкой доступа к памяти в этом участке кода:

Помогите, как определить точку вилета в студии?

Код
C++ (Qt)
void VideoDecoder::parsePacket(AVPacket *pPacket,CUvideoparser *pParser,CUvideoctxlock pCtx){
//
// CUresult CUDAAPI cuvidParseVideoData(CUvideoparser obj, CUVIDSOURCEDATAPACKET *pPacket);
//typedef struct _CUVIDSOURCEDATAPACKET
//{
//    unsigned long flags;            // Combination of CUVID_PKT_XXX flags
//    unsigned long payload_size;     // number of bytes in the payload (may be zero if EOS flag is set)
//    const unsigned char *payload;   // Pointer to packet payload data (may be NULL if EOS flag is set)
//   CUvideotimestamp timestamp;     // Presentation timestamp (10MHz clock), only valid if CUVID_PKT_TIMESTAMP flag is set
//} CUVIDSOURCEDATAPACKET;
CUresult cu_result;
CUdeviceptr cu_memory;
 
//cu_result=cuMemAlloc(&cu_memory,(size_t)pPacket->size);
//if(cu_result!=CUDA_SUCCESS){printf("==>CUDA: cuMemAlloc(...) error!, code: %d\n",cu_result);exit(-1);}
 
//cu_result=cuMemcpyHtoD(cu_memory,pPacket->data,(size_t)pPacket->size);
//if(cu_result!=CUDA_SUCCESS){printf("==>CUDA: cuMemcpyHtoD(...) error!, code: %d\n",cu_result);exit(-1);}
 
CUVIDSOURCEDATAPACKET *cu_packet=new CUVIDSOURCEDATAPACKET;
memset(cu_packet,0,sizeof(CUVIDSOURCEDATAPACKET));
cu_packet->flags=CUVID_PKT_TIMESTAMP;
cu_packet->payload_size=pPacket->size;
cu_packet->payload=pPacket->data;//(unsigned char*)cu_memory;//
cu_packet->timestamp=0;
printf("CUDA: before cuvidParseVideoData(...)\n, ");
//uint8_t *tmp={0};
//memset(tmp,0,pPacket->size);
//memcpy((void *)cu_packet->payload,pPacket->data,pPacket->size);
//memcpy(tmp,pPacket->data,(size_t)pPacket->size);
 
//memcpy((uint8_t*)cu_packet.payload, pPacket->data,pPacket->size);
//cuvidCtxLock(pCtx,0);
cu_result=cuvidParseVideoData(pParser,cu_packet);
if(cu_result!=CUDA_SUCCESS){printf("==>CUDA: Can't parse packet!, code: %d\n");exit(-1);}
printf("CUDA: after cuvidParseVideoData(...)\n");
//cuvidCtxUnlock(pCtx,0);
}//parsePacket
 
 
Записан
Bepec
Гость
« Ответ #1 : Апрель 24, 2013, 06:05 »

Ставим точку остановки (insert breakpoint) в начале функции и потом нажимая F10 (шаг вперед) и F11 (шаг внутрь) проходим всю функцию. На какой строке вылет - повторяем процесс, нажимая на той строке F11. И так далее.

PS т.е. F10 идёт к следующей команде в данной функции. А F11 заходит в вызванную функцию.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.113 секунд. Запросов: 20.