XEncode
XEncode.h
作用:继承于XCodec,用于解码
12345678910#pragma once#include "xcodec.h"class XEncode:public XCodec{public: AVPacket *Encode(const AVFrame* frame); std::vector<AVPacket *> End();};
AVPacket
是 FFmpeg 库中的一个数据结构,主要用于存储编码后的音频或视频数据包。
在多媒体处理中,数据包通常包含一个完整的编码帧或部分编码帧的比特流数据。
这些数据包可以用于传输、存储或进一步处理,如解码。
123456789101112131415161718typedef struct AVPacket { uint8_t *data; // 指向实际存储编码数据的缓冲区 int size; // 缓冲区中数据的大小,以字节为单位 int64_t pts; // 显示时间戳 int64_t dts; // 解码时间 ...
XCodec
XCodec
作用:编码和解码的基类
1234567891011121314151617181920212223242526272829303132#pragma once#include <mutex>#include <vector>extern "C" {#include <libavcodec/avcodec.h>#include <libavutil/avutil.h>}struct AVCodecContext;struct AVPacket;struct AVFrame;class XCodec{public: static AVCodecContext* Create(int codec_id, bool is_encode); void set_c(AVCodecContext* c); bool SetOpt(const char* key, const char* val); bool SetOpt(const char* key, int val); bool Op ...
XSDL
XSDL.h
12345678910111213141516171819202122232425262728293031#pragma once#include "xvideo_view.h"struct SDL_Window; // 能够使用SDL_WINDOW指针struct SDL_Renderer;struct SDL_Texture;class XSDL :public XVideoView{public: void Close() override; bool Init(int w, int h, Format fmt = RGBA) override; bool Draw(const unsigned char* data, int linesize = 0) override; bool Draw(const unsigned char* y, int y_pitch, const unsigned char* u, int u_pitch, const unsigned char* v, int v_pitch ) o ...
XVideoView
XVideoView.h
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182#ifndef XVIDEO_VIEW_H#define XVIDEO_VIEW_H#include <mutex>#include <fstream>#include "xtools.h"struct AVFrame;class XVideoView{public: enum Format { YUV420P = 0, NV12 = 23, ARGB = 25, RGBA = 26, BGRA = 28 }; enum RenderType { SDL = 0 }; static XVideoView* Create(RenderType type= ...
英语作文
小作文
开头
This is Li Ming. I am writing this letter with my full heart for the purpose of putting forward some suggestion
我是李明,我写此信的目的是为了提一些建议
As one ordinary resident living here for more than twenty years, I feel obligated to write this very letter to state my concern over the increasingly deteriorating environmental situation.
作为一个在这里生活了二十来年的普通居民,我觉得有必要写下此信来陈述我的担心,关于日益恶化的环境现状。
On behalf of the Postgraduate Association, we are formally announcing that volunteers are needed.
谨代表研究生协会,我们正式宣布,招聘志愿者 ...
AcWing Web课
html基础标签
有疑问查询MDN:https://developer.mozilla.org/zh-CN/
html文件结构
文档结构
html的所有标签为树形结构,例如:
1234567891011<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Web应用课</title></head><body> <h1>第一讲</h1></body></html>
<html></html>:类似于根节点。
<body></body>、<title> ...
AcWing.3765 表达式树
请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。
例如,当下列两棵表达式树作为算法的输入时:
输出的等价中缀表达式分别为 (a+b)*(c*(-d)) 和 (a*b)+(-(c-d))。
注意:
树中至少包含一个运算符。
当运算符是负号时,左儿子为空,右儿子为需要取反的表达式。
树中所有叶节点的值均为非负整数。
样例:
输入:二叉树[+, 12, *, null, null, 6, 4, null, null, null, null]如下图所示:
+
/ \
12 *
/ \
6 4
输出:12+(6*4)
数据范围
给定二叉树的非空结点数量保证不超过 $1000$。
给定二叉树保证能够转化为合法的中缀表达式。
时间复杂度
为$O(n^2)$
因为C++中字符串return并不是直接返回,而是先复制一遍再返回。
为了优化,可以不适用return进行返回,而是定义一个全局变量ans来记录最终的答案。
Code
未优化的,时间复杂度:$O(n^2)$
1234567891011121 ...
AcWing.18 重建二叉树
输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。
注意:
二叉树中每个节点的值都互不相同;
输入的前序遍历和中序遍历一定合法;
数据范围
树中节点数量范围 $[0,100]$。
样例
给定:
前序遍历是:[3, 9, 20, 15, 7]
中序遍历是:[9, 3, 15, 20, 7]
返回:[3, 9, 20, null, null, 15, 7, null, null, null, null]
返回的二叉树如下所示:
3
/ \
9 20
/ \
15 7
Code
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left; ...
AcWing.3786 二叉排序树
你需要写一种数据结构,来维护一些数,其中需要提供以下操作:
插入数值 $x$。
删除数值 $x$。
题目保证:
操作 $1$ 插入的数值各不相同。
操作 $2$ 删除的数值一定存在。
输出树的前序遍历
输入格式
第一行包含整数 $n$,表示共有 $n$ 个操作命令。
接下来 $n$ 行,每行包含两个整数 $opt$ 和 $x$,表示操作序号和操作数值。
数据范围
$1 \le n \le 2000$,
$-10000 \le x \le 10000$
输入样例:
4
1 1
1 3
1 5
2 3
输出样例:
1 5
思路
插入操作:
删除操作:
对于一个二叉排序树来说,中序遍历(左中右)是有序的。
有三种情况
该节点为叶节点
该节点存在一个左节点,或者一个右节点
该节点存在左节点、右节点
重点说明一下第三种情况:由于是一颗二叉排序树,故节点$X$的左子树中最右的根节点$A$一定是左子树中最大的值,故将节点$A$的值赋值给节点$X$,再递归遍历左子树,删除节点$A$。
Code
12345678910111213141516171819202122232425262 ...
AcWing.840 模拟散列表
840.模拟散列表
维护一个集合,支持如下几种操作:
I x,插入一个数 $x$;
Q x,询问数 $x$ 是否在集合中出现过;
现在要进行 $N$ 次操作,对于每个询问操作输出对应的结果。
输入格式
第一行包含整数 $N$,表示操作数量。
接下来 $N$ 行,每行包含一个操作指令,操作指令为 I x,Q x 中的一种。
输出格式
对于每个询问指令 Q x,输出一个询问结果,如果 $x$ 在集合中出现过,则输出 Yes,否则输出 No。
每个结果占一行。
数据范围
$1 \le N \le 10^5$
$-10^9 \le x \le 10^9$
输入样例:
5
I 1
I 2
I 3
Q 2
Q 5
输出样例:
Yes
No
开散列方法(拉链法)
核心:如果一个位置有多个重复映射到此处的元素,就开一个链表,将所有元素都存储下来。
$Code$:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636 ...