Unified · Split
| @@ -333,46 +333,46 @@ static int submit_frame(QSVEncContext *q, const AVFrame *frame, · 332 unmodified lines | |||
| 333 | 333 | ||
| 334 | qf->surface = (mfxFrameSurface1*)qf->frame->data[3]; | 334 | qf->surface = (mfxFrameSurface1*)qf->frame->data[3]; |
| 335 | } else { | 335 | } else { |
| 336 | /* make a copy if the input is not padded as libmfx requires */ | 336 | /* make a copy if the input is not padded as libmfx requires */ |
| 337 | if (frame->height & 31 || frame->linesize[0] & (q->width_align - 1)) { | 337 | if (frame->height & 31 || frame->linesize[0] & (q->width_align - 1)) { |
| 338 | qf->frame->height = FFALIGN(frame->height, 32); | 338 | qf->frame->height = FFALIGN(frame->height, 32); |
| 339 | qf->frame->width = FFALIGN(frame->width, q->width_align); | 339 | qf->frame->width = FFALIGN(frame->width, q->width_align); |
| 340 | 340 | ||
| 341 | ret = ff_get_buffer(q->avctx, qf->frame, AV_GET_BUFFER_FLAG_REF); | 341 | ret = ff_get_buffer(q->avctx, qf->frame, AV_GET_BUFFER_FLAG_REF); |
| 342 | if (ret < 0) | 342 | if (ret < 0) |
| 343 | return ret; | 343 | return ret; |
| 344 | 344 | ||
| 345 | qf->frame->height = frame->height; | 345 | qf->frame->height = frame->height; |
| 346 | qf->frame->width = frame->width; | 346 | qf->frame->width = frame->width; |
| 347 | ret = av_frame_copy(qf->frame, frame); | 347 | ret = av_frame_copy(qf->frame, frame); |
| 348 | if (ret < 0) { | 348 | if (ret < 0) { |
| 349 | av_frame_unref(qf->frame); | 349 | av_frame_unref(qf->frame); |
| 350 | return ret; | 350 | return ret; |
| 351 | } | ||
| 352 | } else { | ||
| 353 | ret = av_frame_ref(qf->frame, frame); | ||
| 354 | if (ret < 0) | ||
| 355 | return ret; | ||
| 351 | } | 356 | } |
| 352 | } else { | ||
| 353 | ret = av_frame_ref(qf->frame, frame); | ||
| 354 | if (ret < 0) | ||
| 355 | return ret; | ||
| 356 | } | ||
| 357 | 357 | ||
| 358 | qf->surface_internal.Info = q->param.mfx.FrameInfo; | 358 | qf->surface_internal.Info = q->param.mfx.FrameInfo; |
| 359 | 359 | ||
| 360 | qf->surface_internal.Info.PicStruct = | 360 | qf->surface_internal.Info.PicStruct = |
| 361 | !frame->interlaced_frame ? MFX_PICSTRUCT_PROGRESSIVE : | 361 | !frame->interlaced_frame ? MFX_PICSTRUCT_PROGRESSIVE : |
| 362 | frame->top_field_first ? MFX_PICSTRUCT_FIELD_TFF : | 362 | frame->top_field_first ? MFX_PICSTRUCT_FIELD_TFF : |
| 363 | MFX_PICSTRUCT_FIELD_BFF; | 363 | MFX_PICSTRUCT_FIELD_BFF; |
| 364 | if (frame->repeat_pict == 1) | 364 | if (frame->repeat_pict == 1) |
| 365 | qf->surface_internal.Info.PicStruct |= MFX_PICSTRUCT_FIELD_REPEATED; | 365 | qf->surface_internal.Info.PicStruct |= MFX_PICSTRUCT_FIELD_REPEATED; |
| 366 | else if (frame->repeat_pict == 2) | 366 | else if (frame->repeat_pict == 2) |
| 367 | qf->surface_internal.Info.PicStruct |= MFX_PICSTRUCT_FRAME_DOUBLING; | 367 | qf->surface_internal.Info.PicStruct |= MFX_PICSTRUCT_FRAME_DOUBLING; |
| 368 | else if (frame->repeat_pict == 4) | 368 | else if (frame->repeat_pict == 4) |
| 369 | qf->surface_internal.Info.PicStruct |= MFX_PICSTRUCT_FRAME_TRIPLING; | 369 | qf->surface_internal.Info.PicStruct |= MFX_PICSTRUCT_FRAME_TRIPLING; |
| 370 | 370 | ||
| 371 | qf->surface_internal.Data.PitchLow = qf->frame->linesize[0]; | 371 | qf->surface_internal.Data.PitchLow = qf->frame->linesize[0]; |
| 372 | qf->surface_internal.Data.Y = qf->frame->data[0]; | 372 | qf->surface_internal.Data.Y = qf->frame->data[0]; |
| 373 | qf->surface_internal.Data.UV = qf->frame->data[1]; | 373 | qf->surface_internal.Data.UV = qf->frame->data[1]; |
| 374 | 374 | ||
| 375 | qf->surface = &qf->surface_internal; | 375 | qf->surface = &qf->surface_internal; |
| 376 | } | 376 | } |
| 377 | 377 | ||
| 378 | qf->surface->Data.TimeStamp = av_rescale_q(frame->pts, q->avctx->time_base, (AVRational){1, 90000}); | 378 | qf->surface->Data.TimeStamp = av_rescale_q(frame->pts, q->avctx->time_base, (AVRational){1, 90000}); |