if (avctx->codec->id == AV_CODEC_ID_MSS2)
avctx->pix_fmt = AV_PIX_FMT_YUV420P;
else
- avctx->pix_fmt = avctx->get_format(avctx, avctx->codec->pix_fmts);
+ avctx->pix_fmt = ff_get_format(avctx, avctx->codec->pix_fmts);
s->unrestricted_mv = 1;
/* select sub codec */
return AVERROR(ENOSYS);
}
s->codec_id = avctx->codec->id;
- avctx->hwaccel = ff_find_hwaccel(avctx);
/* for h263, we allocate the images after having read the header */
if (avctx->codec->id != AV_CODEC_ID_H263 &&
if (buf_size == 0) {
/* special case for last picture */
if (s->low_delay == 0 && s->next_picture_ptr) {
- if ((ret = av_frame_ref(pict, &s->next_picture_ptr->f)) < 0)
+ if ((ret = av_frame_ref(pict, s->next_picture_ptr->f)) < 0)
return ret;
s->next_picture_ptr = NULL;
/* We need to set current_picture_ptr before reading the header,
* otherwise we cannot store anyting in there */
- if (s->current_picture_ptr == NULL || s->current_picture_ptr->f.data[0]) {
+ if (s->current_picture_ptr == NULL || s->current_picture_ptr->f->data[0]) {
int i = ff_find_unused_picture(s, 0);
if (i < 0)
return i;
avctx->has_b_frames = !s->low_delay;
- if (s->xvid_build == -1 && s->divx_version == -1 && s->lavc_build == -1) {
- if (s->stream_codec_tag == AV_RL32("XVID") ||
- s->codec_tag == AV_RL32("XVID") ||
- s->codec_tag == AV_RL32("XVIX") ||
- s->codec_tag == AV_RL32("RMP4") ||
- s->codec_tag == AV_RL32("ZMP4") ||
- s->codec_tag == AV_RL32("SIPP"))
- s->xvid_build = 0;
- }
-
- if (s->xvid_build == -1 && s->divx_version == -1 && s->lavc_build == -1)
- if (s->codec_tag == AV_RL32("DIVX") && s->vo_type == 0 &&
- s->vol_control_parameters == 0)
- s->divx_version = 400; // divx 4
-
- if (s->xvid_build >= 0 && s->divx_version >= 0) {
- s->divx_version =
- s->divx_build = -1;
- }
-
- if (s->workaround_bugs & FF_BUG_AUTODETECT) {
- if (s->codec_tag == AV_RL32("XVIX"))
- s->workaround_bugs |= FF_BUG_XVID_ILACE;
-
- if (s->codec_tag == AV_RL32("UMP4"))
- s->workaround_bugs |= FF_BUG_UMP4;
-
- if (s->divx_version >= 500 && s->divx_build < 1814)
- s->workaround_bugs |= FF_BUG_QPEL_CHROMA;
-
- if (s->divx_version > 502 && s->divx_build < 1814)
- s->workaround_bugs |= FF_BUG_QPEL_CHROMA2;
-
- if (s->xvid_build <= 3U)
- s->padding_bug_score = 256 * 256 * 256 * 64;
-
- if (s->xvid_build <= 1U)
- s->workaround_bugs |= FF_BUG_QPEL_CHROMA;
-
- if (s->xvid_build <= 12U)
- s->workaround_bugs |= FF_BUG_EDGE;
-
- if (s->xvid_build <= 32U)
- s->workaround_bugs |= FF_BUG_DC_CLIP;
-
#define SET_QPEL_FUNC(postfix1, postfix2) \
s->dsp.put_ ## postfix1 = ff_put_ ## postfix2; \
s->dsp.put_no_rnd_ ## postfix1 = ff_put_no_rnd_ ## postfix2; \
s->dsp.avg_ ## postfix1 = ff_avg_ ## postfix2;
- if (s->lavc_build < 4653U)
- s->workaround_bugs |= FF_BUG_STD_QPEL;
-
- if (s->lavc_build < 4655U)
- s->workaround_bugs |= FF_BUG_DIRECT_BLOCKSIZE;
-
- if (s->lavc_build < 4670U)
- s->workaround_bugs |= FF_BUG_EDGE;
-
- if (s->lavc_build <= 4712U)
- s->workaround_bugs |= FF_BUG_DC_CLIP;
-
- if (s->divx_version >= 0)
- s->workaround_bugs |= FF_BUG_DIRECT_BLOCKSIZE;
- if (s->divx_version == 501 && s->divx_build == 20020416)
- s->padding_bug_score = 256 * 256 * 256 * 64;
-
- if (s->divx_version < 500U)
- s->workaround_bugs |= FF_BUG_EDGE;
-
- if (s->divx_version >= 0)
- s->workaround_bugs |= FF_BUG_HPEL_CHROMA;
- }
-
if (s->workaround_bugs & FF_BUG_STD_QPEL) {
SET_QPEL_FUNC(qpel_pixels_tab[0][5], qpel16_mc11_old_c)
SET_QPEL_FUNC(qpel_pixels_tab[0][7], qpel16_mc31_old_c)
SET_QPEL_FUNC(qpel_pixels_tab[1][15], qpel8_mc33_old_c)
}
- if (avctx->debug & FF_DEBUG_BUGS)
- av_log(s->avctx, AV_LOG_DEBUG,
- "bugs: %X lavc_build:%d xvid_build:%d divx_version:%d divx_build:%d %s\n",
- s->workaround_bugs, s->lavc_build, s->xvid_build,
- s->divx_version, s->divx_build, s->divx_packed ? "p" : "");
-
-#if HAVE_MMX
- if (s->codec_id == AV_CODEC_ID_MPEG4 && s->xvid_build >= 0 &&
- avctx->idct_algo == FF_IDCT_AUTO &&
- (av_get_cpu_flags() & AV_CPU_FLAG_MMX)) {
- avctx->idct_algo = FF_IDCT_XVIDMMX;
- ff_dct_common_init(s);
- s->picture_number = 0;
- }
-#endif
-
/* After H263 & mpeg4 header decode we have the height, width,
* and other parameters. So then we could init the picture.
* FIXME: By the way H263 decoder is evolving it should have
s->gob_index = ff_h263_get_gob_height(s);
// for skipping the frame
- s->current_picture.f.pict_type = s->pict_type;
- s->current_picture.f.key_frame = s->pict_type == AV_PICTURE_TYPE_I;
+ s->current_picture.f->pict_type = s->pict_type;
+ s->current_picture.f->key_frame = s->pict_type == AV_PICTURE_TYPE_I;
/* skip B-frames if we don't have reference frames */
if (s->last_picture_ptr == NULL &&
s->er.error_status_table[s->mb_num - 1] = ER_MB_ERROR;
assert(s->bitstream_buffer_size == 0);
- /* divx 5.01+ bistream reorder stuff */
- if (s->codec_id == AV_CODEC_ID_MPEG4 && s->divx_packed) {
- int current_pos = get_bits_count(&s->gb) >> 3;
- int startcode_found = 0;
-
- if (buf_size - current_pos > 5) {
- int i;
- for (i = current_pos; i < buf_size - 3; i++)
- if (buf[i] == 0 &&
- buf[i + 1] == 0 &&
- buf[i + 2] == 1 &&
- buf[i + 3] == 0xB6) {
- startcode_found = 1;
- break;
- }
- }
- if (s->gb.buffer == s->bitstream_buffer && buf_size > 7 &&
- s->xvid_build >= 0) { // xvid style
- startcode_found = 1;
- current_pos = 0;
- }
- if (startcode_found) {
- av_fast_malloc(&s->bitstream_buffer,
- &s->allocated_bitstream_buffer_size,
- buf_size - current_pos +
- FF_INPUT_BUFFER_PADDING_SIZE);
- if (!s->bitstream_buffer)
- return AVERROR(ENOMEM);
- memcpy(s->bitstream_buffer, buf + current_pos,
- buf_size - current_pos);
- s->bitstream_buffer_size = buf_size - current_pos;
- }
- }
+ if (CONFIG_MPEG4_DECODER && avctx->codec_id == AV_CODEC_ID_MPEG4)
+ ff_mpeg4_frame_end(avctx, buf, buf_size);
intrax8_decoded:
ff_er_frame_end(&s->er);
if (!s->divx_packed && avctx->hwaccel)
ff_thread_finish_setup(avctx);
- assert(s->current_picture.f.pict_type ==
- s->current_picture_ptr->f.pict_type);
- assert(s->current_picture.f.pict_type == s->pict_type);
+ assert(s->current_picture.f->pict_type ==
+ s->current_picture_ptr->f->pict_type);
+ assert(s->current_picture.f->pict_type == s->pict_type);
if (s->pict_type == AV_PICTURE_TYPE_B || s->low_delay) {
- if ((ret = av_frame_ref(pict, &s->current_picture_ptr->f)) < 0)
+ if ((ret = av_frame_ref(pict, s->current_picture_ptr->f)) < 0)
return ret;
ff_print_debug_info(s, s->current_picture_ptr);
} else if (s->last_picture_ptr != NULL) {
- if ((ret = av_frame_ref(pict, &s->last_picture_ptr->f)) < 0)
+ if ((ret = av_frame_ref(pict, s->last_picture_ptr->f)) < 0)
return ret;
ff_print_debug_info(s, s->last_picture_ptr);
}
}
const enum AVPixelFormat ff_h263_hwaccel_pixfmt_list_420[] = {
-#if CONFIG_VAAPI
+#if CONFIG_H263_VAAPI_HWACCEL || CONFIG_MPEG4_VAAPI_HWACCEL
AV_PIX_FMT_VAAPI_VLD,
#endif
-#if CONFIG_VDPAU
+#if CONFIG_H263_VDPAU_HWACCEL || CONFIG_MPEG4_VDPAU_HWACCEL
AV_PIX_FMT_VDPAU,
#endif
AV_PIX_FMT_YUV420P,