当前位置: 首页 > news >正文

怎么做app网站全网营销平台

怎么做app网站,全网营销平台,动画素材网站,网站开发建设成本流程 根据硬件名称,查询是否是支持的类型 const char *device_name "qsv"; //cuda enum AVHWDeviceType type av_hwdevice_find_type_by_name(device_name); if(type AV_HWDEVICE_TYPE_NONE) {//如果一个硬件类型是不支持的,打印所有支持…

流程

  1. 根据硬件名称,查询是否是支持的类型
const char *device_name = "qsv"; //cuda
enum AVHWDeviceType type = av_hwdevice_find_type_by_name(device_name);
if(type == AV_HWDEVICE_TYPE_NONE)
{//如果一个硬件类型是不支持的,打印所有支持的硬件名称printf("Device type %s is not supported.\n", device_name);fprintf(stderr, "Available device types:");while((type = av_hwdevice_iterate_types(type)) != AV_HWDEVICE_TYPE_NONE){fprintf(stderr, " %s", av_hwdevice_get_type_name(type));}fprintf(stderr, "\n");
}
  1. 通用过程
avformat_open_input
avformat_find_stream_info
av_find_best_stream
  1. 获取硬件编码器
 AVCodec *pCodec;for (i = 0;; i++) {const AVCodecHWConfig *config = avcodec_get_hw_config(pCodec, i);if (!config) {fprintf(stderr, "Decoder %s does not support device type %s.\n",pCodec->name, av_hwdevice_get_type_name(type));return;}if (config->methods & AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX &&config->device_type == type) {hw_pix_fmt = config->pix_fmt;break;}}
  1. 查找解码器
 if (!(pCodecCtx = avcodec_alloc_context3(pCodec)))return;
  1. 复制参数
 video = pFormatCtx->streams[videoStream];if (avcodec_parameters_to_context(pCodecCtx, video->codecpar) < 0)return;pCodecCtx->get_format = get_hw_format;
  1. 初始化硬件解码器与打开解码器
    if (hw_decoder_init(pCodecCtx, type) < 0)return;
//打开解码器if (avcodec_open2(pCodecCtx, pCodec, NULL) < 0) {printf("Could not open codec.\n");return;}
  1. 读取视频包,发送视频包到解码器,解码
  2. 将显存中的内容复制内存中
ret = av_hwframe_transfer_data(swFrame, pFrame, 0);if(ret < 0){qDebug() << "Error transferring the data to system memory";break;}

完整的代码

    AVFormatContext *pFormatCtx;AVCodecContext *pCodecCtx;AVCodec *pCodec;AVFrame *pFrame, *pFrameRGB, *swFrame, *tempFrame;uint8_t *out_buffer;AVPacket packet;AVStream *video = NULL;static struct SwsContext *img_convert_ctx;int videoStream, i, numBytes;int ret, got_picture;avformat_network_init();//Allocate an AVFormatContext.pFormatCtx = avformat_alloc_context();const char *device_name = "cuda"; //cudaenum AVHWDeviceType type = av_hwdevice_find_type_by_name(device_name);if(type == AV_HWDEVICE_TYPE_NONE){printf("Device type %s is not supported.\n", device_name);fprintf(stderr, "Available device types:");while((type = av_hwdevice_iterate_types(type)) != AV_HWDEVICE_TYPE_NONE)fprintf(stderr, " %s", av_hwdevice_get_type_name(type));fprintf(stderr, "\n");}AVDictionary *opt = nullptr;
