On 10/01/13 19:45, Rémi Denis-Courmont wrote:
> ---
> libavcodec/vdpau.c | 42 ++++++++++++++++++++++++
> libavcodec/vdpau.h | 75
> +++++++++++++++++++++++++++++++++++++++----
> libavcodec/vdpau_internal.h | 12 +++++++
> 3 files changed, 123 insertions(+), 6 deletions(-)
In general 80 col lines are better.
> diff --git a/libavcodec/vdpau.c b/libavcodec/vdpau.c
> index 6daf494..c2fa5da 100644
> --- a/libavcodec/vdpau.c
> +++ b/libavcodec/vdpau.c
> @@ -38,6 +38,48 @@
> * @{
> */
>
> +int ff_vdpau_common_start_frame(AVCodecContext *avctx, av_unused const
> uint8_t *buffer, av_unused uint32_t size)
> +{
> + struct vdpau_context *hwctx = avctx->hwaccel_context;
> +
> + hwctx->bitstream_buffers_used = 0;
> + return 0;
> +}
> +
> +int ff_vdpau_common_end_frame(AVCodecContext *avctx)
> +{
> + MpegEncContext * const s = avctx->priv_data;
> + struct vdpau_context *hwctx = avctx->hwaccel_context;
> +
> + if (hwctx->bitstream_buffers_used) {
> + hwctx->render(hwctx->decoder,
> ff_vdpau_get_surface_id(s->current_picture_ptr), (void *)&hwctx->info,
> hwctx->bitstream_buffers_used, hwctx->bitstream_buffers);
> +
> + ff_draw_horiz_band(s, 0, s->avctx->height);
> + hwctx->bitstream_buffers_used = 0;
> + }
> + return 0;
> +}
> +
> +int ff_vdpau_add_buffer(AVCodecContext *avctx, const uint8_t *buf, int
> buf_size)
> +{
> + struct vdpau_context *hwctx = avctx->hwaccel_context;
> + VdpBitstreamBuffer *buffers = hwctx->bitstream_buffers;
> +
> + buffers = av_fast_realloc(buffers, &hwctx->bitstream_buffers_allocated,
> (hwctx->bitstream_buffers_used + 1) * sizeof(*buffers));
> + if (!buffers)
> + return AVERROR(ENOMEM);
> +
> + hwctx->bitstream_buffers = buffers;
> + buffers += hwctx->bitstream_buffers_used++;
> +
> + buffers->struct_version = VDP_BITSTREAM_BUFFER_VERSION;
> + buffers->bitstream = buf;
> + buffers->bitstream_bytes = buf_size;
> + return 0;
> +}
> +
> +/* Obsolete non-hwaccel VDPAU support below... */
> +
> void ff_vdpau_h264_set_reference_frames(MpegEncContext *s)
> {
> H264Context *h = s->avctx->priv_data;
> diff --git a/libavcodec/vdpau.h b/libavcodec/vdpau.h
> index 241ff19..65492aa 100644
> --- a/libavcodec/vdpau.h
> +++ b/libavcodec/vdpau.h
> @@ -52,6 +52,74 @@
> #include <vdpau/vdpau.h>
> #include <vdpau/vdpau_x11.h>
>
> +union VdpPictureInfo {
> + VdpPictureInfoH264 h264;
> + VdpPictureInfoMPEG1Or2 mpeg;
> + VdpPictureInfoVC1 vc1;
> + VdpPictureInfoMPEG4Part2 mpeg4;
> +};
> +
> +/**
> + * This structure is used to share data between the Libav library and
> + * the client video application.
> + * This shall be zero-allocated and available as
> + * AVCodecContext.hwaccel_context. All user members can be set once
> + * during initialization or through each AVCodecContext.get_buffer()
> + * function call. In any case, they must be valid prior to calling
> + * decoding functions.
> + */
> +struct vdpau_context {
Make it a typedef VDPAUContext
Maybe also the other struct could enjoy that.
The rest seems fine.
lu
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel