mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
Dirac now returns AVFrames instead of DiracFrames
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
5d50fcc549
commit
e3cfe54145
@ -1661,7 +1661,7 @@ static int dirac_decode_picture_header(DiracContext *s)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_delayed_pic(DiracContext *s, DiracFrame *picture, int *data_size)
|
static int get_delayed_pic(DiracContext *s, AVFrame *picture, int *data_size)
|
||||||
{
|
{
|
||||||
DiracFrame *out = s->delay_frames[0];
|
DiracFrame *out = s->delay_frames[0];
|
||||||
int i, out_idx = 0;
|
int i, out_idx = 0;
|
||||||
@ -1678,8 +1678,8 @@ static int get_delayed_pic(DiracContext *s, DiracFrame *picture, int *data_size)
|
|||||||
|
|
||||||
if (out) {
|
if (out) {
|
||||||
out->avframe.reference ^= DELAYED_PIC_REF;
|
out->avframe.reference ^= DELAYED_PIC_REF;
|
||||||
*data_size = sizeof(DiracFrame);
|
*data_size = sizeof(AVFrame);
|
||||||
*picture = *out;
|
*(AVFrame *)picture = out->avframe;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1792,7 +1792,7 @@ static int dirac_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
|
|||||||
|
|
||||||
// end of stream, so flush delayed pics
|
// end of stream, so flush delayed pics
|
||||||
if (buf_size == 0)
|
if (buf_size == 0)
|
||||||
return get_delayed_pic(s, picture, data_size);
|
return get_delayed_pic(s, (AVFrame *)data, data_size);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
//[DIRAC_STD] Here starts the code from parse_info() defined in 9.6
|
//[DIRAC_STD] Here starts the code from parse_info() defined in 9.6
|
||||||
@ -1815,10 +1815,12 @@ static int dirac_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
|
|||||||
buf_idx += 4;
|
buf_idx += 4;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [DIRAC_STD] dirac_decode_data_unit makes reference to the while defined in 9.3 inside the function parse_sequence()
|
// [DIRAC_STD] dirac_decode_data_unit makes reference to the while defined in 9.3 inside the function parse_sequence()
|
||||||
if (dirac_decode_data_unit(avctx, buf+buf_idx, data_unit_size))
|
if (dirac_decode_data_unit(avctx, buf+buf_idx, data_unit_size))
|
||||||
|
{
|
||||||
|
av_log(s->avctx, AV_LOG_ERROR,"Error in dirac_decode_data_unit\n");
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
buf_idx += data_unit_size;
|
buf_idx += data_unit_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1846,13 +1848,13 @@ static int dirac_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
|
|||||||
|
|
||||||
if (delayed_frame) {
|
if (delayed_frame) {
|
||||||
delayed_frame->avframe.reference ^= DELAYED_PIC_REF;
|
delayed_frame->avframe.reference ^= DELAYED_PIC_REF;
|
||||||
*data_size = sizeof(DiracFrame);
|
*(AVFrame*)data = delayed_frame->avframe;
|
||||||
*picture = *delayed_frame;
|
*data_size = sizeof(AVFrame);
|
||||||
}
|
}
|
||||||
} else if (s->current_picture->avframe.display_picture_number == s->frame_number) {
|
} else if (s->current_picture->avframe.display_picture_number == s->frame_number) {
|
||||||
// The right frame at the right time :-)
|
// The right frame at the right time :-)
|
||||||
*data_size = sizeof(DiracFrame);
|
*(AVFrame*)data = s->current_picture->avframe;
|
||||||
*picture = *s->current_picture;
|
*data_size = sizeof(AVFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*data_size)
|
if (*data_size)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user