Click here to Skip to main content
15,867,568 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I got the latest version binaries of ffmpeg from here[^]. When I examine CPU and GPU usages when I play a video by its ffplay, I see that GPU is used during play. Not much using of CPU also indicates it. But when I get the latest version sources from the original site, I can't use GPU. To clarify, I include a player test program I wrote until now. When I uncomment the line which includes avcodec_find_decoder_by_name("h264_cuvid"), I get error -1. The error happens in avcodec_open2 with the description of Operation not permitted.
CString format(const char *fmt, ...) 
{ 
	va_list ap;
	va_start(ap, fmt);
	char buf[512];
	vsnprintf(buf, sizeof(buf), fmt, ap);
	va_end(ap);
	return buf;
}

int CplayerDlg::play()
{
	FILE *fp = fopen("video_files/1010.brf", "rb");
	if (!fp)
	{
		AfxMessageBox("can't open video file");
		return -1;
	}
	RecordFrame frame;
	RecordHeader hdr;
	fread(&frame, sizeof(frame), 1, fp);
	if (frame.frameType != FRAME_TYPE_HEADER)
	{
		AfxMessageBox("record file doesn't begin with header");
		return -1;
	}
	fread(&hdr, sizeof(hdr), 1, fp);
	GetDlgItem(IDC_DIM)->SetWindowText(format("%dx%d", hdr.width, hdr.height));
	GetDlgItem(IDC_CODEC_ID)->SetWindowText(format("%d", hdr.codecId));
	GetDlgItem(IDC_PIXEL_FORMAT)->SetWindowText(format("%d", hdr.pixelFormat));
	GetDlgItem(IDC_TIMEBASE)->SetWindowText(format("%d/%d", hdr.timebaseNum, hdr.timebaseDen));
	AVCodec *pCodec;

#if 0
#define CHECK(decoder)\
	pCodec = avcodec_find_decoder_by_name(#decoder);\
	AfxMessageBox(pCodec ? #decoder " found" : "can't find " #decoder);

	CHECK(h264_cuvid);

#undef CHECK
#endif

	pCodec = avcodec_find_decoder(AV_CODEC_ID_H264);
	//pCodec = avcodec_find_decoder_by_name("h264_cuvid");
	if (!pCodec)
	{
		AfxMessageBox("can't find h264 decoder");
		return -1;
	}

	AVCodecContext *pCodecContext = avcodec_alloc_context3(pCodec);
	if (!pCodecContext)
	{
		AfxMessageBox("can't allocate codec context");
		return -1;
	}

#if 0
// enumerating available codecs
	//av_register_all();
	avcodec_register_all();

	AVCodec *current_codec = av_codec_next(NULL);
	while (current_codec != NULL)
	{
		TRACE("%s\n", current_codec->name);
		current_codec = av_codec_next(current_codec);
	}
#endif

	int err = avcodec_open2(pCodecContext, pCodec, NULL);
	if (err != 0)
	{
		char buf[AV_ERROR_MAX_STRING_SIZE];
		av_make_error_string(buf, AV_ERROR_MAX_STRING_SIZE, err);
		char buf2[AV_ERROR_MAX_STRING_SIZE];
		sprintf(buf2, "%d (%x): %s\n", err, err, buf);
		AfxMessageBox(buf2);
		return -1;
	}
	AfxMessageBox("operation completed successfully");
	fclose(fp);
	return 0;
}


What I have tried:

As you see, to make sure that the codec h264_cuvid is available, in an inactivated block I had enumerated the available codecs.
Posted
Updated 28-Jan-19 2:09am
v3

1 solution

 
Share this answer
 
Comments
ilostmyid2 28-Jan-19 8:38am    
I use on-board intel graphics card on some systems and I need my program to run on them as well. Is it possible?
ilostmyid2 28-Jan-19 9:05am    
The link you introduced doesn't answer my question. Please be more specific. Thanks
RickZeeland 28-Jan-19 9:24am    
I think you can better post your question on the ffmpeg forum, as this seems a specific ffmpeg problem.
ilostmyid2 28-Jan-19 10:32am    
Unfortunately there's no ffmpeg forum! You believe? At least I couldn't find any. There's chat room or mailing list for ffmpeg, but I couldn't find a forum for this.
RickZeeland 28-Jan-19 12:39pm    
That's unusual indeed, normally there's an "Issues" option on GitHub. There seems to be an IRC channel though: https://ffmpeg.org/contact.html#Forums
Don't ask me about it, I have never used IRC ...
Found one here: https://ffmpeg.zeranoe.com/forum/

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month


CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900