[FFmpeg-devel] [PATCH] libavcodec/tests: Added test for libavcodec/avpacket.c
Michael Niedermayer
michael at niedermayer.cc
Wed Oct 19 06:27:46 EEST 2016
On Tue, Oct 18, 2016 at 01:38:27PM -0700, Thomas Turner wrote:
> Improved code coverage for libavcodec
> Function(s) Tested: av_packet_clone()
>
> Signed-off-by: Thomas Turner <thomastdt at gmail.com>
> ---
> libavcodec/Makefile | 3 +-
> libavcodec/tests/avpacket.c | 254 ++++++++++++++++++++++++++++++++++++++++++++
> tests/fate/libavcodec.mak | 5 +
> 3 files changed, 261 insertions(+), 1 deletion(-)
> create mode 100644 libavcodec/tests/avpacket.c
>
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index a1560ba..d64b8df 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -1016,7 +1016,8 @@ SKIPHEADERS-$(CONFIG_VDA) += vda.h vda_vt_internal.h
> SKIPHEADERS-$(CONFIG_VDPAU) += vdpau.h vdpau_internal.h
> SKIPHEADERS-$(CONFIG_VIDEOTOOLBOX) += videotoolbox.h vda_vt_internal.h
>
> -TESTPROGS = imgconvert \
> +TESTPROGS = avpacket \
> + imgconvert \
> jpeg2000dwt \
> mathops \
> options \
> diff --git a/libavcodec/tests/avpacket.c b/libavcodec/tests/avpacket.c
> new file mode 100644
> index 0000000..67ec71b
> --- /dev/null
> +++ b/libavcodec/tests/avpacket.c
> @@ -0,0 +1,254 @@
> +/*
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <inttypes.h>
> +#include <string.h>
> +#include "libavcodec/avcodec.h"
> +#include "libavutil/error.h"
> +
> +
> +
> +
> +
> +static char* getbuffer(AVPacket avpkt, int index)
> +{
> + uint8_t *buffer;
> + int val, buffer_size = 256;
> +
> + /* Allocate 256 bytes */
> + if((buffer = malloc(buffer_size)) == NULL){
> + perror("malloc");
> + goto EXIT;
> + }
> +
> + if(index == 0){
> + val = snprintf(buffer, buffer_size,
> + "{buffer: %p, data: %p, size: %d}",
> + avpkt.buf->buffer, avpkt.buf->data, avpkt.buf->size);
> + }
> + else if(index == 1){
nitpick, the formating for this in ffmpeg is
} else if (index == 1) {
> + val = snprintf(buffer, buffer_size, "\"%s\"", avpkt.data);
> + }
> + else if(index == 2){
> + val = snprintf(buffer, buffer_size,
> + "{data: %p \"%s\", size: %d, type: %d}",
> + avpkt.side_data, avpkt.side_data->data, avpkt.side_data->size,
> + avpkt.side_data->type);
> + }
> +
> + /* snprintf fail check */
> + if(!(val > -1 && val < buffer_size)){
> + perror("snprintf");
> + free(buffer);
> + goto EXIT;
> + }
> +
> + return buffer;
> +
> +EXIT:
> + exit(-1);
exit always uses positive numbers in ffmpeg
> +}
> +
> +static void log_avpacket(AVPacket avpkt, const char* message)
> +{
> + uint8_t *buf_info = 0, *data_info = 0, *side_info = 0;
> +
> + /* get buf information */
> + if(avpkt.buf){
> + buf_info = getbuffer(avpkt, 0);
> + }
> +
> + /* get data information */
> + if(avpkt.data){
> + data_info = getbuffer(avpkt, 1);
> + }
> +
> + /* get side data information */
> + if(avpkt.side_data){
> + side_info = getbuffer(avpkt, 2);
> + }
> +
> + /* log standard packet information */
> + av_log(NULL, AV_LOG_INFO,
> + "\n%s:\n\n"
> + "buf\t\t: %p "
> + "%s\n"
> + "pts\t\t: %" PRId64 "\n"
> + "dts\t\t: %" PRId64 "\n"
> + "data\t\t: %p "
> + "%s\n"
> + "size\t\t: %d\n"
> + "stream_index\t: %d\n"
> + "flags\t\t: %d\n"
> + "side_data\t: %p "
> + "%s\n"
> + "side_data_elems\t: %d\n"
> + "duration\t: %" PRId64 "\n"
> + "pos\t\t: %" PRId64 "\n\n",
> + message,
> + avpkt.buf,
> + buf_info ? (char*)buf_info : "",
> + avpkt.pts,
> + avpkt.dts,
> + avpkt.data,
> + data_info,
> + avpkt.size,
> + avpkt.stream_index,
> + avpkt.flags,
> + avpkt.side_data,
> + side_info,
> + avpkt.side_data_elems,
> + avpkt.duration,
> + avpkt.pos
> + );
> +
> +}
> +
> +static int compare_av_packet(AVPacket* p1, AVPacket* p2)
> +{
> + /* compare data */
> +
> + if(p1->size != p2->size){
> + fprintf(stderr, "size\n");
> + goto fail;
> + }
> + if(strncmp(p1->data, p2->data, p1->size) != 0){
memcmp() seems the better choice as it does not depend on zero
termination
also, if you like you could work on 2 or 3 tests at the same time
so while one patch is reviewed you can work on something else
Thanks
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
In fact, the RIAA has been known to suggest that students drop out
of college or go to community college in order to be able to afford
settlements. -- The RIAA
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20161019/3371d598/attachment.sig>
More information about the ffmpeg-devel
mailing list