|
|
|
@@ -405,51 +405,51 @@ static int ffm2_read_header(AVFormatContext *s) |
|
|
|
ret = av_image_check_size(codec->width, codec->height, 0, s); |
|
|
|
if (ret < 0) |
|
|
|
goto fail; |
|
|
|
codec->gop_size = avio_rb16(pb); |
|
|
|
avio_rb16(pb); // gop_size |
|
|
|
codec->pix_fmt = avio_rb32(pb); |
|
|
|
if (!av_pix_fmt_desc_get(codec->pix_fmt)) { |
|
|
|
av_log(s, AV_LOG_ERROR, "Invalid pix fmt id: %d\n", codec->pix_fmt); |
|
|
|
codec->pix_fmt = AV_PIX_FMT_NONE; |
|
|
|
goto fail; |
|
|
|
} |
|
|
|
codec->qmin = avio_r8(pb); |
|
|
|
codec->qmax = avio_r8(pb); |
|
|
|
codec->max_qdiff = avio_r8(pb); |
|
|
|
codec->qcompress = avio_rb16(pb) / 10000.0; |
|
|
|
codec->qblur = avio_rb16(pb) / 10000.0; |
|
|
|
codec->bit_rate_tolerance = avio_rb32(pb); |
|
|
|
avio_r8(pb); // qmin |
|
|
|
avio_r8(pb); // qmax |
|
|
|
avio_r8(pb); // max_qdiff |
|
|
|
avio_rb16(pb); // qcompress / 10000.0 |
|
|
|
avio_rb16(pb); // qblur / 10000.0 |
|
|
|
avio_rb32(pb); // bit_rate_tolerance |
|
|
|
avio_get_str(pb, INT_MAX, rc_eq_buf, sizeof(rc_eq_buf)); |
|
|
|
codec->rc_eq = av_strdup(rc_eq_buf); |
|
|
|
codec->rc_max_rate = avio_rb32(pb); |
|
|
|
codec->rc_min_rate = avio_rb32(pb); |
|
|
|
codec->rc_buffer_size = avio_rb32(pb); |
|
|
|
codec->i_quant_factor = av_int2double(avio_rb64(pb)); |
|
|
|
codec->b_quant_factor = av_int2double(avio_rb64(pb)); |
|
|
|
codec->i_quant_offset = av_int2double(avio_rb64(pb)); |
|
|
|
codec->b_quant_offset = av_int2double(avio_rb64(pb)); |
|
|
|
codec->dct_algo = avio_rb32(pb); |
|
|
|
codec->strict_std_compliance = avio_rb32(pb); |
|
|
|
codec->max_b_frames = avio_rb32(pb); |
|
|
|
codec->mpeg_quant = avio_rb32(pb); |
|
|
|
codec->intra_dc_precision = avio_rb32(pb); |
|
|
|
codec->me_method = avio_rb32(pb); |
|
|
|
codec->mb_decision = avio_rb32(pb); |
|
|
|
codec->nsse_weight = avio_rb32(pb); |
|
|
|
codec->frame_skip_cmp = avio_rb32(pb); |
|
|
|
codec->rc_buffer_aggressivity = av_int2double(avio_rb64(pb)); |
|
|
|
|
|
|
|
avio_rb32(pb); // rc_max_rate |
|
|
|
avio_rb32(pb); // rc_min_rate |
|
|
|
avio_rb32(pb); // rc_buffer_size |
|
|
|
avio_rb64(pb); // i_quant_factor |
|
|
|
avio_rb64(pb); // b_quant_factor |
|
|
|
avio_rb64(pb); // i_quant_offset |
|
|
|
avio_rb64(pb); // b_quant_offset |
|
|
|
avio_rb32(pb); // dct_algo |
|
|
|
avio_rb32(pb); // strict_std_compliance |
|
|
|
avio_rb32(pb); // max_b_frames |
|
|
|
avio_rb32(pb); // mpeg_quant |
|
|
|
avio_rb32(pb); // intra_dc_precision |
|
|
|
avio_rb32(pb); // me_method |
|
|
|
avio_rb32(pb); // mb_decision |
|
|
|
avio_rb32(pb); // nsse_weight |
|
|
|
avio_rb32(pb); // frame_skip_cmp |
|
|
|
avio_rb64(pb); // rc_buffer_aggressivity |
|
|
|
codec->codec_tag = avio_rb32(pb); |
|
|
|
codec->thread_count = avio_r8(pb); |
|
|
|
codec->coder_type = avio_rb32(pb); |
|
|
|
codec->me_cmp = avio_rb32(pb); |
|
|
|
codec->me_subpel_quality = avio_rb32(pb); |
|
|
|
codec->me_range = avio_rb32(pb); |
|
|
|
codec->keyint_min = avio_rb32(pb); |
|
|
|
codec->scenechange_threshold = avio_rb32(pb); |
|
|
|
codec->b_frame_strategy = avio_rb32(pb); |
|
|
|
codec->qcompress = av_int2double(avio_rb64(pb)); |
|
|
|
codec->qblur = av_int2double(avio_rb64(pb)); |
|
|
|
codec->max_qdiff = avio_rb32(pb); |
|
|
|
codec->refs = avio_rb32(pb); |
|
|
|
avio_r8(pb); // thread_count |
|
|
|
avio_rb32(pb); // coder_type |
|
|
|
avio_rb32(pb); // me_cmp |
|
|
|
avio_rb32(pb); // me_subpel_quality |
|
|
|
avio_rb32(pb); // me_range |
|
|
|
avio_rb32(pb); // keyint_min |
|
|
|
avio_rb32(pb); // scenechange_threshold |
|
|
|
avio_rb32(pb); // b_frame_strategy |
|
|
|
avio_rb64(pb); // qcompress |
|
|
|
avio_rb64(pb); // qblur |
|
|
|
avio_rb32(pb); // max_qdiff |
|
|
|
avio_rb32(pb); // refs |
|
|
|
break; |
|
|
|
case MKBETAG('S', 'T', 'A', 'U'): |
|
|
|
if (f_stau++) { |
|
|
|
@@ -614,51 +614,51 @@ static int ffm_read_header(AVFormatContext *s) |
|
|
|
codec->height = avio_rb16(pb); |
|
|
|
if (av_image_check_size(codec->width, codec->height, 0, s) < 0) |
|
|
|
goto fail; |
|
|
|
codec->gop_size = avio_rb16(pb); |
|
|
|
avio_rb16(pb); // gop_size |
|
|
|
codec->pix_fmt = avio_rb32(pb); |
|
|
|
if (!av_pix_fmt_desc_get(codec->pix_fmt)) { |
|
|
|
av_log(s, AV_LOG_ERROR, "Invalid pix fmt id: %d\n", codec->pix_fmt); |
|
|
|
codec->pix_fmt = AV_PIX_FMT_NONE; |
|
|
|
goto fail; |
|
|
|
} |
|
|
|
codec->qmin = avio_r8(pb); |
|
|
|
codec->qmax = avio_r8(pb); |
|
|
|
codec->max_qdiff = avio_r8(pb); |
|
|
|
codec->qcompress = avio_rb16(pb) / 10000.0; |
|
|
|
codec->qblur = avio_rb16(pb) / 10000.0; |
|
|
|
codec->bit_rate_tolerance = avio_rb32(pb); |
|
|
|
avio_r8(pb); // qmin |
|
|
|
avio_r8(pb); // qmax |
|
|
|
avio_r8(pb); // max_qdiff |
|
|
|
avio_rb16(pb); // qcompress / 10000.0 |
|
|
|
avio_rb16(pb); // qblur / 10000.0 |
|
|
|
avio_rb32(pb); // bit_rate_tolerance |
|
|
|
avio_get_str(pb, INT_MAX, rc_eq_buf, sizeof(rc_eq_buf)); |
|
|
|
codec->rc_eq = av_strdup(rc_eq_buf); |
|
|
|
codec->rc_max_rate = avio_rb32(pb); |
|
|
|
codec->rc_min_rate = avio_rb32(pb); |
|
|
|
codec->rc_buffer_size = avio_rb32(pb); |
|
|
|
codec->i_quant_factor = av_int2double(avio_rb64(pb)); |
|
|
|
codec->b_quant_factor = av_int2double(avio_rb64(pb)); |
|
|
|
codec->i_quant_offset = av_int2double(avio_rb64(pb)); |
|
|
|
codec->b_quant_offset = av_int2double(avio_rb64(pb)); |
|
|
|
codec->dct_algo = avio_rb32(pb); |
|
|
|
codec->strict_std_compliance = avio_rb32(pb); |
|
|
|
codec->max_b_frames = avio_rb32(pb); |
|
|
|
codec->mpeg_quant = avio_rb32(pb); |
|
|
|
codec->intra_dc_precision = avio_rb32(pb); |
|
|
|
codec->me_method = avio_rb32(pb); |
|
|
|
codec->mb_decision = avio_rb32(pb); |
|
|
|
codec->nsse_weight = avio_rb32(pb); |
|
|
|
codec->frame_skip_cmp = avio_rb32(pb); |
|
|
|
codec->rc_buffer_aggressivity = av_int2double(avio_rb64(pb)); |
|
|
|
|
|
|
|
avio_rb32(pb); // rc_max_rate |
|
|
|
avio_rb32(pb); // rc_min_rate |
|
|
|
avio_rb32(pb); // rc_buffer_size |
|
|
|
avio_rb64(pb); // i_quant_factor |
|
|
|
avio_rb64(pb); // b_quant_factor |
|
|
|
avio_rb64(pb); // i_quant_offset |
|
|
|
avio_rb64(pb); // b_quant_offset |
|
|
|
avio_rb32(pb); // dct_algo |
|
|
|
avio_rb32(pb); // strict_std_compliance |
|
|
|
avio_rb32(pb); // max_b_frames |
|
|
|
avio_rb32(pb); // mpeg_quant |
|
|
|
avio_rb32(pb); // intra_dc_precision |
|
|
|
avio_rb32(pb); // me_method |
|
|
|
avio_rb32(pb); // mb_decision |
|
|
|
avio_rb32(pb); // nsse_weight |
|
|
|
avio_rb32(pb); // frame_skip_cmp |
|
|
|
avio_rb64(pb); // rc_buffer_aggressivity |
|
|
|
codec->codec_tag = avio_rb32(pb); |
|
|
|
codec->thread_count = avio_r8(pb); |
|
|
|
codec->coder_type = avio_rb32(pb); |
|
|
|
codec->me_cmp = avio_rb32(pb); |
|
|
|
codec->me_subpel_quality = avio_rb32(pb); |
|
|
|
codec->me_range = avio_rb32(pb); |
|
|
|
codec->keyint_min = avio_rb32(pb); |
|
|
|
codec->scenechange_threshold = avio_rb32(pb); |
|
|
|
codec->b_frame_strategy = avio_rb32(pb); |
|
|
|
codec->qcompress = av_int2double(avio_rb64(pb)); |
|
|
|
codec->qblur = av_int2double(avio_rb64(pb)); |
|
|
|
codec->max_qdiff = avio_rb32(pb); |
|
|
|
codec->refs = avio_rb32(pb); |
|
|
|
avio_r8(pb); // thread_count |
|
|
|
avio_rb32(pb); // coder_type |
|
|
|
avio_rb32(pb); // me_cmp |
|
|
|
avio_rb32(pb); // me_subpel_quality |
|
|
|
avio_rb32(pb); // me_range |
|
|
|
avio_rb32(pb); // keyint_min |
|
|
|
avio_rb32(pb); // scenechange_threshold |
|
|
|
avio_rb32(pb); // b_frame_strategy |
|
|
|
avio_rb64(pb); // qcompress |
|
|
|
avio_rb64(pb); // qblur |
|
|
|
avio_rb32(pb); // max_qdiff |
|
|
|
avio_rb32(pb); // refs |
|
|
|
break; |
|
|
|
case AVMEDIA_TYPE_AUDIO: |
|
|
|
codec->sample_rate = avio_rb32(pb); |
|
|
|
|