From 841fa76d5b2e9ab3aa01389c3443a98144bce65c Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Mon, 4 Aug 2014 17:04:06 +0200 Subject: [PATCH 1/2] VideoStreamPropertiers: fix pixFmt In ffmpeg, PixelFormat = 0 corresponds to yuv420p. --- src/AvTranscoder/Metadatas/VideoStreamProperties.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AvTranscoder/Metadatas/VideoStreamProperties.hpp b/src/AvTranscoder/Metadatas/VideoStreamProperties.hpp index 84996e0d..93fdf382 100644 --- a/src/AvTranscoder/Metadatas/VideoStreamProperties.hpp +++ b/src/AvTranscoder/Metadatas/VideoStreamProperties.hpp @@ -281,7 +281,7 @@ VideoProperties videoStreamInfo( const AVPixFmtDescriptor* pixFmt = av_pix_fmt_desc_get( codec_context->pix_fmt ); #else const AVPixFmtDescriptor* pixFmt = NULL; - if( codec_context->pix_fmt > 0 && codec_context->pix_fmt < PIX_FMT_NB ) + if( codec_context->pix_fmt >= 0 && codec_context->pix_fmt < PIX_FMT_NB ) pixFmt = &av_pix_fmt_descriptors[ codec_context->pix_fmt ]; #endif From 57dbe4142cf4dcaac0fbc406f68f4bb7cc111113 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Mon, 4 Aug 2014 17:05:58 +0200 Subject: [PATCH 2/2] Pixel: throw if unable to find pixel format. --- src/AvTranscoder/EssenceStructures/Pixel.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/AvTranscoder/EssenceStructures/Pixel.cpp b/src/AvTranscoder/EssenceStructures/Pixel.cpp index d0662110..a17a3a01 100644 --- a/src/AvTranscoder/EssenceStructures/Pixel.cpp +++ b/src/AvTranscoder/EssenceStructures/Pixel.cpp @@ -10,6 +10,8 @@ extern "C" { #include } +#include + namespace avtranscoder { @@ -65,7 +67,13 @@ AVPixelFormat Pixel::findPixel() const void Pixel::init( const AVPixelFormat avPixelFormat ) { - const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get( avPixelFormat ); + const AVPixFmtDescriptor* pix_desc = av_pix_fmt_desc_get( avPixelFormat ); + + if( ! pix_desc ) + { + throw std::runtime_error( "unable to find pixel format." ); + } + setBitsPerPixel ( av_get_bits_per_pixel( pix_desc ) ); setBigEndian ( pix_desc->flags & PIX_FMT_BE ); setComponents ( pix_desc->nb_components );