diff --git a/main/codec.c b/main/codec.c
index 7797147a797ae7d0a18fb958980d960ae818e5b0..5b262f6a11504d3559a53a5dbf2581d214d4220b 100644
--- a/main/codec.c
+++ b/main/codec.c
@@ -406,6 +406,11 @@ unsigned int ast_codec_samples_count(struct ast_frame *frame)
 
 	if (codec->samples_count) {
 		samples = codec->samples_count(frame);
+		if ((int) samples < 0) {
+			ast_log(LOG_WARNING, "Codec %s returned invalid number of samples.\n",
+				ast_format_get_name(frame->subclass.format));
+			samples = 0;
+		}
 	} else {
 		ast_log(LOG_WARNING, "Unable to calculate samples for codec %s\n",
 			ast_format_get_name(frame->subclass.format));