//    av_dict_set(&opt,"buffer_size","1024000",0);
//    av_dict_set(&opt,"max_delay","0",0);av_dict_set(&opt,"rtsp_transport","tcp",0);av_dict_set(&opt,"stimeout","5000000",0);if (avformat_open_input(&pFormatCtx, mFileName.toUtf8().data(), NULL, NULL) != 0) {printf("can't open the file. \n");return;}if (avformat_find_stream_info(pFormatCtx, NULL) < 0) {printf("Could't find stream infomation.\n");return;}ret = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_VIDEO, -1, -1, &pCodec, 0);if (ret < 0) {fprintf(stderr, "Cannot find a video stream in the input file\n");return;}videoStream = ret;for (i = 0;; i++) {const AVCodecHWConfig *config = avcodec_get_hw_config(pCodec, i);if (!config) {fprintf(stderr, "Decoder %s does not support device type %s.\n",pCodec->name, av_hwdevice_get_type_name(type));return;}if (config->methods & AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX &&config->device_type == type) {hw_pix_fmt = config->pix_fmt;break;}}///查找解码器if (!(pCodecCtx = avcodec_alloc_context3(pCodec)))return;video = pFormatCtx->streams[videoStream];if (avcodec_parameters_to_context(pCodecCtx, video->codecpar) < 0)return;pCodecCtx->get_format = get_hw_format;if (hw_decoder_init(pCodecCtx, type) < 0)return;///打开解码器if (avcodec_open2(pCodecCtx, pCodec, NULL) < 0) {printf("Could not open codec.\n");return;}pFrame = av_frame_alloc();pFrameRGB = av_frame_alloc();tempFrame = av_frame_alloc();swFrame = av_frame_alloc();///这里我们改成了 将解码后的YUV数据转换成RGB32img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,AV_PIX_FMT_NV12, pCodecCtx->width, pCodecCtx->height,AV_PIX_FMT_RGB32, SWS_BICUBIC, NULL, NULL, NULL);numBytes = avpicture_get_size(AV_PIX_FMT_RGB32, pCodecCtx->width,pCodecCtx->height);out_buffer = (uint8_t *) av_malloc(numBytes * sizeof(uint8_t));avpicture_fill((AVPicture *) pFrameRGB, out_buffer, AV_PIX_FMT_RGB32,pCodecCtx->width, pCodecCtx->height);av_dump_format(pFormatCtx, 0, mFileName.toUtf8().data(), 0); //输出视频信息while (1){if (av_read_frame(pFormatCtx, &packet) < 0){break; //这里认为视频读取完了}if (packet.stream_index == videoStream) {ret = avcodec_send_packet(pCodecCtx, &packet);if (ret < 0) {printf("decode error.\n");return;}while (1) {ret = avcodec_receive_frame(pCodecCtx, pFrame);if(ret == AVERROR(EAGAIN) || ret == AVERROR_EOF){break;}else if(ret < 0){qDebug() << "Error while decoding";break;}ret = av_hwframe_transfer_data(swFrame, pFrame, 0);if(ret < 0){qDebug() << "Error transferring the data to system memory";break;}sws_scale(img_convert_ctx,(uint8_t const * const *) swFrame->data,swFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data,pFrameRGB->linesize);static int index = 0;qDebug() << "frame" << index++;}}av_packet_unref(&packet);msleep(30); //停一停  不然放的太快了}av_free(out_buffer);av_free(pFrameRGB);avcodec_close(pCodecCtx);avformat_close_input(&pFormatCtx);
  • hw_decoder_init
static enum AVPixelFormat hw_pix_fmt;
static AVBufferRef *hw_device_ctx = NULL;
static int hw_decoder_init(AVCodecContext *ctx, const enum AVHWDeviceType type)
{int err = 0;if ((err = av_hwdevice_ctx_create(&hw_device_ctx, type,NULL, NULL, 0)) < 0) {fprintf(stderr, "Failed to create specified HW device.\n");return err;}ctx->hw_device_ctx = av_buffer_ref(hw_device_ctx);return err;
}
  • get_hw_format
static enum AVPixelFormat get_hw_format(AVCodecContext *ctx,const enum AVPixelFormat *pix_fmts)
{const enum AVPixelFormat *p;for (p = pix_fmts; *p != -1; p++) {if (*p == hw_pix_fmt)return *p;}fprintf(stderr, "Failed to get HW surface format.\n");return AV_PIX_FMT_NONE;
}
http://www.hkea.cn/news/463209/

相关文章:

  • 菏泽网站建设哪好怎样做平台推广
  • 网上有做logo的网站吗网络营销的核心是什么
  • 自建网站怎么做推广微信营销策略
  • 跳网站查询的二维码怎么做的关键词排名点击软件网站
  • 兼容手机的网站百度怎么推广自己的视频
  • 宝安中心医院入职体检跟我学seo
  • 企业网站后端模板石家庄疫情最新情况
  • 沈阳哪家网站做的好网络营销是指什么
  • 我的网站模板网站建设主要推广方式
  • 国外app素材网站seo运营是做什么的
  • 企业网站seo怎么做百度帐号个人中心
  • 郑州网站建设亅汉狮网络百度网盘seo优化
  • 模板型网站seo优化平台
  • 官方网站下载免费软件培训机构有哪些?哪个比较好
  • 网站导航怎么做的惠州seo计费管理
  • 建设公司网站模板全国唯一一个没有疫情的城市
  • 网站怎么做seo_南京百度提升优化
  • 旅游网站开发与设计论文怎么样建网站
  • 北京网站推广排名公司企业网站的搜索引擎推广与优化
  • 动态网站期末设计广告营销策略
  • 山东网站营销推广费用旺道seo推广
  • 邢台网站建设服务周到百度数据分析工具
  • 周口网站建设竞价恶意点击犯法吗
  • 网站建设没有预付款seo快速提升排名
  • 网站开发者的设计构想网络推广平台软件
  • 做立体字的网站重庆seo公司排名
  • 电子商务网站的建设包含哪些流程搜索引擎关键词怎么优化
  • 将自己做的网站发布到谷歌推广新手教程
  • 深圳保障性住房管理办法seo排名优化方法
  • 2022注册公司取名推荐网络营销的优化和推广方式