正在显示
1 个修改的文件
包含
8 行增加
和
8 行删除
| @@ -216,7 +216,7 @@ int CAVTranscoder::open_output_file(const char *filename) | @@ -216,7 +216,7 @@ int CAVTranscoder::open_output_file(const char *filename) | ||
| 216 | enc_ctx->flags |= CODEC_FLAG_GLOBAL_HEADER; | 216 | enc_ctx->flags |= CODEC_FLAG_GLOBAL_HEADER; |
| 217 | 217 | ||
| 218 | if (0 == i) { | 218 | if (0 == i) { |
| 219 | - encoder = avcodec_find_encoder(AV_CODEC_ID_H264);; | 219 | + encoder = avcodec_find_encoder(AV_CODEC_ID_H264); |
| 220 | if (!encoder) { | 220 | if (!encoder) { |
| 221 | av_log(NULL, AV_LOG_FATAL, "Necessary encoder not found\n"); | 221 | av_log(NULL, AV_LOG_FATAL, "Necessary encoder not found\n"); |
| 222 | return AVERROR_INVALIDDATA; | 222 | return AVERROR_INVALIDDATA; |
| @@ -235,21 +235,21 @@ int CAVTranscoder::open_output_file(const char *filename) | @@ -235,21 +235,21 @@ int CAVTranscoder::open_output_file(const char *filename) | ||
| 235 | enc_ctx->time_base.num = 1; | 235 | enc_ctx->time_base.num = 1; |
| 236 | enc_ctx->time_base.den = 20; | 236 | enc_ctx->time_base.den = 20; |
| 237 | enc_ctx->gop_size = 20; | 237 | enc_ctx->gop_size = 20; |
| 238 | - | 238 | + |
| 239 | enc_ctx->me_range = 16; | 239 | enc_ctx->me_range = 16; |
| 240 | enc_ctx->max_qdiff = 4; | 240 | enc_ctx->max_qdiff = 4; |
| 241 | enc_ctx->qmin = 10; | 241 | enc_ctx->qmin = 10; |
| 242 | enc_ctx->qmax = 30; | 242 | enc_ctx->qmax = 30; |
| 243 | enc_ctx->qcompress = 0.6f; | 243 | enc_ctx->qcompress = 0.6f; |
| 244 | + | ||
| 244 | enc_ctx->framerate.den = 20; | 245 | enc_ctx->framerate.den = 20; |
| 245 | enc_ctx->framerate.num = 1; | 246 | enc_ctx->framerate.num = 1; |
| 247 | + enc_ctx->max_b_frames = 0; | ||
| 246 | 248 | ||
| 247 | - AVDictionary * d = NULL; | ||
| 248 | - char *k = av_strdup("preset"); // if your strings are already allocated, | ||
| 249 | - char *v = av_strdup("ultrafast"); // you can avoid copying them like this | ||
| 250 | - av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL); | ||
| 251 | - /* Third parameter can be used to pass settings to encoder */ | ||
| 252 | - ret = avcodec_open2(enc_ctx, encoder, NULL); | 249 | + AVDictionary * d = NULL; |
| 250 | + av_dict_set(&d, "preset", "ultrafast", 0); | ||
| 251 | + /* Third parameter can be used to pass settings to encoder */ | ||
| 252 | + ret = avcodec_open2(enc_ctx, encoder, &d); | ||
| 253 | if (ret < 0) { | 253 | if (ret < 0) { |
| 254 | av_log(NULL, AV_LOG_ERROR, "Cannot open video encoder for stream #%u\n", i); | 254 | av_log(NULL, AV_LOG_ERROR, "Cannot open video encoder for stream #%u\n", i); |
| 255 | return ret; | 255 | return ret; |
-
请 注册 或 登录 后发表评论