switch(avctx->codec->id) {
case CODEC_ID_H263:
s->unrestricted_mv= 0;
+ avctx->chroma_sample_location = AVCHROMA_LOC_CENTER;
break;
case CODEC_ID_MPEG4:
s->decode_mb= ff_mpeg4_decode_mb;
s->time_increment_bits = 4; /* default value for broken headers */
s->h263_pred = 1;
s->low_delay = 0; //default, might be overriden in the vol header during header parsing
+ avctx->chroma_sample_location = AVCHROMA_LOC_LEFT;
break;
case CODEC_ID_MSMPEG4V1:
s->h263_msmpeg4 = 1;
s->h263_msmpeg4 = 1;
s->h263_pred = 1;
s->msmpeg4_version=6;
+ avctx->chroma_sample_location = AVCHROMA_LOC_LEFT;
break;
case CODEC_ID_H263I:
break;
ff_set_qscale(s, s->qscale);
- if (s->avctx->hwaccel)
- return 0;
+ if (s->avctx->hwaccel) {
+ const uint8_t *start= s->gb.buffer + get_bits_count(&s->gb)/8;
+ const uint8_t *end = ff_h263_find_resync_marker(start + 1, s->gb.buffer_end);
+ skip_bits_long(&s->gb, 8*(end - start));
+ return s->avctx->hwaccel->decode_slice(s->avctx, start, end - start);
+ }
if(s->partitioned_frame){
const int qscale= s->qscale;
int ff_h263_decode_frame(AVCodecContext *avctx,
void *data, int *data_size,
- const uint8_t *buf, int buf_size)
+ AVPacket *avpkt)
{
+ const uint8_t *buf = avpkt->data;
+ int buf_size = avpkt->size;
MpegEncContext *s = avctx->priv_data;
int ret;
AVFrame *pict = data;
if(MPV_frame_start(s, avctx) < 0)
return -1;
+ if (avctx->hwaccel) {
+ if (avctx->hwaccel->start_frame(avctx, buf, buf_size) < 0)
+ return -1;
+ }
+
#ifdef DEBUG
av_log(avctx, AV_LOG_DEBUG, "qscale=%d\n", s->qscale);
#endif
}
if(startcode_found){
- s->bitstream_buffer= av_fast_realloc(
- s->bitstream_buffer,
+ 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;
}
CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY,
.flush= ff_mpeg_flush,
.long_name= NULL_IF_CONFIG_SMALL("MPEG-4 part 2"),
- .pix_fmts= ff_pixfmt_list_420,
+ .pix_fmts= ff_hwaccel_pixfmt_list_420,
};
AVCodec h263_decoder = {
ff_h263_decode_frame,
CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY,
.flush= ff_mpeg_flush,
- .long_name= NULL_IF_CONFIG_SMALL("H.263 / H.263-1996, H.263+ / H.263-1998"),
- .pix_fmts= ff_pixfmt_list_420,
+ .long_name= NULL_IF_CONFIG_SMALL("H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2"),
+ .pix_fmts= ff_hwaccel_pixfmt_list_420,
};
AVCodec msmpeg4v1_decoder = {
ff_h263_decode_end,
ff_h263_decode_frame,
CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1,
- .long_name= NULL_IF_CONFIG_SMALL("Flash Video"),
+ .long_name= NULL_IF_CONFIG_SMALL("Flash Video (FLV)"),
.pix_fmts= ff_pixfmt_list_420,
};